Of all of my years in software engineering, the past year for me has been the most rewarding. If I were writing this a year ago, I would be saying the same thing. And the year before that as well. By continuously going through iterations of self-reflection, forming corrective experiments, evaluating results and finally locking in new behaviors I'm able to provide myself opportunities to level-up. Sometimes multiple times per year. The same self-reflection helps me to avoid relapsing into prior, less effective behaviors. By tracking data about my own performance and getting feedback from others I'm able to quantify how effectively the entire process is running.
Up to now, my process has primarily been my own. Its ad-hoc, constantly changing and highly adapted to my own personality. It certainly isn't a process for everyone. More recently I have taken the time to share with a few people that I mentor the basic building blocks of my approach. The results of these mentoring sessions have served to be yet another compounding tool in my own arsenal of self-improvement. By openly sharing my personal techniques with others we've collaboratively been able to improve as a group, generalize the techniques and find other more powerful ways of applying the techniques.
This blog will be my attempt at open-sourcing if you will the results of my mentoring sessions. I will take one more step and also open-source as much as possible my divergent approach to learning. So in addition to general software processes, posts on gamification of the home and workplace and techniques for overcoming challenges in the software engineering process, you'll also get to peek inside my mind as I delve into tons of new (at least to me) technologies. This will make the content here extremely varied and not for everyone, but hopefully you find at least some of it useful enough to hang around through what will be another of my experiments.
With that in mind, let me leave you with something useful, like a short on each of my title techniques.
Everyone I work with tends to agree they use time inefficiently. There are many techniques for fixing this problem and one I like more than others is known as GTD or Getting Things Done. We can start simpler though and so I give them the following advice. For one day, write down start and end times for all of your tasks in a notebook. Including interruptions. For me this tends to be no more than 2 sheets of paper. At the end of the day categorize your time and ask yourself where there are opportunities to trim the fat. The overhead of this technique is maybe a few minutes of your time and I can almost guarantee that you'll find an entire wasted hour if you are honest with yourself!
Another common theme with my mentees is that they have a hard time balancing learning new things with applying existing knowledge. An example might be a process you do at work that takes maybe 30-40 minutes to do manually and you don't do it very often. To automate that you'd have to learn more deeply how something works. You'd probably spend 2 hours on that learning. What do you do? Under time pressure how do you balancing learning with applying? My response is always favor learning unless that time is going to cause you to fail in some unrecoverable way. And when you are done, share your results with others. You may find that your 2 hours just saved 100 people 30-40 minutes each. In my line of work I quantify this by counting how many software engineers I just created by freeing up hours of others time.
The final theme I'll share today is that we are generally terrible about rewarding ourselves for work done. If you go to work for an 8 hour day, finish 8 hours of work, then head home, how do you feel? Many people feel exhausted. Asked what they accomplished they'll say they accomplished what they were "supposed to do" or "expected to do". They can probably point out 50 things they didn't do or still have more to do as well. This is a problem. We are delaying our gratification until an epic event in the future, such as "Shipped IE 11" or "Feature Landed in Main". Gamification teaches us to structure rewards in smaller increments. About 5 minutes apart if possible. For now, my advice on this subject is learn to celebrate the small wins. In the future I'll talk about how myself and others gamify work and head home at the end of the day feeling energized instead of exhausted.
Hopefully I've piqued your interest enough to stick around for future installments! If you are extra inspired and start applying the above techniques feel free to toss me an email and let me know how it works out for you.