Ten Principles for Growth as an Engineer by Dan Heller:
“These are the most important lessons that I wish I had learned ears earlier than I did; I sure wish someone had sent it to me when I was 22.”
1. Reason about business value: Reason like a CEO. Understand the value of your work to your company, and take responsibility for reasoning about quality, feature richness, and speed. Your job isn't just to write code; your job is to make good decisions and help your company succeed, and that requires understanding what really matters.
2. Unblock yourself: Learn to never, ever accept being blocked; find a way by persuasion, escalation, or technical creativity. Again, your job isn't just to write the code and wait for everything else to fall into place; your job is to figure out how to create value with your efforts.
3. Take initiative: The most common misconception in software is that there are grown-ups out there who are on top of things. Own your team's and company's mission. Don't wait to be told; think about what needs doing and do it or advocate for it. Managers depend on the creativity and intelligence of their engineers, not figuring it all out themselves.
4. Improve your writing: Crisp technical writing eases collaboration and greatly improves your ability to persuade, inform, and teach. Remember who your audience is and what they know, write clearly and concisely, and almost al-wavs include a tl;dr above the fold
5. Own your project management: Understand the dependency graph for your project, ensure key pieces have owners, write good summaries of plans and status, and proactively inform stakcholders of plans and progress. Practice running meetings! All this enables you to take on much bigger projects and is great preparation for leadership.
Google is standardizing interview questions (finally?) so I am forced to retire my bootleg interview questions. In honor of the great service they've done over 200+ PM interviews, I'm going to do a thread that I expect no one to read but I have no other way to memorialize them.
Two employees with equivalent skills. One is promoted repeatedly, one stagnates.
What can account for the differences in career success?
Their work has similar quality, is done at similar speeds, and yet one of them is recognized and rewarded repeatedly. Why?
🧵
When teams estimate work for a product, there's a HUGE GIGANTIC ERROR that they almost always make.
What's that error? They only count the cost of building a feature. "This feature will take 4 engineer weeks to build."
That's just the beginning of the cost.
🧵
When I started my career in Tech in 2007, there was a massive focus in the industry on Team & Company Capability Models, Maturity Levels, or "Career Ladders" for Teams, such as TSP (Team Software Process), PSP (Personal Software Process) and mainly CMMI (Capability Maturity Model Integration).
Work pioneered by Watts Humphrey in the 80s at the Software Engineering Institute (SEI) at Carnegie Mellon University.
A common question that was asked at the time was:
> Are you using CMMI? What is your company's maturity level? Level 2, Level 3, Level 5? Wow!?
Since then, our focus as an industry completely shifted to Agile (even though the manifesto happened in 2001) at the Team/Company level and to "Capability Models" at the individual level, with new critical roles being formally defined, such as Engineering Manager and Staff Engineer (I had never heard about those roles till maybe ~2015-2016) and more importantly a strong focus on the self: Individual Career Ladders & the different Career Tracks.
A common question that is still asked these days is:
> Does your company have a career ladder? Is it a "dual" track, or must you become a manager to grow beyond a certain level? What is the promotion process? What is your seniority level?
> Are you a Senior/L5? Are you Staff/L6? Are you Principal/L7? Wow!?
All that to say that I was pleased to read recently @buritica's piece "From good to great: A capability framework for building exceptional product engineering teams" that brings back the good parts and some of Humphrey's original ideas on Team Maturity Level but with a much more healthy view and a lot less focus on heavy processes.
Five capabilities mentioned by Buritica that I see new teams struggling the most:
1) Navigate Ambiguity
2) Broadcast state
3) Negotiate Dependencies
4) Understand its levers
5) Respond to incidents
Below are some of my favorite highlights.
Infrastructure automatically defined by used tech stack. Using Infrastructure as Code and serverless. Interesting idea which could work well for less complex projects. #DevOps#IaC#Serverless@vercel
https://t.co/71ARFHaQQr
"Stakeholders." As a sw engineer, doing your job tends to go beyond just executing tasks: it's often about figuring out what the 'right' work is to do.
To do so, it's worth talking with stakeholders for your team.
Who are these, and how can you locate them?
As a software engineer, how can you recognize that you are firefighting too much?
Here are a few questions worth asking. If the answer is "Yes" to several of them: you might be firefighting too much.
What other ways would you say you can recognize that you're in this situation?
- Engineers have Github repos to show
- Designers have their portfolios
What do CTOs and Engineering Managers have to showcase their skills and achievements?
Well, these are a few things I can think of:
I found out what happened that took Dollar Shave Club down for 8 days.
I was hoping the company would publish a postmortem, but this has not happened, and my request for comment went unanswered.
I'll publish what I learned next week (I reached out one last time for comment).
"Cloud native" - what does it mean to you? Everyone has their opinion. Here's ours, presented in a video:
Watch and subscribe here: https://t.co/L8FPVy8XKI