Software Engineer, Blacksmith of The Binaries
We tend to think that software engineer is an architect, or an artist, or a ninja.
In reality, we are more simillar to a blacksmith. We will walk through those positions above and compare it with software engineer, do they actually fit our descriptions?
Software engineer as an architect is way too impossible, when you become an architect, you already know the math and the details on how to make things works.
If I put this type of foundations and then use this type of iron as the skeleton, with this angle and the distribution of mass that I calculated, the building will surely be able stand up.
No, no, no. Software engineer can’t do that.
If I use this language and then use this framework as the basis, with this library and database schema that I designed, this software will surely be able to reach production.
But then the language specification changed, then the framework was not compatible with the new language specification, and the library introduce 13 breaking changes every month and the database schema need to be changed because we will be using Mongo now said the manager.
Well, we might be able to plan or design software like an architect. But the ever changing environment of software development really put you as an architect that has to build a city underwater.
My code is so beautiful it makes Mona Lisa looks like a segmentation fault.
I will use this colors for the sky, and I will draw rough edges to indicate the sorrow of painting, the ground should be red as it is a battlefield painting, now this is a masterpiece and will be worth $5B on the market!
No, no, no. Software engineer can’t do that.
Oh, let’s just use this reflection to automatically inject the dependencies, I will use immutable data types for everything, the logger will log everything that happens on the run as it is a production ready software, now this is a beautiful code that can be understood by my 5 years old son!
But then your reflection introduced a slowly walking zombie ready to eat the entire dependency tree, the immutable data types makes everything even more slower your boss decided to go to Half Life 3 conference, the logger destroyed the production server and turned water into radio active because the server just gone nuclear, now it took the entire team 5 years to fix these.
But wait, I’m an artist, can’t you see how I beautifully wrote the code? Everything is a one liner! See the beauty, its an art!
Well, except your code will be running on a machine that does not understand art. Your beautiful code that sacrifices performance and ignore various dangers that it might introduced won’t be seen by the customer. Yes, they won’t see how beautiful it is, they will just feel how slow it is (AND IT COSTS THEM $5B).
Now, this beautiful sword made by Masamune will help me cuts through the enemy line. My dark swift clothings will hide me under the shadow of the night. This morning star shurikens will be the last thing that the enemy see!
Now, this monolith that I just divided into 13 services will be able to scale easily. This heavy-duty redis cache will hide the latency when the service is reaching my custom personal database engine. The globally distributed CDN will be the first thing they ever see!
Well, it doesn’t seems to be very bad. I mean, we can handle 13 microservices, sure redis is a great storage engine, and CDN will make our customer life easier.
John: But, boss? Why is he wearing ninja uniform in the office?
Ninja: You can’t see me, now I will disappear within the mist of the shadows.
Three days later.
John: What the fork! That ninja disappeared and left us with this 13 undocumented microservices, and why would he wrote a custom database engine that can’t be queried, and those CDN is serving memes of ninja cutting onions instead of our content!
Ninja: *Giggles in the darkness.
Now the real deal is here.
Why would we consider software engineer as a blacksmiths?
Blacksmith starts with a pile of irons, it doesn’t have to be a bar, a pipe, or in any form. This is us, software engineer, introduced with various problem that we want to solve with software.
Now the customer asked us to create a sword from those pile of irons, this is us discussing the customer needs and explain what kind of thing can be expected from the provided pile of irons.
Then we started to melt those iron and form it into something that can be used as a sword. This is us preparing the documentation and planning for the software.
Then we started to collect our anvil, hammers, and stuffs. This is us choosing what technologies that could solve the problem.
We started hammering, we started cooling the iron, then reheating it again, then hammering again. This is us, writing the code.
Now it is time to put the sword prototype into some liquid to hardens it. This is us testing the software on staging server. Now, the sword might breaks or it might actually get hardened.
But then we noticed defects on the sword, now because it is already hardened, it will be hard to fix it. This is us, trying to fix bug that discovered during staging, now it will be harder to fix it as the codebase already looks bigger than Eren’s “Sword” (yes, he does have a sword, I mean why would he fly with those 3DMG without a sword).
Now we have to polish and sharpen the sword with a grinder. This is us trying to fix another bug and start writing unit test, functional test, or any other kind of tests, to make sure that the software is running perfectly.
Then you show the sword to the customer, and yes, they will ask for changes of course, you still live on planet earth. The code is tested, everything works, but they wanted something different. Changing the sword would be more difficult and more dangerous as it is already in a great shape. You will have to carefully do the changes as the software breathes the life draining air of a production server.
Once its done, and you gave the sword to them. Someday, sometime, somewhere, they will come back to you asking to fix the sword that starts to break here and there. This, my friend, is another change request or maintenance.
Now, you might be gone. So they visit another blacksmiths, and give the sword asking them to fix this.
The other blacksmith says:
Hell yeah! We can fix this software, let us write it from scratch and make it scalable with this tech.
Now, your sword become the Sword of Theseus.
This article does not try to be accurate, it is not, in any way, trying to say that certain languages, frameworks, libraries, or technologies is bad. The article was meant to be a fun and light article. Enjoy!