It is not an understatement to say that a lot of my professional and personal software development revolves around doing things smarter, not working harder. While I joke that I am being lazy… er… efficient, it is just a standard point of view that I believe I have. I would prefer to do things once or have things done once and iterate on that.
Starting from square one is not always the right answer. It took me about twenty years of my career to figure that out, but I did get there eventually. With everything that you do, there is a balance to be struck between cost, benefit, and impact. While there are professional “things” that are easy to associate with those three concepts, I started to realize that the personal version of those “things” was even more costly.
Let me use cost as an example. From a business point of view, the “thing” in question can mainly be broken down into two categories: resource cost and opportunity cost. Resource cost is an easy one to calculate. How many people does it take and at what price point to complete the task? The tricky part here is that most teams do not carefully consider maintenance and bugs fixes as an upfront cost, and instead deal with them as they show up. The infrastructure and other resources that the team needs to stand up their work is also a resource cost. With billing in place in professional settings, which is an easy cost to measure.
Opportunity cost is a bit more difficult to measure, but one that management battles with all the time. In its simplest form, this is the cost of not doing something. As an example, say there are three features you can work on, Feature A, Feature B, and Feature C. Then assume you can only work on one of those features. There are also customers lined up to pay for a product that contains each of the three features. That means that the cost of working on Feature A is perhaps not getting the customers for Features B and C to use the product. And if you can get them to use the application, it is usually with a contract promise that their feature will be completed by a given date. From there, it often snowballs.
Whether it be personal time software development or personal life issues, similar costs apply. When I look at the next feature or issue to address in any of my projects, I must think about the amount of effort it will take and what I will not be able to add to my other projects because of it. Even more importantly, there are the personal life issue costs.
As a dyed-in-the-wool geek, I would love to be able to do stuff like software development all day, every day… but I just do not have it in me anymore. I love the creative process of writing open-source software, but there are real-life costs that must be paid to make that creative freedom occur. A good example was this weekend. I have been putting off cleaning up the garage for a couple of weeks, so I finally decided the opportunity cost of not having it done was getting too high. That and the cost of me swearing at the work needed to clean up the garage was just getting annoying. So, it got to a point where the cost was one worth paying.
But there is also a hidden cost about not taking time to appreciate the world around you and to ground yourself in that world. As lazy as it sounds, I took time to sit outside this weekend and just relax working on a handful of crossword puzzles. It was just something very low-key and somewhat boring, but it was relaxing. Listening to our dog snore, the bird chirping, and getting fresh air helped me connect with the world in a small way. Then later when I was working on open-source projects, I was able to focus on those projects with a clearer head because I took the time to recharge in that uncomplicated way.
How does this come back to my open-source work? I have lately been just taking time to look at the projects and see if there is any low-cost refactoring that I can do to make those projects better. Nothing spectacular, but better. Keeping in mind that everything must have a balance, I just want to note down a list of things that I can work on in the next few months to make my own personal effort more efficient. And I believe that is a good cost for me to figure out every so often.
Comments
So what do you think? Did I miss something? Is any part unclear? Leave your comments below.