Applying Software Engineering Principles on Life
Two roads diverged in a yellow wood,
And sorry I could not travel both
I first read these lines by Robert Frost when I was 13. These lines didn’t make any sense to me because at that tender age I hadn’t faced any of life’s quandary other than writing exams. But with time, these lines started to make more and more sense, as if fitting perfectly into a jumbled puzzle of life.
The transition from teenage to youth is a tumultuous one. Subtle choices that we think don’t matter ends up making a huge impact on our lives, like how we behave to our parents, family and friends, or how we deal with relationships. Life is like a mathematical equation with an infinite number of variables and our prescience is not capable to figure out these variables. This is evident by the fact that in present we can’t predict how the events will unfold but in hindsight, it all seems to fit perfectly in a chronology, like dominoes.
The only environment where we can test and apply our prescience is a complete quarantine one, isolated from the infinite number of variables of real life, that is Software. It is, after all, the creation of mankind and with each new iteration in the generation of software, we decide how many variables should we assign to this environment.
The choices, or divergence of roads as Frost puts it, make up the most essential part of a software engineer’s work. Choosing one feature over another, preferring space optimization to time optimization, or weighing one issue more than the others, these are some of the cases where small decisions can go on to have a large impact on the future of the business or on the career of the engineer.
To be highly efficient in decision making, it is essential that the software you are writing is immaculate as it isolates you from the functional necessity of the code you just so that you can focus more on making choices. To make software immaculate, there are certain principles that software engineers usually (or must) follow, and I believe if these principles are transcended to real-life, then it can help to organize our lives better so that we can focus more on the essential part.
You ain’t gonna need it (YAGNI)
Though it makes sense to look into the big picture and the future, the tendency of anticipating future problems is an overkill many times. In doing so the current tasks sometimes derail and hence add more complexity to an otherwise simple project.
If this is taken too far, we invest our efforts into something that is not potentially fruitful and makes it hard to maintain our current state. Like investing too much time in preparation for the future at the cost of missing out the present. What if that future scenario never arises? And is missing out the present worth more than preparing for some scenario that never comes?
This doesn’t mean don’t be prudent. Being prudent is a great trait but killing present is not. Rather, decide how to allocate resources to both such that you don’t miss out on events happening right in front of your eyes, because present only transcends to future, not vice versa.
Don’t Repeat Yourself (DRY)
In software engineering, this principle means that don’t write the same code again and again in different places. Rather make a function of it and call it whenever needed. This makes debugging easier and reduces the verbosity of the code.
Similarly in life, it doesn’t make sense to do repetitive things over and over again. Find a solution to figure your way out of this and spend your time more effectively. Remember, you only need to update the software once.
Features Over Components
Features matter more to users more than the technical complexities of the product. They don’t care how Instagram works as long as they are getting their daily feed. No one has time to dig deep into the technical intricacies of the components of the software. It doesn’t matter how many components you create, the main should be to deliver the feature to the users.
In life also, our attention should be focussed like a user’s, look for the thing that you want and strive hard to achieve it. Complexities of trying to achieve that goal might be hard but in the end, the goal matters more than anything.
A/B Test
To test a new feature, a software update is provided to some percentage of the userbase and the other uses the old version. Then the users’ behaviour on both of these versions are compared to analyse whether the new feature makes any positive impact, otherwise, it is ignored.
Just like this, do new things or things differently in your life and see which works the best for you. Try sending 100+ job applications or maybe create your profile according to only 10 companies and apply and see which works the best for you. If writing daily isn’t improving your skills, then maybe try writing on a good topic on the weekends and compare the results. After all, each one of us is unique and not everything works for everyone.
Just like Robert Frost said,
I took the one less traveled by,
And that has made all the difference.
Maybe this road isn’t for you. Try the other one. Or maybe create your own road.