đĄ Lessons Learned
Reflections on a journey as an engineer & leader
6 min readApr 16, 2024
As I prepare to leave one job and start a new one, Iâve been reflecting on some lessons learned through my career so far as an engineer, a manager, and a manager of managers.
As with all advice, please view it with healthy skepticism. Itâs far more important to develop your own compass than to over-index on someone elseâs!
- A career spans decades. Jobs come and go, and they tend to evolve and change often and quickly. The consistent part is you â invest in yourself, your learning, your values. Like it or not, youâre growing your own brand (intentionally or unintentionally) and itâs this brand you will be selling when youâre interviewing. Make sure you know what youâre selling, and that you believe in the product!
- Every job is crap for a different reason. We have a tendency to hyperfocus on the broken things, both as people and as tech professionals. Donât forget to make time to appreciate the things that are working well, and donât feel too bad that your job includes days, tasks, projects, or people that may be challenging or frustrating. All jobs have these â as my grandma used to say, âwhere thereâs muck thereâs brassâ. Another way to think about this is: when everything is going to plan, your opportunities to learn and grow are limited.
- Be kind. it doesnât mean tolerating bad behaviour, but being mindful that people can be very quick to be defensive when encountering a person whose values or ideas are different. This is an evolutionary trait rooted in tribal behaviours â the mark of intelligence is the ability to entertain a new idea without necessarily condoning or believing in it. Who knows â you might even learn something, or change your mind.
- Youâll never be fully qualified. There will always be someone more qualified. Do the things youâre not fully qualified to do yetâ, and see how you fare. You might surprise yourself.
- Your health is the greatest asset you have. Do everything in your power to sleep the best you can, eat the best you can, and look after your body and your mind in every way that you can. You canât be great (or even adequate) inside work if youâre falling apart outside work.
- EQ is way more game-changing than IQ. If you want to make yourself a better engineer, collaborator, manager or stakeholder then invest time in learning about the key four emotional intelligence topics: Self awareness, self management, awareness of othersâ emotions, and relationship management. This has the very tangible benefit of improving your relationships and mental health outside of work too.
- Building software is an exercise in communications. People need to spend a lot of time talking to people before they start talking to computers, and thatâs where most of the problems and misunderstandings happen. We solve this by getting very good at over-communicating and making things so clear there is no margin for misunderstanding.
- Make it maintainable. The fundamental problem of building software (beyond solving your userâs problems correctly) is to create a maintainable codebase that can be evolved as requirements inevitably evolve. The fundamental problem of building maintainable software is controlling coupling through writing code as a suite of composable modules with clearly separated concerns such that each unit (method, module, class etc) has only one reason to change. Training yourself and your colleagues about this is crucial.
- Write things down. Donât forget to read what you wrote periodically and to act on it. Remember that the act of writing helps to crystallise your thoughts and improve your understanding. We often think we know a lot more about a topic than we actually do until we try to articulate it. Teaching others is a good way to hold yourself accountable, but you can get the same effect by forcing yourself to write at length about a topic, even if another person never hears what youâve said.
- Always be learning. Make time each week to read, take courses, watch videos. Be religious about this. Your future self will thank your past self for making the investment.
- Work is infinite, your time is not. Work will always expand to fill the time, and the reward for getting work done is often more work. Defend your time and your energy because this is an infinite game with no ending. Even after you retire, that stream of work will keep flowing. Never feel guilty for shutting the laptop.
- The power of habits. What you do every day is what creates change over time. Be mindful of what habits you want to cultivate, and what habits you want to curtail. Success comes from making marginal gains in the things you do repeatedly and seeing the cumulative effect of that â almost never does it come from Herculean acts of heroism.
- Nothing changes unless people feel it. The hardest part of changing things is persuading other people that the change will impact them positively. Youâre not selling the idea â youâre selling the person a better version of themselves, once this idea is realised.
- The XY Problem. People have a tendency to talk too much about solutions before theyâve fully understood the problem. Engineers especially love to dive head-first into building things, and stakeholders often walk into conversations with the intention (explicit or implicit) to direct it towards a pre-selected solution. Everyone involved should be crystal clear on the problem, or things will go astray, time will be wasted, and people will become frustrated.
- Systems, systems everywhere. Everything can be viewed as a system. Systems thinking is at the root of solving any problem, whether itâs in code, architecture, people, teams, processes, etc. It can all be modelled with a set of rules that help us to understand behaviour and predict future behaviours, risks, and bottlenecks.
- Be the worst member of the band. If youâre working with people whose abilities exceed your own then youâre in a great position to learn and to grow. Seek out opportunities to work with people who can help you learn.
- No stupid questions. If youâre not willing to risk looking stupid then youâre limiting your potential to learn and to grow. Learn to be unafraid of asking those âobviousâ questions. Bluffing will only come back to haunt you later â every day is a school day.
- Keep It Simple, Stupid. Great design doesnât come from there being nothing left to add, but nothing left to take away. Strive for simplicity and be ruthless about the things you wonât need.
- Become familiar with critical thinking. Once you understand confirmation bias, you start to see it everywhere. In all seriousness, the subject of critical thinking (understanding cognitive biases and logical fallacies) is extremely useful as a foundation for navigating the world.
- Donât let technology distract you. Turn all the notifications offâ every piece of mobile and desktop software you use. This way you get to decide when to refocus your attention somewhere else. Controlling your attention is a pivotal skill that will help you to be effective and reliable.
- Enjoy yourself. Finally, you must never forget to have fun. If youâre finding ways each week to enjoy yourself then youâre energising yourself and others. Thereâs nothing frivolous or silly about that because it gives you and other people the ability to be resilient and to overcome challenges. Laugh at everything, especially yourself.
â Except for surgery. Be fully qualified if youâre performing surgery.
â Unless youâre on-call, of course. You should be distractible then.
đ Links
I often re-read/re-watch these. I consider each of them to be gold.
- Randy Pauschâs Last Lecture â A dying computer science professorâs life lessons. I watch this at least once per year.
- The Kindest Person In The Roomâ Why kindness is a strength.
- Unix Design Principles â These tenets are consistently revealed to me to be true, in spite of their age.
- Simple is not easy â Simplicity is a good thing. And it isnât easy.
- The XY Problem â Make sure youâre intentionally talking about X, not accidentally talking about Y.
- Willingness to look stupid- Ask the question! Donât worry about revealing your ignorance.
- The Passionate Programmer â Chad Fowlerâs âThe Passionate Programmerâ is a wealth of advice for a career in software.
- Becoming a better writer as a software engineerâ It really is all abut what you do with language.
- How to make your code reviewer fall in love with you â Hilarious and very very actionable.
- The Switch â A great book on change management
- Thinking In Systems â Donella H Meadowsâ classic on systems thinking
- Your Bias Is & Your Logical Fallacy Is â two great resources for common cognitive biases and logical fallacies.