As a Software Developer + Industrial Engineer, it’s common finding myself thinking of how to optimize my software development processes.
While reading the book Double Your Profits: In Six Months or Less an interesting thought process lead me to the following thoughts which I am curious to share.
Double Your Profits: In Six Months or Less
Double Your Profits: In Six Months or Less [Bob Fifer] on Amazon.com. *FREE* shipping on qualifying offers. One of the…
There are two types of costs, strategic and non-strategic. Keeping it simple, higher strategic costs generate higher profits. First cut the non-strategic costs. By doing that, the strategic costs will increase for free.
higher strategic costs == higher profits
Resources are limited. Therefor an organization has to put strict attention on how to manage resources. Most resources cost money to have them, and others represent a cost if we didn’t have them. So we can say that resources equal costs.
resources == costs
We have to take into consideration that time is also energy. We have to learn how to manage our energy instead of only time. Which hours of the day are we most productive? We have to figure out which is the one or two tasks that if we complete that day will make a big impact to our bottom line. Then focus our high energy hours (usually in the morning) to tackle those tasks.
time == energy
Cut to the bone non-strategic costs
Outspend in strategic costs
After minimizing costs, we can outspend in strategic costs to boost profits to the next level.
In the following section I’ll review some examples of strategic and non-strategic costs.
Any investment in abstraction must be questioned. Abstraction increases complexity. When we abstract code unnecesarily, just for the sake of it, we are increasing complexity to our applications. Complexity makes it harder for us to maintain code in the future as well as to add more features.
Some code duplication is OK. Duplication is not a sin. Don’t follow dogmas. There are no rules that fit on all contexts.
An example of a non-strategic abstraction is when you’re writing a single page app and you split it in a bunch of methods which each of them will be used only once or twice.
The best code focuses on shipping value. When you find yourself re-writing the same functionality over and over again, plus adding unit tests, it is time to abstract. Abstractions are justified when the re-usability of the code will be high. An example of strategic elements to abstract are UI-components, helper methods, etc.
GitHub PRs can become bottle necks in your flow. If you are reviewing a PR, don’t block it just for opinions. A PR should be blocked when it contains potential bugs, code smells, etc. If you see that the code is free from the latter, then merge it and ship it!
Use GitHub PRs to detect bugs that would otherwise would go un-noticed. Even the best writers need proof-reading. Writing code is no different.
Open Source Software (OSS)
OSS is very expensive. It is free to install but not free to use. If you take a snapshot in time, it is free. But as time keeps up, OSS keeps changing so fast that the churn rate pays a toll in your tech debt. Tech debt will nibble on your project until you have to upgrade dependencies and that will come at a big cost. Additionally, do not forget to consider the cost of contributing to OSS.
A clear example of this is thinking that having a Wordpress website is free other than the web hosting. You need to spend time updating Wordpress with the latest features and security patches, otherwise spammers won’t lose time and will hack your website ASAP. Then you need to update all the plugins you are using and themes. If you’re using free plugins there is also the probability that the maintainers haven’t updated the plugins so you’ll have to patch them yourself. So no, having a WP website is not free.
I’m not saying not to use OSS. OSS can save a lot of costs in licenses and it is very fun to use. My point is that OSS is not free. Use it to your advantage by offering services that turn an OSS from a non-strategic burdain cost into a platform other users and organizations can leverage.
It’s easy to underestimate a project. Many times we get stuck in fancy features that are nice-to-have, but won’t add hard value for the customer.
”Make it late to” the deadline becomes the defacto.
The pressure to meet the Product-Market-Fit starts creeping up. The consequence is putting extra hours and weekends to build those features which were the most important in the first place. Burning out the team is not a good path in the long term. The lack of sleep induces to bugs and heartless coding.
I believe UX is very important but functionality is a priority. First get the product working well, and just then add the fancy UX. Build the 80/20 .. 80% of the profits come from 20% of the features. Provide those elements of differentiation that the customer is willing to pay for and put on the backlog the rest.
As you can see, the focus of the book “Double of Profits” is on non-strategic vs strategic costs. As software developers, it is important to keep these two concepts in mind. We have the responsibility to use our time and resources wisely. By focusing in strategic costs, we create value for our company and for ourselves. Doing this will convert a burn-out job into a larger-than-life job.