There is wisdom that only comes from complete product cycles -- no amount of job hopping can provide it.
— John Carmack (@ID_AA_Carmack) August 6, 2016
In the Bay Area, job hopping is a de facto state for many engineers. If you’ve been at a software company for more than a couple years, you generally don’t bring it up in polite company. This has always seemed strange to me because I’ve tended to learn the more profound aspects of software development a couple years into my jobs. For a San Francisco citizen to read that John Carmack shares the same belief was both reassuring and refreshing.
One of those more profound lessons that seems to come only with “complete product cycles” is developing an intuition of what to build, when to do it, and whether you should be idealistic or pragmatic in how you go about doing it. At pMD, we constantly strive to answer these three questions. As a software team we split our time and resources between improving the present world for our users and their patients while also trying to shape the future for our industry. Writing and maintaining software that addresses both needs is a highly complex and risky process. If we build the wrong thing and execute poorly, we not only have wasted precious resources, but we quite possibly have endangered the quality of life for our existing users and the patients they care for. It’s necessary to have gone through several full life cycles of products and features to have a chance at doing the above successfully.
A full product life cycle begins with inception, planning, building, maintaining, and “ends” with continuous evolving of a product. For many products that tackle complex domains like health care, this cycle actually never really ends but provides a continuous stream of feedback that educates and inspires future decisions that may span many years. This “wisdom,” as Carmack calls it, colors the thousands of decisions that must be answered from what to build all the way down to the schema of a database table. It is unfathomable to me that a career that rarely extends beyond the building stage can lead one to the epiphanies needed to educate future work. I am growing optimistic, however, that more and more software developers are rediscovering the value of sticking around to see their work grow and mature. The more we hold ourselves accountable for the long term consequences of what we build, the more value we can add for our users and society.