Note: I wrote this blog on a warm sunday morning because I couldn’t get this out of my head.
Building and Maintaining Software is a Work of Art
One more cup of coffee wont hurt right?
Either you are working on a personal project with no deadlines, or working for an organization that demands continuous delivery from you, programming feels like a race against time. The life of a software developer is seldom free - there are always new things coming up, and keeping up to date while building is hard.
There is a general consensus among the industry that developers are often burnt out and always on the lookout for “one more cup of coffee”. There used to be a time when developers built complex software in days, but now building even the simplest of application requires huge unrelated cognitive overload. Why is that?
Somewhere along the line, developers didn’t get the memo that their job now requires them to do 10x of what they did while adhering to impossible timelines. My answer for this is that as software evolved, we started asking difficult questions on how we can improve existing workflows and developers started solving these through software. With enough evolution in the field and more smart people choosing building software as profession, the bar of what it means to be a “good” developer kept on increasing. This gave rise to even complex sub-systems that although made life easier to deliver software consistently and fast, required a huge learning curve and often didn’t do a good job of abstracting away complexity from user. Rome could’ve been built in a day, but a reliable data pipeline surely would take months(or years) of consistent developer effort.
Art is The Elimination of Unnecessary
If you have been in the software industry for some time, you would’ve deduced by now that developers do a lot more than just write code - which is sadly what many of people still believe software development is. Long gone the days where a developer spent days without showering and being fueled by coffee to just spit out lines and lines of spaghetti code.
For a good change, a developer nowadays has to take many roles. For me personally, writing and maintaining software is plain old engineering, but engineering is closer to art than actual science. The two main pillars of software development is functionality and reliability, and achieving those two is not an exact science, but rather a deliberate practice of craftsmanship. More times than not, a developers’ job is not only just “solving problems” with code, but rather crafting solutions that can functionally and reliably solve a real life issue both in short term and in long term plus requires less effort for extension and maintainability.
Building software nowadays is an inherently complex process that requires spearheading through multiple hurdles even before you start understanding the problem. For someone used to sit in front of a screen to build games for the sole purpose of fun, it would seem that nowadays there is a delayed feedback when it comes to actually deriving fun from development. There are now strict timelines and requirements, but there are always ways to exercise creativity - for art is the elimination of unnecessary.
If you look deeply into problem solving, it is inherently just the act of creating something. You can add layers of abstractions on top of it, but when it actually comes to execution - there is no choice to bring in your A game. As a developer, you have to both navigate countless distractions, give reliable timelines, stick to a schedule - and obviously craft an engineering solution that is scalable, easier for others to understand, solves the problem exactly, is logically sound, and is easier to make refactors down the line.
There are many roles a developer has to take during different phases of development. They’re a requirements engineer as the problem is presented to them, a design engineer(or an architect) when they’re crafting a solution, an assassin when testing, and an end user when their changes go live. Life’s equal parts tough and fun.
Ending Notes
One of the things that’s making me appreciate software development nowadays is programming in Ruby. Coming from someone who has been developing in Python since forever, being a developer and working in Ruby just gets it. The best analogy, which often I give to people about Ruby is that it has all the qualities you would want in your ideal wife - aesthetically pleasing, easier to understand, well-balanced and makes your life easier.