First, let me explain my motivation for writing. Ideas explained here are not new, but they are very important to me. For many years I struggled to share my story. I've reached the decision to start writing naturally. I've recognized writing as an opportunity to organize my thoughts and practice writing in English.
Real artists ship. Steve Jobs supposedly said this. Regardless of whether or not he actually said it, itʼs a strong message. Put another way, you should always finish what you are working on.
I often think about this statement because it became very important for me to complete, ship, deploy and release all projects I’m working on.
The origins of this drive to ship go all the way back to my childhood. I used to build lots of electronics projects, with mixed success and failure. I was not always able to complete all of them, but as time went on, my proficiency increased. I can also attribute this finding good mentors who helped me and gave me useful tips. By the time I was a teenager, I was really good at building all kinds of circuits. An important early milestone for me was when I won first place in an electronics competition in Prague held by youth technics stations. Looking back, the key to that success was practice. I knew how to put a circuit together. I was able to solder it all properly and when ready, carefully power it on to test it. Circuits usually donʼt work at first try, so with some mentoring help I also learned how debugging and fixing circuits works. You always make a mistake somewhere, itʼs inevitable. You just have to find it and fix it. These principles apply to both electronics and software development.
When working on youʼre making something, itʼs very important to get your project to a state where you can test it. Testing is important in both hardware and software, but the real world test comes when your users or customers start interacting with your creation.
In the software world, if you donʼt ship, the final test never happens. You didnʼt learn if the project actually works or not. You donʼt know how it performs. Without shipping you donʼt know where you made mistakes, or what mistakes are important.
Because you didnʼt get the final lesson and feedback, youʼre preventing yourself from correctly prioritizing in the future. You didnʼt establish an appropriate feedback loop for yourself.
What can prevent you from actually shipping?
When working on something, you should never stop thinking about the big picture. Tunnel vision is your enemy. You should remind yourself to periodically take a step back and think about the project. Asking yourself lots of questions helps. Simple examples can be:
- Is the project working?
- What should I do to make the project work right away?
- Am I working on the right feature or fixing the right bug that will make the most impact?
- Or even more radical questions like: Does the user really need the feature?
No matter what you believe, you're in control. You can bring positive changes to the project and successfully ship. Prioritization based on answers to these questions will help you maintain higher motivation. High motivation makes it much more likely that you actually complete and ship the project. When you're not making fast progress, cut features.
Loss of motivation
Your time is limited and youʼll inevitably get interrupted when working on things. Getting back to work after interruption is usually difficult and can lead to easy procrastination. This is why itʼs very important to correctly prioritize things youʼre working on. Think about the big picture, set short term and long term goals for yourself. Plan short term goals as tasks you can do in one day. Long term goals should not go beyond scope of one or two weeks. Be aware that incorrect feedback can also cause loss of motivation. Donʼt seek external feedback until youʼre sure youʼre ready, but definitely do seek early feedback.
People and situations around you are frequently main sources of delays preventing you from shipping. These people can be in your team or organization, it can be even your own family. Everyone needs your time and you should find ways to timebox your activities. In teams and organizations shipping issues are usually political. Within larger organizations these issues tend to be revolving around lack of trust. Make sure your contributions are always evaluated by merit. You should always clearly state you trust your creation and that it’s ready to be shipped. Spread the word, convince others and put great emphasis on how important it is for you to ship. Clear communication is always the key to resolve issues successfully.
Waste of time
If it is not possible to ship, learn as much as you can about the situation and make your own conclusions. If you find yourself in a situation where you’re permanently prevented from shipping, simply leave and change the environment. Your work is likely pointless anyway. Real lessons are learned when and after you ship. Your time is limited and not shipping is absolute waste of your time.
Let me try to distill all of these thoughts. Never stop shipping. Keep high motivation. Remove all obstacles in the way. Find shortcuts. Complete your project and get the product in front of its customers as early as possible. Shipping early means you'll quickly validate your ideas. Make sure you have proper feedback loop in place. Iterate.
Remember that nothing is perfect in its first version.