As a tech lead or eng manager, you so frequently get request from above or from other teams to drop what you are doing and work on this thing they need, *now*.
During my 4 years at Uber after asking these questions, 9 out of 10 times it turned out it wasn't really urgent:
1. "What is the impact of this work you're asking for?" If the impact is unclear: sorry, but we can't do the work. Why would we?
Just this question made the requester realize half the time they just think it's urgent, but don't know what the work will actually result in.
2. "Do you have a spec that is agreed with stakeholders?" A writeup answering the "why" and the "what" that is signed off by relevant business folks.
I've seen so much engineering work thrown out as later the business goes "that's not what we wanted, why didn't you tell us?"
3. "We're not committing to any work before we have done a rough estimation."
With #1 and #2 done, many stakeholders will come and say "drop what you're doing, this is a 3-day work we need ASAP."
Hold your horses. You don't make estimates: the team doing the work does...
4. Make the cost of dropping what you're doing very clear.
This cost is always forgotten by the person coming with the request. But it's a relevant one: wrapping up work, onboarding to the new work, then later onboarding to the old work. Plus a hit on morale for a sudden change!
Uber has some very hectic times when there were reasons we needed to do some new work ASAP. Like a regulation change that means the company would be banned from operating in a region if not building something.
Even in such a place, most "urgent" things turned out to be noise.
The way I always approached these requests was to educate the person coming with them, and have them realize their work is actually not as urgent or as important or as impactful of what the team is already doing.
Doing so meant building empathy both ways, and less hard feelings.
A huge upside of this approach: when committing, you *can* commit with a very high certainty that you will not be interrupted with your work.
The alternative: take on this "super urgent" work, then someone else comes along saying " I need you to drop what you are doing *now*..."
• • •
Missing some Tweet in this thread? You can try to
force a refresh
In case you missed it: it was Microsoft who voluntarily cannibalized their very very profitable Visual Studio business and released VS Code for free. And made it trivial to fork. VS Code + forks probably account for 80%+ of the global dev market in usage
Why did they do it?
This was clearly on purpose from Microsoft - give up one revenue generating area to keep winning in a much bigger one
Not squeezing all lemons is an underrated and very smart strategy, as @jakozaur puts it
Also why NVIDIA is “losing” in AI models to eg OpenAI, Anthropic etc
And before you show me the tech jobs going down graph that goes viral every week: know that most sectors see the “decline in jobs” from the pandemic peak: blog.pragmaticengineer.com/software-engin…
And this is not about denying the impact of GenAI for tech jobs. We will see smaller teams do more (already are). More demand for “top” software engineers, and most likely less for entry-level and “average” talent.
We don’t know (yet) if we will see an explosion of smaller teams/companies and if we’ll see a demand surge to take over/maintain “vibe coded” businesses as they start to scale
Here’s one reason Apple fought tooth and nail to disallow web payments for apps:
Because Apple’s IAP is bad in many ways, and *so many* apps will move to web-based payments now not mainly because of the 30% Apple fee, but because of how bad IAP is.
Let me give you examples:
1. Refunds
With Apple IAP it’s just not possible to do!! No, it really is not for the merchant. They cannot do a full or partial refund. Talk about poor customer support!
2. Group subscriptions. Nonexistent with IAP.
3. Paying using a non-credit card option. IAP does not allow
4. CUSTOMER SUPPORT
In general, with Apple’s IAP this is nightmare. (After you pay 30% more, mind you!)
You cannot do stuff like “we’re sorry for your trouble, would you like 3 months free or a full refund?”
5. Asking ppl why they cancel. NOPE! Not even after they cancel
Every now and then there's this prediction of when we will see the first one billion dollar company ran by one person...
... and I think back to how in 2016 there was this one product inside Uber that had crossed a $1B annual run rate that had a total of one dev allocated to it.
And half a data scientist (part-time).
It was cash.
Funny how headcount games can work inside fast-growing companies, especially when the product is a stated goal of what a founder does NOT want to support (but turns out to be essential!)
I only have second-hand details here but the story was along the lines of not being able to get official headcount (because when Uber was founded, no cash and no tipping were table stakes).
It only got funding after crossing the $1B landmark.
"We just fired an engineer after ~15 days on the job who lacked basics skills on the job but aced the interview - clearly, using cheat tools.
He admitted to how he did it: he used iAsk, ChatGPT and Interview Coder throughout"
(I personally talked with this person and know them well)
This company hired full remote without issue for years: this is the first proper shocker they have.
They are changing their process, of course. In-person interviews, in-part likely to be unavoidable.
As a first change, they have started to be lot more vigilant during remote interviews, and laying some "traps" that those using AI assistants will fall into.
Just by doing that they think about 10% of candidates are very visibly using these (they just stop interview processes with them)
I used Windsurf, but would work just as well with Cursor (and maybe VS Code as well now). Under the hood its all the same!
When setting up, took an hour to get it to work, thanks to my local npm + npx being out of date. Updated it and then worked fine.
The Windsurf MCP interface: just set up the Postgres one. But again behind the scenes its "just" an npm package that you can invoke from the command line as well! Which is the beauty of it