As I sat down to write this review I wondered if there is much to talk about. 2021 has finished way too quickly. Looking back feels like staring at a blurred image and trying to make out what it’s about. But that’s exactly why I needed to write this review. Without reflection time, it’s easy to get busy and forget why we do what we do and be caught in “Groundhog Day” every year.
I tried to do something a bit different in 2021 - slow down and seek serenity. I don’t want this to sound grandiose as if I aimed to reach some state of enlightenment. It is simply to say that I decided to limit my busyness to gain some perspective and find more quiet time for myself.
This is the fourth time I’m doing this annual review. To honour long-standing tradition, my review will follow these three questions:
- What went well this year?
- What didn’t go so well this year?
- What did I learn?
I hope that you enjoy reading about my highs and lows and what these twists and turns have taught me. Let’s dive in.
1. What went well this year?
Let’s look at the good stuff first.
Open-source. This is a constant for me. Something I can lose myself in. I got into open-source more than a decade ago and it still provides me with a lot of growth both technically and personally. There are many talented people involved in the community that inspire me daily to be a better coder, writer and communicator.
In February I published a curated list of Awesome Ruby CLI apps with my aim to create more community resources. I want this to be a central place for Ruby developers to find great command-line applications. It has about a couple dozen categories with tools from managing git hooks, linting code to converting between data formats. I took a lot of time to research the list and make it useful. I want to continue to grow it even more in 2022.
I made 16 releases of my Ruby gems. This is a bit less compared with previous years but still a decent effort. The downloads have grown an extra 100 million in 2021 to an outstanding 250 million in total. I’m not attached to these numbers but I am grateful for everyone who puts their trust in my libraries. This is truly humbling.
As for the TTY toolkit suite of gems, I expanded it by the tty-sparkline. I also worked on many features in different tty components that I intend to wrap up and release in the coming year. The word completion in the tty-reader gem is one of these features. It is also long demanded and awaited by the Ruby community. I want to continue on the path of making terminal applications more visually attractive, intuitive and easier to build. I’m curious to see what’s possible.
Later in the year, I created the minehunter terminal game inspired by the classic Microsoft Minesweeper. Its purpose, apart from obvious fun, is to demo how quickly you can put together terminal applications with a handful of tty components. Projects like this are an opportunity for me to see how well different components work together. I admit, I spent (or ‘wasted’), many hours playing the game.
Reading. I set my new record - 66 books read! My eclectic taste meant that I meandered through various subjects. In particular, I was keen to learn about our capacity for creativity and how innovative ideas come about. But also to see where our analytical thinking fails us.
The “Fooled by Randomness” by Nassim Table provides one such alternative approach to thinking about life events. We tend to attribute major achievements in our life to grit and hard work but dismiss how much luck plays a role. One random event can completely change our life’s trajectory. You can be easily fooled by such abnormal events. Then succumb to the survivorship bias where you create a convenient narrative that it was always meant to be. In the software industry, we celebrate big successes and skip mentioning the many projects and companies that failed. I picked up many insights from the book. But I’d like to caution you. It’s not a book for everybody given the author’s uncompromising, direct and anecdotal style.
On a more software engineering theme, I enjoyed reading the Staff Engineer by Will Larson. It shows possible paths for those in senior software engineering roles that wonder what to do next. Taking the next step doesn’t have to involve becoming a “people manager”. Larson explores job types and responsibilities that higher-level roles may entail. Regardless of the role, you will write less code and think more about the strategy and vision for the team. A lesson that “the most effective leaders spend more time following than they do leading” is a good taste of what the book is about. I found many interviews with staff engineers from well-known companies very helpful. Their perspectives gave me a better feel for what to expect.
Exercise & Fitness. Keeping fit is one of the key areas for me that I didn’t want to neglect. But, due to gym restrictions I needed to find a different strategy. The answer came on one of my daily lunch walks. I discovered an exercise area with various metal bars and ramps perfect for doing callisthenics exercises. I got hooked. I started slowly and built up my strength step by step. I didn’t do any crazy moves. Instead, I stuck to basic pullups, chin-ups and pushups increasing intensity and repetitions each week. I found that training outdoors appeals to me. You’re close with nature, don’t need to waste time changing clothes and most importantly it’s free. All great benefits.
2. What didn’t go so well this year?
Here’s where my past twelve months proved challenging:
Writing. This will be quick and simple to summarise - I haven’t written any articles on my blog in 2021. This is the worst year when it comes to writing so far. The blog has practically started gathering virtual cobwebs. Now I know the feeling and the reason why there are so many abandoned blogs. I partly blame this on my increased reading time. The year wasn’t a total write-off though. I wrote some future article outlines and as I like to call them 'solid’ drafts on a few ideas. I plan to create a natural writing cadence next year and push myself to blog more.
Travel. I hardly left my city. I had itchy feet the whole year and visited holiday booking websites regularly. But my worries about Covid and restrictions that seemed to change daily kept everything in the realm of dreams. Instead, I opted for kayaking in the lakes and weekend sessions in a deck chair reading and staring at the sky. My mind and wallet were probably much happier with this type of holiday.
Social media. I did a few occasional tweets in 2021 but apart from that, I have mostly stayed away from social media. One of the reasons I kept social media on hold was to unplug and attempt to do more deep and meaningful work. This provided an immediate benefit of having more time and fewer disruptions. Unfortunately, the downside was also that I lost contact with the developer community. One of the things that I enjoy about social media is the many spontaneous interactions I can have. Also, I missed seeing what other interesting projects people are working on. In 2022 I want to plug back into the social machine and share more of what I’m up to.
Coding. I had no adventures with new programming languages in 2021. Instead, I turned my attention towards different topics indirectly related to coding. I’ve spent my hours reading articles, books and watching talks around technical leadership, software development methodologies and innovation. These prompted me to consider many types of questions. How do you introduce technical changes in a team successfully? What does great technical leadership look like? What are the principles and techniques that make a team effective? That’s why I picked up the Staff Engineer book in the first place.
3. What did I learn?
By slowing down and making more room for reflection, I discovered a little bit more about myself and what works for me. And here’s what I’ve learnt.
Make peace with your plans. By “making peace”, I don’t mean sitting still on a pillow, meditating and being unconcerned about how your plans unfold. To me, it is knowing what you want, being patient and working towards your goals without obsessing about the outcome or what other people may think. It’s a way of being in agreement with your desires and fulfilling them in a way that fits your character and life circumstances. This also means trusting yourself to do your best without burning out.
Act but don’t despair when your plans overextend or cease to be important to you anymore. I wanted to write more on my blog and contribute more to open-source in 2021. But my circumstances made it difficult to schedule consistent time. Getting wound-up about it all would be futile. Peacefully accepting reality and staying the course will work better in the long run.
Carefully prune the excessive ideas and tasks. I tend to dilute my focus by thinking of many ideas and things I want to do and learn. My curiosity naturally takes me to many places. As a result, I spread myself too thin to achieve all of my plans. The ambitious list of things I would like to do doubles each time I look at it.
I decided it was time to end this behaviour. Life is finite. I cannot do everything. Some things on second reflection probably shouldn’t be done in the first place. Time to eliminate doing tasks and learning subjects that don’t align with my future plans. On my personal board, I added a new column “Maybe” that I aggressively moved many items over. One day I may revisit the maybe list, though I doubt it.
Take the time to find your blind spots and improve on what you already know. There are domains of knowledge, tools and techniques with which I am comfortable. I can do things without much effort. But here lies the problem, I get complacent once I reach a “good enough” level. For years, I’ve been using Vim as my editor of choice. I reached a certain level of fluency and stopped at that. But Vim itself didn’t stop getting better. Why should I? So I spent more time this year improving my Vim editing skills.
It is easy to continue without realising that some of the things we know or do are outdated, inefficient or we simply don’t understand them well enough. Our culture encourages learning new shiny things and constant growth. Especially if you work in the software industry. But do we only have to learn new things? What about being better at what we already know? There is always another depth we can go into to glean new understanding. This is best expressed by great physicist Richard Feynman:
“You only think you know, as a matter of fact. And most of your actions are based on incomplete knowledge and you really don’t know what it is all about, or what the purpose of the world is, or know a great deal of other things. It is possible to live and not know.”
Another year in the books. There was far lower intensity to many things I did. No international travel hence no anxiety booking flights and hotels. No conference speaking. Nearly no posts written on social media. I replaced it all with walks in nature, plenty of reading time and contemplation. This slowdown offered me a chance for self-discovery and reevaluation of my plans. I learned more about the things I want to continue doing to grow as an individual and software developer. Equally, I learned what I need to eliminate to make room for everything else that I hope to do.
Let’s see what 2022 has in the cards for me!