Companies start life in the cowboy phase – a band of brothers and sisters building something cool.
You ship straight to prod, you understand the whole business, you vibe with everyone around you. They think it, you build it. Telepathic almost.
When something goes wrong, you know how to fix it. The whole system fits in your head. You know what everyone is working on, and you Just Know™ what matters most.
Life is good. An engineer's dream.
Then something goes wrong.
You push a critical bug. Production goes down. Customers lose data. Thanksgiving promotions don't work. The site crashes at a pitch to investors. Money is lost.
Time to grow up.
You add checks and balances.
Something simple – everyone's code needs to go through a pull request. Helps you know what's going on, increases team learnings, ensures at least two people see every change.
Then you add QA, product managers, designers, feature owners, internal clients, external clients, this person that person ... before you know it every idea goes through committee after committee before it even reaches the developer.
3 or 4 years after starting, if you're not careful, most of your time goes to meta work. Work about work.
You have an idea. Tell the PM.
PM puts it on their pile of ideas.
Every Friday, your PM – now called Head of Product because you're a very real grownup company – looks at this list and decides what to work on.
Your idea might just align with business objectives.
PM looks at everyone touched by this idea and goes into Requirements Gathering mode. They talk to sales, customer support, operations, engineering, the CEO, the COO, the janitor, and maybe that homeless dude outside.
3 weeks later a spec is born.
5 miles long, covering all edge cases, and with everyone's pet addition. Your idea is on line 5 paragraph 6. Now unrecognizable.
Work starts with reviewing the spec. You talk to the PM ask a bunch of questions, poke holes in the edge cases, talk to the clients again just to make sure everyone understands the spec in the same way.
Everyone had a new idea. That little something they forgot.
The spec grows a mile.
You create a detailed estimate. Line by line. Investigate the code, plan the solution, really dig down to what's needed. Hand waving with an "Eh about 5 days" won't do in a serious grownup organization like yours.
It takes you 3 days to dig through the requirements, the aging codebase, and the technical debt. You're pretty sure you know how to implement this.
Estimate: 5 days.
You spend another 2 days writing test cases for QA, help docs for feature testing, and some documentation for yourself. Gotta know how you'll know the feature works before you start. Them's the rules.
You finally get to code. 2 weeks since you started the project.
Except your estimate is so detailed that there's no fun left. You're just following a checklist. A detailed list of steps pre-determined while estimating.
You've done the engineering. The fun stuff. Now you're just doing work. Like digging a trench.
10 days later you're ready to deploy.
Oh the estimate was 5? Ha! You forgot work takes work. Even if it's simple, easy, and following a checklist, it still takes time.
Frustrating, I know.
You send a pull request to the 5 repositories you changed. Ship off to QA. And ask the PM to verify everything looks good.
Five hundred comments and 3 feature additions later, you're ready to ship.
That took another week.
5 months from idea to feature but at least your deployment process is easy. You're a young startup after all!
Just poke the deployment engineer and she'll get to it tomorrow.
I write articles with real insight into the career and skills of a modern software engineer. "Raw and honest from the heart!" as one reader described them. Fueled by lessons learned over 20 years of building production code for side-projects, small businesses, and hyper growth startups. Both successful and not.
Subscribe below 👇
Join Swizec's Newsletter and get insightful emails 💌 on mindsets, tactics, and technical skills for your career. Real lessons from building production software. No bullshit.
"Man, love your simple writing! Yours is the only newsletter I open and only blog that I give a fuck to read & scroll till the end. And wow always take away lessons with me. Inspiring! And very relatable. 👌"
Have a burning question that you think I can answer? Hit me up on twitter and I'll do my best.
Who am I and who do I help? I'm Swizec Teller and I turn coders into engineers with "Raw and honest from the heart!" writing. No bullshit. Real insights into the career and skills of a modern software engineer.
Want to become a true senior engineer? Take ownership, have autonomy, and be a force multiplier on your team. The Senior Engineer Mindset ebook can help 👉 swizec.com/senior-mindset. These are the shifts in mindset that unlocked my career.
Curious about Serverless and the modern backend? Check out Serverless Handbook, for frontend engineers 👉 ServerlessHandbook.dev
Want to Stop copy pasting D3 examples and create data visualizations of your own? Learn how to build scalable dataviz React components your whole team can understand with React for Data Visualization
Did someone amazing share this letter with you? Wonderful! You can sign up for my weekly letters for software engineers on their path to greatness, here: swizec.com/blog
By the way, just in case no one has told you it yet today: I love and appreciate you for who you are ❤️