I have been developing commercial software since my sophomore year of college. I sold my very first commercial software during my sophomore year. Over the last 20 years, I have written software that produces millions of dollars of revenue. Also, I published my very first Web programming book in 1996. And went on to write half a dozen books on technology with large tech publishers. So I have been around the block a few times.
Recently, I wanted to compress all the practical methodologies of avoiding tar-pit in software development to share with software engineers to business owners. I came up with three short single word sentences — Create. Ship. Repeat. Here is why.
Create. Ship. Repeat
This is what I follow. I have tried many prescriptions from highly successful software pundits that include agile development. Following the agile principles to the letter require a certain level of discipline that is very hard to grow if your talent pool is limited.
Often, highly ambitious software developers who are working on cutting-edge startups that are swarming with like-minded genius-level programmers and, most importantly, where they are their own stakeholders, agile is a win! These top-notch developers are already self-managed and can enforce agile on themselves very well.
But if you are working with average to mediocre talent — both developers and stakeholders (clients) — and your work is not earth-shattering or cutting-edge enough, you need to simplify the packaging and learning curb by compressing a lot into things that people — developers and stakeholders — can understand. This is where my CREATE-SHIP-REPEAT mantra works.
What to Create?
Create only what is worthy of creating for your intended audience. We have “requests” for many features from “the field,” but we learned to realize that “the talking heads” of the field have hardly any insights into what the users really want. The “field managers” of our software wish to look good with shiny new features. When the real users hardly care about any shiny features. They want a clutter-free workflow that gets their job done in front of a screen and move them back to their real-world work and family.
So to teach our stakeholders how to ask for what to create, we employ a simple rule. Add a feature tick counter into a feature. Let the feature go live and track how many users have touched that feature in a 90-day window. By showing them the actual (lack of) usage of a feature over some time, we can convince the stakeholders that inventing new features for the purpose of inventing features or fuel by “marketing refresh” needs is a sure-fire way to waste time and financial resources.
This process of teaching the stakeholders to ask for only the truly needed feature takes time. Another way to avoid creating worthless things is to ask the stakeholder — often the marketing team — to provide a business case for it. If the business case can be vetted as profitable, the feature gets created.
When to Ship?
One of the buzz mantras is to ship early, ship often. I think this one has merit for software that does not need to be audited for security or mission-critical certifications. Software for medical, military, life-critical environments should not ship early or often.
Just remind your stakeholder — boss — that Boeing is still paying for the software mistake of 737 Max.
If you are going to ship early and often — which is great for Web applications — you can segment your audience by tolerance or business risk. For example, I know Facebook does not ship every feature to everyone at the same time. If I were running the Facebook deployment team, I would segment a new feature to the lowest risky user group and ship it. Once I see how they behave with the new feature, I will have a rolling release for the rest of the userbase. No need to get everyone mad at you and ruin your team’s weekends!
That’s it. Repeat the Create, Ship process as you see fit and grow your software to a more massive userbase and be profitable.
My Algorithm of Life
Create. Ship. Repeat — has become my algorithm of life.
I use it for software development, writing online, helping my kids learn new things, and many more areas of my life.
So many people get stuck in the “create” phase because they seek perfection or the best idea or the best opportunity. Find a reasonable idea, opportunity, and go for it — create. Then don’t get hung up on the perfection — get a reasonable, usable, readable something — ship. Repeat the entire process for the same or another artifact of life. Enjoy!