18 things that companies with a good developer culture (mostly) have. A thread.
First, some basics. 1. Psychological safety & a blameless culture. You can be yourself without fear. 2. Fair compensation, roughly on par with the market. 3. Common-sense flexibility w working hours.
Next: clarity & collaboration 4. Understand the "why" before starting work. 5. A backlog that devs also contribute to. 6. Communicating directly with others, not through e.g. managers 7. Working with other disciplines (e.g. product, UX) 8. Celebrating that people take initiatives
Sustainable engineering culture 9. Functionally complete != production ready 10. Code reviews and testing are part of the everyday dev process. 11. CI and CD. 'nuff said. 12. Healthy oncall. Fixing poor oncall has priority over product work. 13. Internal open source model.
Career progression 14. Engineering managers are technical. 15. A career ladder for devs, with expectations per level 16. Parallel IC & management tracks, with clarity on how to move between them. 17. A culture of giving & reveing feedback. 18. Professional growth & mentorship
"Can you summarize this 200-page dev resume book in 7 tweets or less?"
Challenge accepted. Here we go.
1. Know what the goal of your resume is. This is what most people get wrong. It's not about your professional history. It's to get that next call with the recruiter/HM. (1/7)
2. Understand how the hiring pipeline works: who will read your resume, and what your competition is at smaller, vs larger companies.
Know that an employee referral *dramatically* increases your chances of passing the resume screen round. (2/7)
3. Use an easy-to-scan template. Recruiters do a quick scan, then a thorough scan (if they find key details in the quick scan). Make this "quick scan" as easy as possible.
I've been writing the ebook thetechresume.com on the side for a few months, and launched it 13 days ago.
In this 13 days it made $13,000, and $18K since I started, with more than 2,000 customers.
This is about 13x what I expected. Thread on how it got here.
It all started with COVID, layoffs happening across the tech industry, and me wondering how I can help. I offered to do a few resume reviews, being a hiring manager myself:
I thought I'll get a handful of responses. I got 300+. There was no way I could give thorough feedback on all of it. So I decided to scale myself: do in-depth review of the first 50, take notes, then send those compiled notes to others. Here's that PDF: thetechresume.com/samples/origin…
I’ll write about my (similar) take in more depth. But a few facts most people are surprised about, on what becoming an eng manager at Uber is/was like (thread):
1. It’s not a promotion, level or money wise. EM1 == Sr Eng comp wise. Sr EM == Staff Eng. Director == Sr Staff. And so on.
When I moved to management, my comp actually dropped: before I was at the “top” of Sr eng, but now closer to the bottom of EMs when it came to bonuses.
2. You don’t just “become” a manager. You *have* to go through an apprentice manager program and graduate. Graduating is ridiculously hard: as hard as manager promo. My case had 20 stakeholders giving feedback on me. Why this hard? To avoid making poor managers full-time EMs.
“Why do companies ask data structure&algorithm questions? It’s not like you’d use this day to day...”
At my past 3 companies - Skype/Microsoft, Skyscanner, Uber - I needed to use them to write some code, and *especially* to understand things. Here’s some examples. A thread.
At Skype, building Skype for Xbox One, the platform was missing a bunch of basic libraries. We built a navigation framework on top of WinJS that needed to keep track, and in some cases, traverse the DOM tree. #Trees, #DFS, #BFS
Also at Skype, one of the devs was obsessed with performance. For the contact list sorting, he built his own algo. I used the O(n) approach to tell him why this was silly. Then built a faster version. Then we benchmarked the built-in sort which was faster #sorting#facepalm
Seven pieces of advice I would give myself to when I started out in software engineering (aka things I wish I learned or did earlier). A thread.
1. Take the time to read one or two books a year on software engineering. I don't mean skimming: I mean actually reading, taking notes, talking about it with others, taking the book a few chapters a week.
I didn't do this for the first five years of my career. Wish I had.
2. Learn two programming languages in your first two years' of coding, and learn one of them *really* well. Down to how-the-compiler-works well.
I mastered C# in-depth, PHP my "not-so-good" language. After this, picking up Java, Ruby, Swift, Go, Python were all so much easier.
How can you develop against prod, doing it safely and securely?
And how can you do the reverse: route prod traffic to a dev environment? Run the app store app on your phone, and have it trigger a breakpoint on your laptop?
Here's a working solution. Thread with some boxes.
1. We want our dev service, running on our laptop to talk to a production service. For example, we're modifying the onboarding service in dev that needs to access the login service in prod. Or something like that.
Point is, we can't just talk to it directly.
2. Let's add a proxy client that will forward messages. And let's box all of this up into a VM that can run locally on our dev machine (we'll see why we'll use a VM in a minute).