“You can’t sprint a marathon”
As a half marathon running coach and a runner recently completing my second full marathon, I can attest to this statement. As the software engineering manager for a SaaS-based complex billing solution, I can also attest that growing a successful software company is like successfully running a marathon.
While it may be easy to do that 10K or even half marathon, the real test comes when you go for the full marathon.
For a full marathon you can’t just show up on race day and expect to succeed. You have to work extremely hard just to get to the starting line. You have to be prepared to do the 26.2 miles without completely destroying yourself in the process. Similarly in software, you have to have a strategy to not only get to the starting line, but also how to finish the race without destroying your company or software in the process. For both, the critical factor is the training for the race.
The training part is about trying various things to find out what works and what doesn’t. In a marathon your choice of shoes, socks, energy supplements, hydration and even something silly like chaffing management are important to figure out before race day. You also have to start finding your target pace, target heart rate and hill management strategy during your long runs. Similarly in software, you have to determine which features are important while making sure the product is usable, reliable and scalable. You have to try various technology stacks, data centers and architectural options to see what is going to be right for your solution.
While trying to determine what works through an exploratory approach, you have to temper it with some discipline. In a marathon, you have to maintain proper nutrition, get proper sleep, do proper stretching and core exercises throughout the process regardless of the other areas you are experimenting with. Likewise in software, you have to have some basic disciplines. You have to have proper release planning, proper issue management and tracking, proper operational oversight, proper prioritization of company resources and even proper rest.
For both marathons and software, you are pulled into uncomfortable territory. In marathons, this discomfort is the extra mile, the higher hill, the crappy weather, the 5AM start and the muscle cramps. In software, this discomfort is that seemingly impossible feature, the buildup of technical debt, the defect backlog and that long weekend (or two or three) to get the report a customer really needs.
The most important part of training however is to be able to adapt from what you learn. Learning means listening. In marathons, you have to listen to your coaches, your mentors and most importantly your body and what it is telling you. In software, you have to listen to your customers, your advisors, your prospects, but most importantly what your own software is telling you. You can’t successfully finish either of these if you aren’t willing to honestly listen.
Finally, marathons and software require maintaining a positive attitude through all the adversity, knowing that you are going to get through it all and do well on race day. On race day, it all comes together and all your hard work will pay off. But you still need that one last thing – the crowd cheering you on, handing you food and water and holding up whimsical signs to lessen the pain. In marathons, the crowd is the friends, teammates and complete strangers. In software, the crowd is your customers, partners and fans. Everyone wants to see you succeed.
Paul is the CTO & VP of Engineering at Gotransverse, the head running coach for the Austin chapter of Team Challenge and a runner who has completed 2 marathons and more 15 half marathons.