Music has always been a part of my life in one way or another. I had lessons in piano, performed in a band for various occasions and had involved in music events. There are values and practices that are important as musicians and very much relevant and applicable in software development. This is especially if we also consider what we do in IT as an art form.
Practice Practice Practice
You’ve got to learn your instrument. Then, you practice, practice, practice. And then, when you finally get up there on the bandstand, forget all that and just wail
~ Charlie Parker
Anyone who plays instrument knows, they cannot skip the practice. The more practice they have, the more confidence they will be when they play their music. An instrument is a tool to convey feeling, thoughts and at the same time to create the nuances for the audience. Practice is the repeatable process that musicians do to correct their mistake in a safe environment. When musician practices, they aim for perfection. This is because they know, practice is all they can lean on when they finally get up there on the bandstand.
Just like Charlie Parker said, once we learnt our instrument, we need to practice, practice and practice. In IT, practice is the process that we often neglect. The most important goal of practice is that, to correct the mistakes in a safe environment whilst aiming for perfection.
In order to do this, we need to be able to identify our mistakes, and what could have been done better. We apply our solution, and reassess the result whether our solution works. We then, rinse and repeat the process.
The agile concept of ‘Fail Often, Fail Fast’ is very much aligned with this notion. The ability of an IT team to be able to quickly fail, recover, apply their solution and fail again is imperative to be able to move forward.
The other critical element of practice is to be able to do this in a safe environment. The safe environment in here means that, an environment where we could make mistakes and not be afraid of criticism, as well as not having any side effects to other parts of the system.
To achieve this, we need a combination of a culture where we celebrate mistakes and an infrastructure environment that is separate from the production. The bottleneck in most places usually resides in the culture rather than the environment. Build the culture so we can practice, practice and practice.
Fail often, fail fast and create a culture that celebrates mistakes.
Live Environment is not Practice Environment
There’s nothing to compare to live music, there just isn’t anything
~ Gloria Gaynor
Any musicians know, nothing compares to live performance. It does not matter how much practice they have had, in live performance everything is different. The cool breeze from the wind, the view of the audience from the elevated stage, the blinding lights from the spotlights and the nuance and energy from the yelling and excited audience, they are all different. Even for a seasoned musician, every live performance will never be the same.
This is the equivalent of the production run in IT. Every application deployment will be different, and every infrastructure will never be the same. Whether it is because of a certain port that is open, or an obscure library that was installed many moons ago, they all contribute to the production run in one way or another. And just like Dirk Gently’s said, everything is connected.
Rather than alienates the production, it is much better to make an acquaintance with it. After all, production will always be part of our software development. That is if we plan for our software to be available for other people at all. To achieve this, a strategy to make an acquaintance of the production environment is required. Involvement from all parties and stakeholders is paramount as there are costs associated with it. Production environment must be able to be replicated in a safe environment at any point in time.
Luckily for us, we have a new branch of IT that was created recently to help with this. It is called DevOps. The benefits of DevOps practices as described by Amazon are the characteristics that we would like to achieve in the software development process. The automation methodology of ‘One Button Click’ described by my colleague, Rolf Shroff, is a practice that could help to achieve this.
Make an acquaintance with the production and practice, practice, practice.
Create a Legacy
As an artist, I never want to be a moment. I want to be a legacy, and I want my music to touch people for years to come
When we think about music legacies, we think the great music that was left by our ancestors such as Mozart, Bach and Handel. In jazz, we have Charlie Parker, Art Tatum, Coltrane and the Great Oscar Peterson. In modern and pop music we have icons such as The Beatles, Queens, and of course Michael Jackson.
When we heard the term ‘legacy’ in IT, we often irk on it. We think of spaghetti codes, technical debt and possibly an obscure technology that we may not be able to replicate in modern technology. The reality is, any application that we create and write will become a legacy. The only question we have now is, what legacy do we want to leave?
The negative connotation of legacies in IT culture comes from our bad experiences with older application and technology. As technology moves fast, any code that was written longer than 5 years ago, by default will become a legacy. Any application that is 10 years or more of an age, may have a problem where the modern technology is no longer able to support it.
The best legacy that we could give to the future, is the ability to not be dependent on the past. It is the foundation and structure to be able to move forward without having to worry about side effects.
In the infrastructure landscape, the microservices architecture described by Fowler and Lewis is one solution that we could do. Microservice characteristic of componentisation allows the system when constructed properly, to be able to be modified with lesser side effects.
To reduce the side effects in the code, we could use the command handler pattern as described in my previous blog. The command handler pattern forces the user to think and code in a testable manner. This allows the user to have more freedom in how they would like to manage their code. Practices described in SOLID and Clean Code principle by Uncle Bob are also aligned with this notion.
Creating a legacy in IT requires thinking ahead to the future.
Create Our Music
Create a safe practice environment and have a repeatable process for improvement. Have a strategy for production and create our legacy for the future. I believe that it is the responsibility of any people who work in IT, including us, programmers to work towards it. These idealistic concepts are only a dream if we do not strive to achieve it.
Shoot for the moon, and if you miss, you’ll land among the stars.
Other Related Articles: