Personal Ethos and Values
A great ex-colleague of mine @solarkennedy once gave a talk about engineering leadership and challenged the room, a group of tech leads, to someday think hard and write down what their core values are. I've been thinking about this on and off for a while, and I believe I'm ready to start writing some things down.
- If you do something 3 times, think about writing it down (if it's a process), automating it or abstracting it (if it's code)
- Lack of tests is worse than technical debt. What I mean by "technical debt" is the usual: long functions, complex nested if/for/if/else/while loops, tangled logic. Getting rid of technical debt is generally easy with tests, and extremely hard without. Lack of tests organically produces hard-to-remove technical debt; good test coverage enables regular tech debt cleanups.
- I don't believe in TDD. But I believe in good automated tests. My philosophy: never test code manually. Test the code that you've written or modified with a new or existing automated test. Don't be religious about writing the test(s) first.
- Debuggers are vastly more efficient at finding bugs than print/log statements or manual tests. Invest in learning how to use them. Then use them.
- Engineering ownership is the most challenging thing to scale. "Ownership" is both "who do I talk to to modify X?" and "who fixes X when it misbehaves?".
- Processes aren't good or bad. They're either good or bad fits. The same applies to engineering tools (think: programming languages, frameworks, editors). When a change is warranted: focus on the fit and make it better.
- A well-communicated, agreed-upon solution beats a technically better one every time. Engineers tend to be introverts so knowing how to build coalitions and how to create/communicate (technical) roadmaps is like having super-powers.
- Performance optimizations made at the product level (changing the UI, tweaking the product requirements) have 10x more potential than optimizations made anywhere else for that particular product. Hence performance and product/design go hand-in-hand.
- Code is written first for other humans to read, then for machines to execute. Optimize for human reading speed first and for machine execution speed second.
- Software engineering is 1% writing code, 99% fixing it, tweaking it, releasing it, testing it, monitoring it, deprecating it.
- Scout rule: when modifying code, leave it cleaner than you found it! Related: "Be the change you want to see in the world" applies to code. Ask for forgiveness instead of permission when it comes to changing code.
- KISS (Keep It Simple Stupid) > DRY (Don't Repeat Yourself)
- Everything lies on a spectrum. Look for both ends of it, play "devil's" advocate as much as you can.
- What defines you shapes your identity and also a set of blind spots. Look for how you talk about yourself to be aware of them.
- Comfort is a hardcore drug. Treat it like one, and expect withdrawal symptoms if you overuse it
- Feelings are (sometimes unconscious) choices. More evidently: actions are choices too. Take responsibility for both.
- The more money you have, the less important money should feel. Don't let money become more and more important instead; otherwise you give up one of the core benefits of having money.
- Education is at the core of everything we do. At the core of successes and at the core of failure.
- There is no "good" and "bad". Just people with different education, values and incentives.
- There is no afterlife. Enjoy this one while it lasts.
- God doesn't exist, or at least not in the form described by religions. So make the most of life or don't, nobody is judging. Pressure off.
Probably a lot of things to say on the topic but I've come to disagree with the standard European Romantic approach. Here's a poem (by Kahlil Gibran) which reflects my updated view:
Let there be spaces in your togetherness
And let the winds of the heavens dance between you
Sing and dance together and be joyous, but let each one of you be alone
Even as the strings of a lute are alone though they quiver with the same music.
Give your hearts, but not into each other's keeping.
And stand together, yet not too near together:
For the pillars of the temple stand apart,
And the oak tree and the cypress grow not in each other's shadow
For that reason I find the term of "partner" quite fitting to the idea of a long-lasting relationship.