Note: This is an extension of the Pretentious series: 7 things I learned about life from my one-sided relationship with Software Engineering nobody asked for.
Inability to build “a solution that works seamlessly forever” isn’t your fault
Don’t get me wrong here, I’m not questioning your designing ability! It’s based on the fact that given enough time, everything breaks. To give you an example, if someone asks you for a program to write a function that takes a date and number of days and returns another date, it should be straightforward, right?
Not really, depends on what the date is, and which location we are talking about. A few years back in Samoa and Tokelau, Dec 29 was followed by Dec 31. This will fail your seemingly simple date addition logic. So, as a Software Engineer, you need to embrace imperfection but still aiming for perfection.
I know this may sound pretty evident to the extent of a cliche, but I can tell you stories about how I spent multiple days refactoring code in which I encountered a design issue while fixing a bug that should have required less than 10 lines of change. That brings me to the second point.
Prioritization >> Technical Knowledge
You can be a genius and pro at what you do. But just like our life, if you don’t know where to focus or where you’re headed with all your talent. It’s going to bite you back. You may find something really challenging but it may not be what you should be doing first.
In other words, challenging doesn’t always equate to important. Sometimes, a simple or unoptimized/hacky solution would be a fine way to deal with an issue instead of building an optimized solution if it helps you focus on things that are more important to the business. A thirsty man should rather pay few bucks to buy a water bottle than to set up a cost-optimized water purifier plant. Sometimes, it’s just not worth it.
The way users interact may seem random at times, but still much more predictable than life
Every software engineer has spoken these golden words, “But why can’t (s)he do that this way. It’s a single click.” or “Do you really want me to do that? It doesn’t make sense”. e.g. when you have gotten a request to add a full-fledged calculator functionality in timer input, while the forward button (add x minutes/hours) already exists. Why do they need square root and other functionalities? But of course, user behaviour is still more predictable than the things life throws at you. I wonder sometimes if life is nothing but a spoiled child throwing tantrums whenever it feels like!
As a software engineer,
- you may hear the news that the project you had been working for a year or so is scraped off because your company decided to acquire a startup that does exactly that OR
- the company doesn’t need you anymore OR
- you can’t really focus on work due to a family emergency or just due to mental health issues you’re trying to cope up with OR
- your perfect plan got affected due to some sociopolitical factors or a pandemic and you won’t be able to execute that in the future, ever!!
So, next time when you feel you can’t estimate your story points right, try harder but don’t expect things to go according to plan, because in the end, software engineering is just a subset of your life!