惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog RSS Feed
W
WeLiveSecurity
I
InfoQ
L
Lohrmann on Cybersecurity
Simon Willison's Weblog
Simon Willison's Weblog
腾讯CDC
S
Schneier on Security
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threat Research - Cisco Blogs
P
Palo Alto Networks Blog
Attack and Defense Labs
Attack and Defense Labs
I
Intezer
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
S
Securelist
T
Tailwind CSS Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
T
Tor Project blog
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
C
Cybersecurity and Infrastructure Security Agency CISA
Apple Machine Learning Research
Apple Machine Learning Research
V
Visual Studio Blog
Know Your Adversary
Know Your Adversary
T
The Blog of Author Tim Ferriss
N
News and Events Feed by Topic
小众软件
小众软件
G
Google Developers Blog
F
Full Disclosure
O
OpenAI News
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
TaoSecurity Blog
TaoSecurity Blog
U
Unit 42
Jina AI
Jina AI
S
SegmentFault 最新的问题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Proofpoint News Feed
Y
Y Combinator Blog
N
News and Events Feed by Topic
K
Kaspersky official blog

Kent C. Dodds Blog

Implementing Hybrid Semantic + Lexical Search Simplifying Containers with Cloudflare Sandboxes Migrating to Workspaces and Nx Offloading FFmpeg with Cloudflare Building Semantic Search on my Content Helping YOU ask ME questions with AI How I used Cursor to Migrate Frameworks The Dow's Start on the Covenant Path 2025 in Review The next chapter: EpicAI.pro AI is taking your job How I increased my visibility Launching Epic Web 2023 in Review Stop Being a Junior RSC with Dan Abramov and Joe Savona Live Stream Fixing a Memory Leak in a Production Node.js App 2022 in Review My Car Accident I Migrated from a Postgres Cluster to Distributed SQLite with LiteFS I'm building EpicWeb.dev A review of my time at Remix Remix: The Yang to React's Yin How I help you build better websites Why I Love Remix The State Initializer Pattern How to React ⚛️ Get a catch block error message with TypeScript Building an awesome image loading experience How Remix makes CSS clashes predictable Introducing the new kentcdodds.com How I built a modern website in 2021 How to use React Context effectively Static vs Unit vs Integration vs E2E Testing for Frontend Apps The Testing Trophy and Testing Classifications Array reduce vs chaining vs for loop Don't Solve Problems, Eliminate Them Super Simple Start to Remix Super Simple Start to ESModules in Node.js JavaScript Pass By Value Function Parameters How to write a Constrained Identity Function (CIF) in TypeScript How to optimize your context value How to write a React Component in TypeScript TypeScript Function Syntaxes Listify a JavaScript Array Build vs Buy: Component Libraries edition Using fetch with TypeScript Wrapping React.useState with TypeScript Define function overload types with TypeScript 2020 in Review Hi, thanks for reaching out to me 👋 useEffect vs useLayoutEffect Super simple start to Firebase functions Super simple start to Netlify functions Super Simple Start to css variables Favor Progress Over Pride in Open Source Testing Implementation Details How getting into Open Source has been awesome for me useState lazy initialization and function updates Use ternaries rather than && in JSX Application State Management with React Use react-error-boundary to handle errors in React JavaScript to Know for React How I structure Express apps What open source project should I contribute to? When I follow TDD AHA Programming 💡 How I Record Educational Videos Should I write a test or fix a bug? Stop mocking fetch Intentional Career Building Improve test error messages of your abstractions Tracing user interactions with React Eliminate an entire category of bugs with a few simple tools Common mistakes with React Testing Library Super Simple Start to React Stop using client-side route redirects The State Reducer Pattern with React Hooks Function forms Replace axios with a simple custom fetch wrapper How to test custom React hooks React Production Performance Monitoring Should I useState or useReducer? Stop using isLoading booleans Make Your Test Fail Make your own DevTools An Argument for Automation Fix the "not wrapped in act(...)" warning Super Simple Start to ESModules in the Browser Implementing a simple state machine library in JavaScript 2010s Decade in Review Why users care about how you write code Why I avoid nesting closures Don't call a React function component Why your team needs TestingJavaScript.com Inversion of Control Understanding React's key prop How to Enable React Concurrent Mode How to add testing to an existing project Profile a React App for Performance
Business and Engineering alignment
2020-12-10 · via Kent C. Dodds Blog

I've participated in a framework migration at every company I've worked:

  • Domo: Backbone -> Angular.js
  • AtTask (now Workfront): JSPs / VanillaJS -> Angular.js
  • Alianza: Angular.js -> React*
  • PayPal: Backbone.js -> React

*Alianza is a special case because that migration never actually started and that's part of what I want to talk about today. We'll come back to this later.

Luckily, every framework migration I've participated in was ultimately a success. They each had their own level of challenge and impact on development productivity (and ultimately the user), but ultimately, the migration was a success.

But I don't want to limit my thoughts to things as big as framework migrations. What I want to talk about is more general. It's truly:

How to convince "the business folks" to let you do what you want.

The mission of the company

In a functional company, the company's mission is paramount. Everything that happens should push that mission forward. The mission could be something boring like "make us all rich" (it seems that many companies have this as the primary mission even if it's unstated), interesting like "democratize financial services," or inspiring like "accelerate the world's transition to sustainable energy."

Before you're even hired on at the company, you should ensure that you personally are aligned with the mission of the company. If you aren't (and the company is a functional one), then you'll struggle with this next part and you'll not enjoy your time at the company very much. (And if the company is not a functional one then you'll probably not be happy either).

For the rest of the blog post, we'll assume that the company and its employees are focused on the mission of the company. If they aren't, then you have bigger problems... I do address this below though, so continue reading.

Also, I'm going to assume that the person who decides your task priorities (and therefore the person to convince) is the product manager. Feel free to swap this for whoever the person (or people) in your situation has that responsibility.

Investment time

Let's assume you want to make an investment into your codebase. This could be anything:

  • Paying off "Tech Debt"
  • Adding tests
  • Improving build/deploy times/processes
  • Migrating to a new framework or library
  • Rewriting a feature that's outgrown its original implementation

You probably come up with these possibilities on a daily basis. It's unlikely that the product managers will bring these things to your sprint planning meetings. Why is that?

The thing those investments share is that they have an indirect impact on the mission of the company. Product managers are focused on the product itself and how it's accomplishing the mission. This is normally seen from the outside with a look at capabilities, features, and customer requests. They will occasionally notice the side-effects of some of these needs: slow dev velocity, frequent bugs, performance issues. But in my experience, more often they assume that "this is just the way it is" and they'll focus on giving you "user stories" which are focused on features that will directly further the mission of the company.

In your mind, you see these platform deficiencies and recognize how they are detracting from your company's ability to accomplish its mission. However, you may struggle to bring it up because you feel like you're swimming in custom requests and can't ever get around to these investments. Maybe you feel like deciding what to do with your time is not "your job."

But your job isn't to turn user stories into code. The company's mission is your job. The company has a mission. Everyone at the company is hired to push that mission forward, whether they be in Quality Assurance, Sales, Custodial, Marketing, Finance, Engineering, or Management. You're not a software engineer hired to code. You're a human hired to push their mission forward. It just so happens that you are a human with coding skills and during the hiring process, they recognized that those coding skills could help them in their mission.

Ok, so the mission is important, so what?

Do you feel like these problems make an impact on your ability (or the ability of others) to push the mission forward? Do you really feel like these things you're thinking of are more important to the success of the company mission than the features you're building? How can you be sure? They make an indirect impact at best (and no impact at worst).

Take the top feature you're supposed to work on right now and weigh it against the top investment you want to make. Compare the benefit-to-effort ratio. Keep in mind the long-term impact as well. Some features and investments have a compounding effect over time. And don't forget that your long-term horizon/vision should factor in the mortality of your company... you gotta keep the business afloat for long enough to realize these benefits.

Another thing to keep in mind that you may not have enough information to perform this analysis. You may need to ask the product manager questions about the features and how they tie into the mission of the company. Go into the conversation with an open mind and a desire to understand. Your goal should be to push the mission of the company forward, and that might mean you don't get to work on these investments any time soon.

My investments are mission-critical

Ok, so you've done the analysis and you have convinced yourself that your investments have a higher long-term benefit-to-effort ratio on the mission of the company than the things the product manager is bringing you. Time to talk to them.

First, your product manager should not be surprised about this conversation. This should not be the first time they hear about these investments you'd like to make. Keep them in the loop about some of the investments you're considering. Let them know that you're conducting an analysis on their value to the mission. That way, when you come to have this conversation, it's just you reporting the results of your analysis.

Your job is to help them understand that your investments are mission-critical.

How you accomplish this depends on the investment, but in principle it's all the same. In fact, it's the same for user features too: Start with why (the problem). If the decision makers don't have a clear understanding of the problem, then it doesn't matter how good the solution is. You need to internalize this problem and have them begging you for the solution. The problem must be related to the mission. It needs to be their problem. If it's just your problem, then they won't be convinced. Keep in mind that when you're communicating the problem you'll want to make sure they understand the cost of doing nothing to address the problem in the long term.

Once they've been able to associate the problem with the mission of the company, then you can communicate the solution: your investment. Remember that the product manager is going to try to conduct the same analysis that you have about the long-term benefit-to-effort ratio and weigh that against everything else when they prioritize your work. You need to make sure they have all the information. In communicating the problem, you've hopefully given them an idea of the benefit of a solution. When communicating the solution, you'll want to make sure they have a clear understanding of the effort involved.

What next?

Ultimately, the company hired the product manager to help prioritize work in the optimal way to push the mission forward. You should trust them to do their job well and recognize that they may have context that you're missing. So long as you effectively expressed all the information you can about the long-term benefit-to-effort ratio of your ideas then you've done all you can there.

If you experience cognitive dissonance when you hear their decision to forego your suggestions or de-prioritize them, then there's been a misunderstanding. Either you misunderstand the problem/solution that you yourself presented, you misunderstand the importance of the other things the product manager prioritized, or they misunderstood those things.

Wherever the misunderstanding lies, you can put forth an honest, good-faith effort to bring things to light. Express your thoughts on the matter and ask them to help you understand their perspective. In that discussion you might gain new insight to help you be more comfortable with the decision they have made. You may also uncover and correct their misunderstanding and get a more favorable outcome for your idea.

What if my company is not functional or I don't care about the mission?

Get out. Or find out what motivates the decision makers and ensure they see the connection between what you're trying to do so they can prioritize it properly.

The mission of the company is one thing, but what actually matters is the true outcome of the work of the people working there. If you can be comfortable with that outcome (and helping put that "unstated mission" forward) then fine, adapt to that. Keep in mind that if an unstated mission exists, then it can be changed or even hidden/misunderstood. A dysfunctional company is often infested by in-fighting/political games that are not fun at all. You'll find unexpected and ridiculous road-blocks. I suggest you start looking for a better place to work that has a motivating mission.

What if my goals are misaligned with what's good for the mission?

Finally, we get to the Alianza story. I had been working at Alianza for almost a year when I started thinking I'd like to switch from Angular.js to React personally. I was getting fed up with Angular.js and Angular 2 was "on the horizon."

After investigating it, I realized that "upgrading" Angular 2 wasn't much of an upgrade at all but more of a migration to a completely new framework. Angular 2 didn't seem to address the issues I had with Angular.js anyway, so I thought: "Well, it'll be just as easy to migrate to React as it would be to migrate to Angular 2 and I'd rather work with React anyway."

So, I went to the ultimate decision maker and brought up the topic. In retrospect, I was unsurprised (but still disappointed) when he said that they just didn't have the budget to migrate to any new framework. We were a small company (only two of us on the frontend) and benefit-to-effort ratio just didn't make sense. We needed a lot of features and migrating to a new framework was not nearly enough of a benefit for us to justify the effort within that time horizon.

All the other companies that had conducted this kind of a migration needed to move forward and had compelling and mission-based reasons to conduct the migrations.

Now, I just want to make sure that it's clear that at this company they had let me do a LOT of investments in the platform. They were super responsible and had treated me very well. Like I said, I wasn't surprised. It just didn't make sense.

But my personal career goals involved me moving from the Angular.js community to the React community (that decision played out extremely well for me), so I started looking for a new job.

It wasn't that I was unhappy with the mission. I was happy to get behind the mission and push, but my personal career goals and the good of the mission were at odds. So I changed to a new company where my goals and the mission were well-aligned.

Conclusion

To sum up, the way you convince the decision makers to do what you want is to first convince yourself that your idea has an appropriate benefit-to-effort ratio within a relevant time-horizon that is grounded in the company mission. Once you've convinced yourself of this, then you communicate that to the people who prioritize your tasks.

Let me say that again. It all comes down to this:

You need to determine and communicate the benefit-to-effort ratio within a relevant time-horizon that is grounded in the company mission.

The business and engineering alignment comes down to both being focused on furthering the company mission. If you're both truly working toward that goal, then alignment becomes a matter of proper communication, mutual respect, and understanding.

Good luck!