This seems to be a healthy subject lately so I though I would add my own view to it. The myth of the 10x programmer states that some programmers gives their employers 10x more ROI than average. Some people uses this myth to argue that these programmers should be paid ten times as much while others argue that these so called developers do not even exists. This is not what this post is about.
I have worked in many places, with many people of different age, experience and competences. I can guarantee to you that these people do exists. I can say so because I have seen what most people consider senior level and this level is barely sufficient to get hired as a junior where I currently work. Keep in mind that a 10x developer is not necessarily more experienced or having a higher technical level than others. Some times they do, but the truth is it has mostly nothing to do with your level of technical skills.
Now what do you think happens when you put 60 experienced and very effective developers in the same room for a few months? Everyone can learn from each other, yes, but you also discover, even in such environment, that your seniors are way, way more effective than you. And there you have it, the myth of the 100x programmers…
f(ROI) = productivity x 10^creativity
The key to understanding what makes a developer truly exceptional is in his ability to be creative. Keep in mind that I am not talking about cleverness here. Every experienced developer knows that writing clever code is a horrible thing to do. Being creative means seeing solutions that would not be seen by most people. While they might know their tools very well and be able to use them in very effective ways, they are not able to see new ways to use them. They fall into the “default” creativity level. Like I said, most developers falls into this category. It doesn’t matter how productive you can get, you will always miss the next step by an order of magnitude if you can’t think outside of the box.
You will meet some developers that are able to see past the basic usages of their tools and can go further than most. You will also notice that there are developers that will depend so much on the known recipes for their tools that they will stall if they can’t use them. These developers some times comes with such a low creativity level that they will hinder your team and slow you down. Yes, this 10x thing can go in both directions.
We all know that being a developer also means being an artist. Writing code is a form of craft, and in any crafting there is also art. This is why being creative is so much important to you as a developer to succeed. But being an artist does not only mean thinking of new ways to do things. It also mean knowing when to stop and take a look at the big picture.
Going from a simple programmer to a full-fledged software developer is all about creativity. While some people are more lucky than others and already are very creative, others aren’t so lucky. Actually, most people are completely missing the boat on creativity in the software world. Fortunately for us, creativity can be trained!
Learning to think of new things is like learning to learn…
The key thing to keep in mind is that you can most definitely get better at creativity. It is important to train your technical skills to stay sharp and up to date, but training creativity also is important, if not more than learning that new framework that just got out. Here are a few simple things you can try to get more creative in your every day work:
Start with simple problems for which you already know the answers. If you are a beginner, you might be familiar with writing a console application. You might know how to display text and get back information from your user. If you are programming in C#, this means you know how to use the System.Console object to some degree. Have you ever used any other method than ReadLine and WriteLine? Have you ever took the time to look at the other things this object can do for you? This is the first step in training your creativity. Look outside of your comfort zone. Go and explore the wild and crazy possibilities this class offers. Play with it.
The next step is to step back at each of those little experiment you did and look at the big picture. What can you achieve of new based on what you learned? What knowledge have you leaned that can be combined with other things to form a greater whole? What problem do you have to solve over and over again in your applications? Could this be fixed with some duck-tape and the things your just learned about? If it is, try it! It does not matter if you are about to write a simple framework to create menus for console applications or if you thought to rewrite an entire framework similar to WPF for console application. Just do it. Have fun. Play with it.
The final step into learning to be creative is to turn the process upside down. You now have a complex piece of code. This is no longer a simple problem. Even if you are a beginner, you will be familiar with it since you are the one who wrote it. Can this be used to solve your problems from before? What other problems does it bring? Can you make it simpler? Can you make it more powerful? Is it worth it? If what you wrote is too complex or not worth the cost, then put it aside and come back to it later when you know more about your tools. If it works well, use it. Play with it.
The stone in your boot
This cycle will force you to stay out of your comfort zone where you are always stuck to deal with a stone in your boot. Like in most situation where this happens, you can’t simply remove your shoe and pull the stone out. You always end up having to push it on the side in a spot where it will not bother you for a while.
The comfort zone is the enemy of creativity. If you feel like you are stuck in a comfort zone for too long then your are not training your creativity.
Developers are meant to shape worlds. While staying in your couch watching TV definitely shape a world, it will only affect you or a very small amount of people. It is when you look at that tree on your lawn and see a tree-house that you start to shape worlds. It is when you push your ideas to their limit that new worlds, new tools, new techniques gets to appear and be used by everyone.
If you want to be part of those 10x developers, learn to be creative. Learn to see new paths from the places you know. Don’t stick to the main road. Try to optimize. Try to think outside of the box to bring new solutions. Your boss will love you for this, specially if you can show him how much ROI he will get from your creativity.