You’re about to read a blog post with a lot of advice. Learning from those who came before us is instrumental to success, but we often forget an important caveat. Almost all advice is contextual, yet it is rarely delivered with any context.
So to give you a little context on where my advice comes from, I spent the first half of my career as a software engineer working for various small businesses and startups, then I went into consulting and worked in a number of really large businesses.
My advice is from someone who…
- has almost always been on small, lean teams where we have to do a lot with very little.
- values working software over specific tools.
- is starting new projects all the time, but also has to maintain a number of systems.
- values engineer productivity over most other considerations
My experiences over the last 20 years have shaped how I view software, and have led me to some beliefs which I’ve tried to whittle down to a manageable list that I hope you find valuable.
- I still don’t know very much
- The hardest part of software is building the right thing
- The best software engineers think like designers
- The best code is no code, or code you don’t have to maintain
- Software is a means to an end
- Sometimes you have to stop sharpening the saw, and just start cutting shit
- If you don’t have a good grasp of the universe of what’s possible, you can’t design a good system
- Every system eventually sucks, get over it
- Nobody asks “why” enough
- We should be far more focused on avoiding 0.1x programmers than finding 10x programmers
- One of the biggest differences between a senior engineer and a junior engineer is that they’ve formed opinions about the way things should be
- People don’t really want innovation
- Your data is the most important part of your system
- Look for technological sharks
- Don’t mistake humility for ignorance
- Software engineers should write regularly
- Keep your processes as lean as possible
- Software engineers, like all humans, need to feel ownership
- Interviews are almost worthless for telling how good of a team member someone will be
- Always strive to build a smaller system