When I observe old people I notice one interesting thing. They don’t usually react aggressively like teenagers do. Even when they have to deal with difficulties in life they deal with it calmly. Even when some people undermine them they simply give a smile and move on rather than trying to prove they are wrong. I wonder is growing older makes them wise?
Looking at some people I know who is in their 50’s, I can confidently say No, becoming older doesn’t make them wiser automatically :-)
But, I guess they have seen enough things in their lifetime, and they understood that this too will pass and that’s why they handle difficulties in gracious way as opposed to committing suicides like many teenagers are doing these days even for small things like failing in exams. I think they have more data points to think rationally rather than going by emotion or following cult.
I am in my late 30’s now and there is a significant change in the way I see things now. Did I become wiser? Looking at the number of stupid decisions I make on daily basis, nah…I didn’t become so much wiser…but still better than I used to be.
As years pass by, my thoughts on many aspects of software development changed radically. Like many passionate developers I have high regards for writing clean code, creating better software designs, automating the boring stuff etc. But, what has changed is I start applying them depending on the context rather than by rule.
I don’t think anybody would disagree that writing clean code is very important. We have so many fantastic books, wonderful talks by knowledgeable people on how to write clean code. Writing clean code takes more time and effort, but it will pay off in the long run. So, can we conclude that we should always aim for writing clean code?
Younger myself would have said “Yes, we should always aim for writing clean code”. But, now I would say “It depends”.
Just imagine, there is an event scheduled to happen and want to open online registrations. Would I bother to implement the application following all clean code principles, TDD, BDD etc etc. No, I would just quickly build something to get it working. I might not even bother to write tests, optimise DB queries etc. I know it’s only for a short term use, and I don’t think investing time and effort for great code quality with 100% code coverage is worth it.
Try telling a young passionate developer that “You no need to aim for Clean Code for all kinds of applications” :-)
As a young developer I loved complexity. Yes, I loved writing complex code. That made me feel better about myself. If someone looks at my code and say it is easy to understand then I felt very disappointed. I wanted people to look at my complex code solving a complex problem and say “wow, dude its complex… but, you nailed it”.
So, how to make things complex?? Well, for a start we can apply all the design patterns we read last week. Then we can make everything configurable reading properties files from 16 different sources. Then, add some abstractions to accommodate futuristic enhancements. You got yourself a “Senior Software Engineer” badge.
After implementing all that complex design and looking at a usecase most of it looks unnecessary. But, we tell ourselves that the beauty of this design will be realized when new requirements come up. Sadly 90% of the time the design feels complex for every single usecase and when a new enhancement came up we realize the current design doesn’t support it.
After going through this vicious cycle again and again, now I crave for simplicity. I love to code for the requirement at hand. If a similar requirement came up 2nd time I copy paste the code and refactor the necessary logic. When a similar requirement came up 3rd time then only I think of coming up with an abstraction. At this stage I have clear data points to create a meaningful abstraction rather than creating futuristic imaginary abstractions.
Keep things simple, implement just enough logic for the business requirement. Now, I feel proud when someone says “I looked at your PR, and it’s easy to understand”.
I prefer copy pasting 10 lines of code with minor changes instead of creating meaningless abstractions. In fact the skill of a developer will be known based on code simplicity because writing simple code is the hardest thing.
Automation & Empathy
I love automating boring stuff. I use bash alias to avoid typing long commands, I create application generator to speed up development process, I create reusable modules to avoid boilerplate coding. Everytime I automate something I pat myself on shoulder :-)
The entire world is moving on so fast with all the technology revolution. Now we have automated tools for almost everything. We can comfortably sit in our chair and talk to someone miles away through video calls, pay our bills without having to stand in queues.
We, humans, never get satisified. We want more automation. We want our gadgets to tell us to wish our parents on their birthdays. If possible we want our gadgets to automatically send the wishes with fancy graphics and stuff. We want the technology to complete sentences for us while writing email.
We don’t like people directly calling us on our phones. #Slack-me. We don’t have time for any of this bloody human interactions.. we have more important things to do such as learning the next buzzword technology. During this amazing transformation we lost a quality called Empathy.
Few months ago I worked with a client where they have a semi-automated system where they perform certain activities manually. The manual work involves lifting of heavy objects, measuring the radius etc and is done by mostly not so educated people. Our job is to automate that manual process also using Machine Learning and AI so that we can reduce the number of folks from 19 to 2. Very well, from the organization point of view it reduces human error and increase efficiency.
You may ask, shouldn’t we use these amazing technologies (ML/AI) for something greater good like fighting climate change, finding out cures for deadly diseases instead of applying it for petty things??!!!
What happens to those poor not so well-educated workers?. They are doing this work for decades, now all of a sudden they became redundant. But who cares!!
If you ask this question you may end up listening to ToughMan quotes: Stronger will ive, weaker will die…that’s how nature works. Yes, it is easy for someone who is earning 6 digits salary monthly to preach how nature works and throw fancy quotes from “Sapiens” book. It takes a lot of empathy to step into their shoe and realize how hard it is.
During this project we met an ML/AI expert to solve our problem, and the expert not only blabbered for hours without giving solution but also gave a sneak peak of his dream ML project. He wants to put a sensor in Fritz, scan vegetables and place order on BigBasket automatically whenever it reaches to a threshold. I can’t think of a better use of ML/AI :-).
Well, I am not saying abandon all the technology advancements and live in a cave. But, don’t forget the very reason why we are inventing all this technology. The very promise of technology is boasted as “Bringing people together”. If you can’t show some empathy you can never get closer to anyone.
While interviewing someone understand that the candidate is in a lot of pressure and may not come up with spontaneous answers on the spot. If any of your colleague who is usually good at work is not doing very well lately, try to understand if they are going through any troubles in personal life. Don’t impart your “Leave home at home” wisdom that you gained by reading a self-help book last night.
When I think of what I am missing because of COVID-19, one thing is clear. I can surround myself with all fancy gadgets, but without personal interaction with other people life doesn’t feel good. Being highly skilled might make you more productive at work, but the only way to get closer to peoples heart is having empathy.
Be human, be humble.