In the World of large Software Companies — Are we superheroes or do we need restraints?

Markus M.
Klarna Engineering
Published in
7 min readJan 15, 2019

--

Captain America and Iron Man face off in their epic battle in “Civil War”.

Whether you are familiar with the Marvel Cinematic Universe (MCU) or not and if you like it or not “Civil War” is arguably one of the most intense and critical titles of the series. The reason: It gets political. Instead of battling yet another super-villain, most of the conflict happens internally between the heroes. On the one hand, we have Tony Stark a.k.a. Iron Man pushing for more control of the heroes, on the other hand Steve Rogers a.k.a. Captain America, who wants to keep them off the radar of corrupt political machinations.

Who do you think is right? Do superheroes need to be kept in check or should they keep their freedom? I talked to a bunch of people about this in the past and most of them opted for the “keeping them in check” option. Of course, because “anarchy introduces chaos”.

But I disagree. And here is why:

For you see, superheroes are, most of all things, fictional characters with some sort of enhanced ability. Nothing like this exists in reality. They exist to “fight the battles that we can’t” and “make the decisions that no one else can”. And while those, of course, refer to mainly bodily abilities, you could also interpret this in a more moral sense.

What makes a superhero really “super” in my eyes is not his physical abilities or his intelligence. What truly qualifies him as a hero in my book is his sense of justice. His ability to “always do the right thing”. Something we could never even hope to achieve. And from that viewpoint Cap could be considered one the “strongest” (albeit not perfect) heroes of all time. He has an unquestionable sense of justice. Tony, on the other hand, is a very flawed character with a really dark past as an arms dealer and many morally questionable decisions. So in that regard, he could even be considered “not so super” at all.

Caps unquestionable sense of justice.

All of this is, of course, just my romantic view of a perfect being. A hero that truly doesn’t need to be kept in check, because he would always do the right thing and putting restraints on him would only hinder him in doing so.

But let’s get back to reality.

I feel that the environment in which most of us exist and work is a very free one. Many modern companies approach a “Startup Mentality” where we have very few restraints regarding how we do our work and how we approach problems, especially in the front-end-oriented teams (for which I mainly speak). So, technically speaking, this would be an ideal environment for superheroes. Except none of us are. We’re all just humans with limited abilities. None of us can climb a skyscraper like a spider, pull a helicopter out of the sky or shoot lasers out of his forehead. This whole “absolute freedom” business works only in a fictional scenario with fictional characters (and even only then just partly). The only way we can achieve something remotely similar is when we all stick our heads together and think about what are the right things to do. But what exactly are the “right” things? And for whom are they the right? For you, for me or for all of us? Is always doing the newest, fanciest stuff the right thing? Is refactoring your code every week because a new feature just came out in a pre-alpha state the right thing?

To be honest, I cannot give you the answer. Not alone, at least, that is.

However, I firmly believe that a society, a community, a team, heck, even a herd of sheep can only function if they follow a set of rules. Animals do have the advantage that they usually have most of their rules pre-programmed into their DNA as instincts, while we humans have to find our own set of rules for every context. So, rules you may have defined for you as a person might not necessarily apply to you as an employee in a company.

I think widening one’s horizon is one of the greatest things in existence. Learning new things, things you’re interested in, understanding how something works, is one of the most satisfying feelings there is. And all of us who has the opportunity to do this in the context of their daily work should be tremendously thankful that we have this kind of luxury.

“Once you stop learning you start dying.”
- Albert Einstein -

And I can’t blame anyone who, in return, once they grasped something, wants to put it to good use. After all, true wisdom is only attained by “doing” something, not by only “knowing” about it.

But this is where I have to stop you.

In a personal context this could be regarded as the ideal behavior. You constantly strive to improve what you care about. But in a much bigger context, such as one of a whole company, this can be very dangerous. There’s no arguing that our field of expertise is one of the fast-paced ever. Stuff we discover today might be outdated tomorrow morning already. But again, what exactly does “outdated” really mean here? Is there something better that resolves some serious problems which stopped us from progressing or is there just something “newer” that can do the same thing, but just a little bit different and maybe more elegant from you previous solution?

Applying this kind of behavior to other industries, imagine a doctor stopping an operation midway because a new type of syringe was just released and he wants to try it right away. Or a construction worker building a house but suddenly rebuilding the foundation because a new type of experimental concrete was just released.

We cannot behave like an independent group of developers when making these decisions, because such changes influence far more than just yourself and your team, but eventually the whole system around you. We need to find a way to ensure unity without compromising the possibility to stay up-to-date where it is required. We need to come to a common understanding that not “how” we do things is important, but “that” we all do the things that matter the same way throughout our ecosystem. And for many this is a no-brainer when it comes to topics like diversity. Why not apply the same principles to software development? Of course, rules and regulations are only truly good when they’re not imposed on us by a higher controlling force, but when we ourselves decide on their necessity. We’re bent to question what we don’t understand. But if we together agree that there is a need for some restrictions, everyone can happily accept those limitations because they understand why these regulations are necessary.

On the other hand, you cannot simply take something away without any form of equal exchange. That only leads to frustration down the road, even if the intention is clear. It would also limit our possibilities to keep growing and improving. So, while introducing more regulations to ensure higher quality standards, we should also introduce opportunities to stay up-to-date educated. Otherwise stagnation is imminent.

So, finally, here are some things that I think we could do to improve this:

  • Form groups based on what technology or language we use with representatives of every team that uses said technology and agree on common practices, which then will be communicated to the teams and possibly even implemented into existing controlling algorithms (e. g. git-hooks) on a central level.
  • To compensate for these restrictions, we could introduce some innovative R&D program for those who wan to explore new territories. Make it clear that we’re aware of new technologies, but also the reasons why we don’t approach them during an ongoing implementation. At some point we had a thing called “Innovation Friday” in our team where we could do just that. We tried out new stuff beforehand, instead of going straight into refactoring it in our WIP codebase.
  • Have clear defined channels for proposing new features instead of just abiding by every new trend without sufficient evaluation.
  • Have set intervals for the evaluation of used technologies. If we want to update or change an implementation, these things have to be done in a defined process, as well. And ideally altogether.

Those are just some of the ideas I personally think would work in our favor as a whole. Of course, this cannot be achieved by a small group of people alone. Something this big has to become a mentality we all share and teach to each other. But I strongly feel that these kind of things are necessary to ensure a modern and intelligent work ecosystem.

And with that I ask you all to test your patience when it comes to doing the “newest” and “fanciest” stuff and instead come together to find a best solution for not one, but all of us.

The Key to Victory?

--

--