Warning — Given the movie being commented here, there is textual and graphical violence (from the obligatory gifs) in this article
Warning — This article is choke-full of spoilers, starting next sentence.
The release of John Wick 3 in the theaters is a good occasion to look at this fictitious assassin and wonder what makes him so different. He's fighting the world and still gets away with it. He kills so many people while sustaining a minimal amount of damage. The movie calls him baba yaga but us developers might want to call him a... 10x assassin.
Actually, one of the really amazing things about this movie is the extent to which they worked on the methodology. Indeed, it's not your regular action movie where the hero is invincible and his magazine is endless. He's not facing Storm-Troopers-accurate enemies but instead madly skilled killers. But John Wick is above them.
John is a man of focus, commitment, sheer will
The movie is clear. He's different because he uses the SCRUMs, XPs and ITILs of assassins. And the lessons are fascinating.
Over the course of the three movies, we've seen John Wick operate many tools, weapons and vehicles. He can fight with an antique gun as well as a latest-generation shotgun. He rides car, horse and bike. He handles any kind of blade.
But the reason why it matters is not what you could think. If you only know how to use a hammer then all problems look like nails. And that's very true in other kind of movies, like super-hero movies where the main characters have only a very reduced set of powers and use it to solve all their problems.
While the author has no proof to present, it seems reasonable to consider that the human mind can only build ideas based on pre-existing ideas. If you suppose that you can only build an idea by mixing 2 ideas together then the number of new ideas you can have at a given time are the combination of 2 within N pre-existing ideas.
- 2 ideas can give 1 more idea
- 3 ideas can give 3 more ideas
- 10 ideas can give 45 more ideas
- 100 ideas can give 4950 more ideas
If you follow this train of thoughts it becomes easy to understand that if you have knowledge of all the basics in all the areas of interest then the number of solutions you can bring to any problem is totally explosive.
That is how John Wick can kill people with a pen or fight sabers with a regular belt. He knows the basics so he only needs to stick ideas together. Moreover since he also has a deep experience he can test ideas in his mind to see if it would work.
Let's take an example: to kill people with a pen, he does not stab them with it. Instead, he holds the pen against the wall and precipitates the head against the pen. He knows that a pen is not sharp enough to be used as a knife but he also knows that you can easily die if you fall on a pointy object. All that is left to do then is to create a pointy object and make the opponent fall on it.
If you translate this into programming skills, it means knowing the basics of computer architecture, networking, different programming languages, etc. A notably good read on that matter is Modern Operating Systems which covers most of the basics wonderfully well.
If you know all the layers in the stack then you'll be much more prone to finding efficient solutions to the problems you face — or even to recognize problems in a first place.
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
In the movies we can see that John Wick is a great planner as he often prepares his attacks very precisely. However, while he always thinks a few moves in advance of his opponents, he does not always have the opportunity to plan everything correctly.
This shows by example in the first movie where he goes after the Russian Godfather's son. The first attack is a bit rushed and ends up as a failure while for the second attack he gathers enough intel on the mob's stronghold to plan and execute an attack resulting in attaining his original goal (aka killing the son).
The attack involves finding a vantage point to snipe down all the bodyguards but also trapping all the cars with explosives to counter their retreat. In short, they had no chance of survival while on the other hand the efficiency of John was far above the roof.
Planning does not really mean that you're going to blindly follow a plan that should work. It means creating a strategy that will be much more efficient than a naive approach because you will find a path that avoids all the pitfalls.
But that's not all. In spite of all the planning, the enemies always find ways to surprise John Wick. He's a planner, not an oracle. That's why his plans are not Ocean's Eleven type but rather strategies with branches and options. The foundation is done and rock-solid which leaves all the bandwidth to think about the small details coming up.
It's like making a presentation. If you have no idea what to say in advance then it's going to be a mess. On the other hand if you prepared what you are going to say then the presentation will be understandable even if people ask a few unexpected questions on the way.
In short, preparation and planning are essential if you want the mind bandwidth to solve the unexpected (and unexpectable?).
Did you ever rush a project because the deadline is nearing and you're going to be late? It usually implies writing crappy code which ends up plaguing you or your successor for the next 5 years.
But does that make you actually deliver on time? There is several levers used to code faster like working longer hours or increasing focus. But deviating from best practices isn't a good option. They did not become best practice because they are slow and inefficient, it's quite the opposite actually.
You can guess that the author of this post particularly likes the antique gun scene in Parabellum. While locked behind a low-quality door, John knows that his enemy will come barging in shortly and that he'll need to kill him. In the room, he finds antique guns and immediately goes for the most precise one. Yet, it doesn't seem to fit the bullet he wants to use, which brings him to assemble a new gun from pieces of other guns found in the room to finally get his one-bullet super-precise antique gun. The other guy breaks the door the second the gun is assembled and is greeted with a bullet in the head.
The whole point of this is that John Wick focused on the core feature — a precise gun just for the one shot he needed — and did not add anything extra. He put just one bullet in the gun.
So, even under extreme pressure, he decided to execute perfectly one task rather than being sloppy on many tasks. And it worked.
In Chapter 2, the first task of our killer friend is to go assassin a mafia boss. He's commended to do this by her jealous brother and does so without any trouble. But here's the trick: once the deed is done, the brother sends an ambush to also get rid of John.
And John planned it so well that he planted guns in all the locations where the ambush would happen so he would have the right weapon at the right time. In the end he escapes and the movie goes on with a very angry brother.
But this also happens to developers all the time. By example, suppose that a client asks you to make a form that sends an email to a commercial team without asking to store the emails nor anything of the sort. You can be absolutely sure that within a few weeks the client is going to ask you to guarantee one thing or another ("how many emails were sent?", "are we sure that email@example.com did not send an email?", "are the emails properly working?", etc).
While those typical un-specced requests are the topic for a whole article on their own, you really need to anticipate them when you code because otherwise your client is going to kill you for no fault of your own.
Almost every killed guy in the movie receives at least two fatal bullets. In fact, it seems like a core principle to absolutely make sure that everyone is dead. This avoids the classical movie mistake of thinking that someone is dead and then realizing that they've grabbed a gun and are now pointing it at you.
That's also true at various level in a developer's job. When you do a feature, you better test it with unit tests, integration tests, manual testing and so on. When you write specifications or documentation you better say the same thing several times at several locations in different manners. In general, whatever you do, make sure that there is no single point of failure.
And it's also true for the tools and techniques or even people. No single solution will magically lift all your problems. You need several points of view clashing, several linters to agree with each other or several ways of testing to pass in order to make sure that you get the best possible output.
Redundancy allows to diminish the risks of a resolved issue coming back to bite you in the ass.
Several times in the movie John will seek help from experts. Whether it's about map-reading or choosing guns, he prefers when possible to leave the choices to to others. Indeed, he's a generalist on many topics and an expert on a few but he can always find people that are better than him on a specific area.
And it's with absolutely no objections that he accept the advises. His horizons are open and he basically never uses twice the same weapon over the course of the 3 movies.
Of course there is several pre-requisites to that. The first one is that you need to know experts to talk to. The Continental seems surprisingly fair at recognizing experts instead of promoting charlatans or hype. The developer community probably is less efficient, nonetheless there is plenty of places where to get good advice (have you heard of DEV.to?).
The other one is being able to recognize your own shortcomings and know what you don't know, which is something that the brain naturally doesn't do. You can read more about that by reading How Developers Stop Learning: Rise of the Expert Beginner and all subsequent linked articles.
And finally you must be able to constantly leave your comfort zone. There is no place for habits and stagnation. Capitalize on what you know but keep on trying techniques, tools or paradigms. As seen above, if your basics are strong then you can easily deviate from what you know bit by bit without getting lost.
Getting external knowledge is essential and one of the most powerful skill of a developer is the ability to find and integrate that knowledge.
The movies shows again and again and again the incredible skills of its main character which, even including super-heroes, is one of the most badass fictitious characters ever portrayed. He can literally kill any world mafia boss within a matter of days and get away with it. And he does not blink before going alone to war against a criminal organization just to avenge his dog.
But guess what? He does not hesitate to use all the tools at his disposal even if it includes shielding himself behind the "no business on Continental ground" rule. He also uses every promise or pact ever made to him to gain support.
The pitch is that he's alone against the world but in truth every once in a while he's in a situation he can't escape from by himself and it's someone else that will save him.
Everything that he makes operates within a safety margin on his health, energy of firepower, even if this requires to get rest or to get help and so especially at critical times.
While the movie consists of a single man fighting against the whole world of organized crime, this does not come as an epic battle where he would face them all at once. There is actually very little occurrences of fights where he fights more than two persons at the same time.
Everything comes with the setup of the fights. They happen in places places that don't allow this kind of massive fight but are more like a 300-type of strategy where all the foes will come one by one.
And no matter how difficult the task, it can always be cut down into smaller steps. Each step is small and attainable. Also each step can fail but it's just an opportunity to try a new tactic.
That is very obvious in the first movie when a commando is sent to his house in order to kill him. He kills every attacker one by one very methodically by luring them in the dark. One of the final assailants is killed in a knife fight. While the initial stab did not work, he hits the knife like you would thrust a nail into wood and finally it works.
John Wick only solves one problem at a time and makes sure that the problem is completely solved before moving to the next thing. Bit by bit it makes impossible tasks much easier to accomplish.
The making of the John Wick movies is very thoughtful as every action from every character can be explained logically. Suspension of disbelief is kept at a minimum while the characters are more realistic than ever seen before in an action movie.
This makes it a very interesting case study because while bloody and violent, the main character's actions can actually be related to development and they do act as a very illustrative examples of the behavior to adopt when any mistake can mean death.
Of course the stakes of our jobs are usually lower but it still makes a marvelous point.