Marko Anastasov wrote this on January 30, 2014
Become an exceptional programmer by learning to ship
It seems like there is always a shortage of good programmers; that is why programming is one of the highest paid professions today. Note that there is no shortage of programmers in general. Companies that need a high body count in order to be formally capable of negotiating certain kinds of deals do not have a problem finding people for that. But I am not interested in that kind of a programmer. I am interested in those who love their craft and want to create something meaningful.
Such programmers need to stand out of the crowd when starting their career in order to work in a company that is a satisfying place to be in. These companies typically say something like, we hire through open source. When we at Rendered Text post a job ad, we always mention as a requirement that the person applying should have shipped at least one project to end users, be it open source or otherwise. Because sometimes cause and effect get confused, I want to explore a bit what that means exactly.
What does it mean to ship?
Young programmers, due to lack of experience, sometimes don’t see that writing code is only a small part in producing software. To borrow from the terminology presented in the famous book The Mythical Man-Month by Frederick Brooks, at the beginning we have a program. It is standing alone on a drive somewhere, not used by anyone and not interacting with other components in some kind of a production system. This is the easiest thing to accomplish, because generally we work alone and can declare the code as “finished” at any point in time.
It is more expensive to produce a programming product. This now involves shipping your code to the public. Desktop apps need to be easily installable. If the program is a library you need to polish the API, hopefully refactor the code to some degree, provide some tests, write documentation, write and publish a public announcement. The moment all that is completed, you enter a phase of maintenance: you begin to communicate with your users, perhaps contributors as well. You also need to repeat the process of developing and releasing new versions.
So for example, publishing source code of an implementation of an audio compression algorithm on GitHub is not shipping. On the other hand, a library with multiple versions, downloaded and used by hundreds of developers is a clear indicator of shipping behavior.
Most software needs to interact with other parts of a system in order to become alive and useful. You need to make sure that your program is stable and works efficiently with other components. For example, a web application needs to use a database and system memory. Writing code for mining data from a remote API is a good first step; making sure that it’s a runnable application that can scale to many users over a long period of time is a different matter.
Useful software then is a product that works well in a production system, and shipping means developing useful software. Any software company’s best interest is to avoid hiring programmers who are not capable of persisting through all phases of development over a long period of time. People do drop off for whatever reason, some of who unfortunately have brilliant coding skills. There are more aspects to hiring of course, but demonstrating that you’ve been capable of shipping something in the past is definitely a requirement in any good software company.