Are You Chasing Excellence?
Hello, Naren this side. If you are receiving this issue that means you may know me on twitter as @DudeWhoCode or may be not. Nevertheless here I am with the very first issue of Becoming Pragmatic.
I have been working in software for almost a decade, and I can say that huge part of my career progression is not because I learnt specific tech stacks, but it’s because I try to be pragmatic, take my craft seriously and think in first principles.
Not just me, all my friends and people I know goes by the same motive. Thats’ it that’s what this series of newsletter is going to be about, that’s what becomingpragmatic.com is going to be about, it’s about becoming a better software engineer, it’s about practicing software as a craft, it’s about levelling yourself up in your career by exploring different paths, it's about being curious, thinking in first principles and looking the world through different lens, it's about enabling others to do the same to build great engineering teams.
I initially wanted to create cohort based courses or bootcamps, but this is a very hard problem to templatize to be taught. Also I don’t want to set a shop and wait for people to show up. I wanted to take this slow and most importantly consistent.
Slow is smooth, smooth is fast. - Navy SEALS
A while back I did a pilot and hosted first twitter space[0] called “Caring for the craft”. The panelists were founders and CTOs from different consulting startups. We touched upon quite a few topics. This issue is about one of the topics we talked about: Chasing Excellence
Topics Covered
- What Is Chasing Excellence?
- The System: Deliberate Practice and Immediate Feedback
- Continuous Learning Method
- Facilitating Others
- Excellence Is Not Perfection
What Is Chasing Excellence?
"Chasing excellence" means you always thrive to do good work. You not only try to finish the given work but you make sure the work you did was good and maintainable, not mediocre. To do good work you be open minded, stay curious, invest in yourself, learn and improve continuously.
And it doesn’t have a destination, it’s a continuous journey. Your curiosity lets you to fall in love with that journey. Your open mindedness lets you to pivot often and learn. So instead of getting a dopamine hit only when you reach a specific goal, you get dopamine hits throughout the journey.
In order to continuously learn you need to have system. Because the future (especially in software) is a moving goal post. New tech stack comes out and it may or may not get adopted, hypes die and a dead hype gets resurrected later to become a trending tech. The only constant is change, you embrace changes, adapt and not just learn but learn quickly.
The System: Deliberate Practice And Immediate Feedback
To chase excellence you need to put in deliberate practice[1]. You can't go with the flow and learn only minimal things your current work requires. You need to put in proactive effort, which means you spend dedicated time only to learn and practice. Ideally you need to get this time at work, if that happens good for you, but in real world you need to chip away some time from your day to practice. Because you are not practicing for today, you are practicing for your next project or next phase in your career. Whatever you need to learn today for the work, most likely you can learn at work.
Learning and practicing is not enough, you need to make sure you are doing the right thing. Shortening the feedback cycle is one of the DevOps principles, similar to that you need to have feedback cycles. Getting feedback from someone who has already done what you are doing will immensely help you to course correct. The best analogy is the flight path. The pilot corrects the flight often by few degrees so that the flight doesn't end up at a place away from destiation. A few degrees of mistake during the journey ends up in putting the flight few 100km away from the destination.
In order to do deliberate practice, you need to have a system. The world runs on routines. Give more importance to your systems and routines than setting goals and either forgetting about them or losing traction if you don’t achieve them. A good goal is just a statement, a good system can help you satisfy any such statement in given time.
Say you want to get into a healthy lifestyle, setting a goal with a number as target weight is not enough. You need a system where you can eat healthy and workout. If you are working, you need to clear up your schedule to cook healthy meals and block time in your day to workout. Once you get used this this routine of working out, embracing healthy food, then you are going to achieve your goal, no matter what the target weight is. System gives you small wins, when you eat healthy and show up to workout that day, you win, it doesn't matter what exactly you ate, it doesn't matter how much reps you did, but you showed up, that's a win.
System makes you to show up. Showing up brings consistency. You will enjoy showing up and eventually falling in love with the journey.
Same way when you want to level up, you find a system to spend time in learning. Start with simple way to set a system for deliberate practice. List down things you want to learn. Choose a right book or a course. Block your time and set a deadline. Start learning. This is easier said than done, but continuously tweaking your environment, your tools, your time and energy every day eventually helps you to build a system that works for you.
Continuous Learning Method
Software is ever changing. There are 100s of tech stacks, the only way to learn is learning how to learn and most importantly learning what to learn. We are past the specialisations, there are numerous researches and proofs saying that generalists thrive in complex environment more than specialists. People say T shaped skills will help progressing in carrer, where you have shallow knowledge in several areas and deep knowledge in one. But this makes you a jack of all trades and master of one, that one will become none if your next project demands a deep skill that's completely unrelated to your deep end in T.
Instead of T, make your skill look like drip of paint on wall. As time passes each drop needs to go deeper.
There are two types of learning, one is breadth first and another is depth first. Ideally you want to dive deep and learn everything from scratch, but abstractions exist for a reason. You use them get the job done and then you deep dive when it interests you. So you progress breadth first, then dive deep and go depth first. You don't want to get caught by the abstraction leaks, but also you don't want to dive deep, get into a rabbit hole and lose the delivery either. Balance it. The secret formula to find the balance is actually doing it.
Be a master of some and jack of many.
When you are curious, you naturally explore more breadth, by doing so you are increasing your odds of success. The more varities of knowledge you have, the more diverse your thought process will be and the more opportunities you get. Instead of hammering down the problems to see through the only narrow lens you can wear, you view the problems through multiple lenses, like eyes of a dragon fly. You have dragon fly eyes, you can bring in different perspective to the table[2].
There are so many innovations that happen not at work but because people dabbled on the side. Gmail was developed in the 20% time that google employees use to work on their side project. Slack was a side project by the founders to communicate between the team who developed a game, they dropped the game and focussed on Slack as platform. Not just tech, there are many such scientific innovations happened because people were curious and dabbled with variety of things.
By continuously diving deep, you are peeling away the abstractions and learning the fundamentals. This helps you to think in first principles, and tackle every problem at fundamental level. You don’t get blurred by the abstractions of the framework or library you use, you jump right inside the source code and try to understand what’s happening, working by clutching problem by its’ root.
By going both breadth and depth first repeatedly over a period of time, you are practicing learning how to learn. Now you not only will be able to learn any new tech stack quickly and get the job done but you don’t hesitate to dive deep to tackle hard engineering problems. You will develop lateral thinking skills and cross pollination of ideas happen. You will eventually find the balance where you know when to learn only enough without going into spiralling rabbit holes to get the job done or when to dive deep and tackle the problem from its’ root.
Facilitating Others
Once you figured out the knack for chasing excellence, you need to facilitate it for your mentees, peers and organization as a whole. Yes you worked hard for it, may be someone helped you, may be a course helped you, whatever the reason is, as seniors it’s our responsibility to help others to grow.
This will not only bring you a sense of altruism but it will help you to grow into leadership. You are practicing to chase excellence, now you help others to do the same, that’s how great teams are built.
Organizations need to promote the “dabbling culture”. When an employee dabbles with few side projects outside work, they can bring different perspectives to the table. This is the reason google allows people to work on their own side projects and these days few organisations allow people to moonlight as long as they meet the expectations at their work.
Excellence is not perfection
As we chase excellence and grow into a senior role, we want things to be done good and done right. But that might not be the case everywhere. Sometimes shortcuts needs to be taken, tech debts needs to be taken. Chasing excellence is not chasing perfection, blindly taking shortcuts will result in mediocre work but knowing when to take shortcuts is actually part of "excellence".
Many engineers get into this idea that excellence means perfection. Doing good work is not perfection. In fact trying to make things perfect in any business, especially in software will act against you. Doing good work is knowing when to stop and ship.
Unfortunately this happens subconciously, you fall into the cycle of perfectionism instead of finding the good enough.
Case in point:
I wanted this newsletter to be crisp, to the point without any fluff. Last month I said I will send out this newsletter, apart from the holiday season delaying the progress, the main thing delayed is perfection. Whenever I spent my time on this, I kept writing, I covered too many topics, it felt shallow, then I cut down and focussed on one topic, then I felt I need to explain every anecdote and story in detail related to the topic, later I was worried it's getting lengthy and readers won't like it. Finally I created a draft and scheduled the email to shoot today. Now I have to make the draft good enough without losing myself to perfectionism. I hope when the email fires, this issue is crisp and good enough for you to read.
The best constraint in this world is time - Tony Fadell
[0] You can find the twitter space recording here.
[1] Carl Newport talks about this extensively in his book “So Good They Can't Ignore You”.
[2] David Epstein has beautifully narrated about bringing a range of values and how generalists solve most of problems in the world in his book “Range: Why Generalists Triumph in a Specialized World“. This resonated with me so much, I highly recommend this book.
If you enjoyed reading this issue you can give a shout out on twitter.
Reply to this email if you have any questions or feedback
Use this link to share it as article with your peers if you feel it will be useful for them