This is the second time I’m doing this, a review of the past year. I find this process helpful in reminding myself about what I’ve been up to and increasing my gratitude. My memory is usually quite patchy about the past and I tend to forget the smaller details. However, without those details, the whole wouldn’t be possible. So I want to document all those little achievements, failures and events to create a track record that I can look back at and say I went through all this.
Similar to last year, I’m following the format of three questions. Unlike last year, I decided to swap the last question “What am I working toward?” for “What did I learn?”. I’ll explain the rationale behind this decision a little bit later.
Here are the questions I like to structure my thoughts around:
- What went well this year?
- What didn’t go so well this year?
- What did I learn?
Many parts of my life revolve around the technology world and software. This is the lens I’m going to use to filter what to share and what to leave out. With that said, get your favourite drink and strap yourself in, I’d like to walk you through some ups and downs of the past year!
1. What went well this year?
Alright, let’s start with the positives:
Blog writing. This is the most pivotal change for me. For the past five years or so, I harboured a dream of blogging but the mental blocks were too hard to tackle. Finally, at the start of 2019, I decided to take the plunge and try. Funnily enough, with a yearly review. This felt like a good way in.
As with any new habit, I didn’t know how to go about it. It turned out that writing is much harder than anticipated. Especially when you’re a foreigner writing in another language. Who could’ve known - ehh?
Early on my writing muse got crippled by many questions. How many articles should I write per month? Do I have anything interesting to write? What should I be writing about? Should the articles be short or long-form? I pushed these questions aside and decided that the best approach is to write widely on many subjects before focusing on specific themes. In the end, I wrote 8 articles in total on different topics. Some articles were more general about software development practices. Whilst others were more technical tutorials. The one article that proved to resonate the most with the readers was “Streaming Large ZIP Files in Rails”. The second to follow was “Working with Capistrano: Tasks, Roles, and Variables”.
Turns out that there is an appetite for long and informative technical content. Content that dives deep into explaining not only the “how” but “why” of a technical problem. In the sea of three minutes articles, long-form articles seem like a breath of fresh air.
Recording Screencasts. I’m not going to hide it, I felt immensely privileged to work with Avdi Grimm and his team from rubytapas.com. We recorded two professional screencasts about performance testing in Ruby. These episodes distil my thinking about the value of automated performance tests on refactoring your code for speed:
It was great to peek behind the curtains and see how screencasts are made. Avdi’s team was very welcoming with everyone being a consummate expert in their role. I enjoyed seeing how a single tapas episode goes from an idea to a polished screencast. Having a deadline and required deliverables each week kept me focused. This was a moment that showed me that focusing on one thing is key to being productive.
Open-sourcing software. I created a whopping nine new gems! The highest number ever. The gem names reveal my meandering path through different subjects this year. I started with the creation of a cryptocurrency-related gem. Then switched to memory optimisation. Next, I devoted a patch of time to terminal related gems. Finally, I finished the year with some text processing gems:
At the end of the year, the total download of gems reached 80 million! Not so long ago, I remember I was very happy to have 2 million downloads. It’s humbling to think that my software powers so many Ruby libraries and applications.
In addition, I bought a ttytoolkit.org domain to signal my commitment to all things connected with TTY Ruby gems. The site had 10,000 organic visits this year! It also underwent a significant redesign to make it easier to find components needed. I added a new projects section to showcase terminal applications built with TTY gems. I want this to become a central place for the Ruby community to find resources to craft powerful terminal apps.
Last but not least, thanks to GitHub sponsorship, I got my very first two supporters. You are amazing! Having this support provides a validation to me that what I’m creating is useful and helps others.
International Travel and Conferences. I beat my personal flying record - I boarded planes 10 times in a single month! For the first time, I travelled to Belarus, Thailand, Ukraine and the United States.
America was always on top of my list of countries to visit. I proverbially wet my pants when I was accepted to speak at the Abstractions Conference in Pittsburgh. On my way to the conference, I decided to stopover in New York for a couple of days and turn into a full-on tourist. So, landing in New York was a dream come true. The three-day conference in Pittsburgh was a blast. It was jam-packed with star speakers like Chris Coyier, Zed Shaw and Simone Giertz. The weirdest thing about Pittsburgh is how very familiar it felt. I could find many parallels with Sheffield where I currently live. An industrial city, next to a river with an ambition to become something more.
I like to combine speaking at a conference with sightseeing when visiting a new country. Spending one week in Thailand, Bangkok ticked all the boxes. The Ruby conference had a great community feel. The speaker’s treatment was stellar. We went on a night boat ride around Bangkok. I made new friends and even more connections. Thai food didn’t disappoint. I had so much fresh fruit. Now, I’m a big fan of durian fruit. I bought virtually anything durian flavoured. Peanuts, sweets, cakes - you bet! One thing I missed out on during my stay is a Thai massage! Hopefully, I will be back soon to amend this.
Trips to Belarus and Ukraine were motivated by my desire to discover more of Eastern Europe. This is the region of the world where I’m from and I want to get to know it better. Both Minsk and Kyiv left me in awe with their architecture. I love big brutalist architecture of the communist era. As expected, the Slavic people were warm and welcoming. I also spent much more time in Poland - nearly half of the year. This is another place I want to explore more. This time with my parents, we travelled to the city of Lodz. A place where the Polish industrial revolution started - the equivalent of Manchester.
Reading. I read a total of 37 books. Not too bad, but also not a very good year for reading. The books that stood out for me the most are “Bad Blood” by John Carreyrou and “Masters of Doom” by David Kushner. The former compelled me to write a review and follow up article that explored the culture of fake software products. The latter was more of a nostalgia trip to my childhood days spent shooting Nazis in Wolfenstein 3D and monsters in Doom’s Mars laboratories.
2. What didn’t go so well this year?
Here’s where things weren’t as rosy:
Conference speaking. Even though I have spoken a handful of times at conferences, they had a significant impact on me. Among the positives were that I got to listen and talk to talented developers. I got supercharged with ideas on what to learn and create. However, I also realised that there is a hidden cost to giving international talks. You need to find money for travel, food and accommodation as well as take time off work. All these costs spiral into large chunks of money which are difficult to sustain.
Speaking at conferences is a huge privilege and I want to continue sharing my experiences. No doubt that I do enjoy presenting and meeting people face to face. But, I need to change my approach before I drain my savings! From now on, I intend to be a bit more selective with my applications whilst still scratching my itch for conference speaking. Plus speaking is just one of the ways to share your experience and knowledge with others. I can do other impactful stuff like writing articles or recording screencasts.
Health. Somewhat corollary to conference speaking, taking care of my health took a back seat. It’s embarrassing to think how little effort I made to exercise. I hardly went to the gym, did very little swimming and cycling. This needs to change! My short-term thinking and working myself to the ground is not a good life strategy. Duh!
After my return from speaking at Ruby conference in Belarus, I came down with pneumonia and ended up in a hospital. A long course of antibiotics put me back on my feet. In my recent memory, I don’t recall experiencing anything more agonising. It was pure pain even moving in bed. I’m not sure what I can do to prevent this though. One idea is to purchase an antibacterial mask that I could take with me on planes. They are a breeding ground for bacteria.
Programming. You may look at my open source contributions and be a bit perplexed here. Indeed, I did a lot of programming in and outside of work. At work, I worked with Vue framework for the first time to create a small game. So learning new concepts entered the picture. But, I haven’t done much conscious practice to get better as a programmer. One of my failures was not learning a new programming language, in particular, a Lisp inspired one like Racket. Most of the time the best ideas and solutions come out from studying a new language. I like how this provides me with a new perspective. So I need to turn my wishes into an actionable plan and prioritise regular practice.
3. What did I learn?
In the previous annual review, I tried to predict the future. You know what? It doesn’t work. For starters, I’m poor at predicting what I’m going to do the next month, let alone next year. A public announcement of goals is counterproductive for me. It saps my motivation and creates a weird sort of pressure to deliver things I’m not fully sure are possible. I agree with Jason Fried’s sentiment expressed in the article “I’ve never had a goal”. I prefer to see a new year as a continuation of my past efforts - but stronger and better. I also read somewhere that stating goals publicly makes you already feel as though you have achieved them. So that’s that. What’s worse, failing at your goals will make you feel bad at the end of the next year when you realise you failed most of them. That sucks.
Instead, what I like is the idea to “learn in public”. I want to get into the habit of sucking a little less every day whilst learning and being open about it. So, this year I’m going to focus on lessons learnt. I split my learnings into two broad categories: general habits and technical subjects.
From my experience I have learnt that:
Iteration wins over any attempt at perfection. Whatever I’m working on, I try to get to the first draft, release or whatever quickly. Reaching the end of what I plan to do means following the shortest path possible. Basically, I try to get the stuff done. Slow code can always get faster. Wrong API method can be changed. Article paragraphs can be rewritten. Mistakes can be amended. Nothing is set in stone. So there is no need to wait until all is perfect. My blog writing experience confirmed to me that similar to programming, writing is an iterative process of constant improvement.
“If you want to be a writer, you must do two things above all others: read a lot and write a lot.” - Stephen King
Finishing things leads to progress. I have a dozen or so articles that I’ve started and never finished. I felt inspired to begin writing but quickly changed to do something else. Same for open source, I created a few projects that never saw the light of day. Don’t even get me started on reading books. The list of unfinished books taunts me anytime I open my Kindle. I have this weird habit of reading simultaneously many books. Apparently, this leads to “ideas sex” but I’m not sure my brain is a very fertile ground. The Forbes list is safe from me for now.
Later last year, I got into the habit of working on one project at a time. Don’t get me wrong, I still have a few things going on simultaneously. I can be writing an article or coding a project. But within the respective domain, I only do one thing. I’m allowed to write only one article, create one open source project, read one book. You get the idea. Once whatever I’m up to is finished, I’m allowed to move on to something else. This has already led me to get more things done. If you see me break this rule, can you virtually slap me with a reminder of this?
Quality requires patience. If I don’t get to do something immediately, not all is lost. Like wine, projects need time to mature and become good. I try not to rush the process. Thinking what my article should be about or scoping software project requirements take time. I let things marinate for a bit before jumping in on them. This has the side benefit of avoiding creating absolute crap. In the jungle of digital age content and projects, quality matters. Shipping subpar stuff may do more harm than good. Legacy is a thing, and I don’t want it to be full of things I’m not happy about.
From the technical side, I filled gaps in my knowledge about:
Bitcoin Architecture. I decided to dig more into underlying data structures in cryptocurrency. As part of my learning, I created merkle_tree Ruby gem. It cements my understanding of how a binary tree can provide tamper-proof data verification. Whether you believe that cryptocurrencies will replace fiat money or not, the underpinning technology is fascinating. It demonstrates the top thinking in securing distributed systems.
Linux Interface. This operating system underlines everything I do as a programmer. Recently, I’m drawn more and more towards DevOps. I know this is a mixed bag of many terminologies, practices and approaches. But, it aligns well with my own inclination to create tooling for other developers. Continuous delivery is part of it. There are many tools like Docker and Kubernetes for improving software delivery. I want to be part of it. Because of this, I decided to dive deeper into Linux, especially networking layers. You can probably guess what the future articles will be about.
As suggested by my title, this wasn’t the greatest year ever. Equally, it wasn’t a total write-off either. I was hoping to get accepted to speak at more conferences. Unfortunately, or fortunately, I channelled rejections into producing more content like open source software and blog articles. All in all, it was a year of fast learning that I hope to continue this year. Please don’t hesitate to contact me with any questions, comments or ideas you may have. Thank you for reading. Enjoy 2020!