We are all perfectionists. We want everything to be perfect before we share it. We are paralyzed by a need for perfection, and it keeps us from getting anything done.
We should be more like the big tech companies. Start with a big idea. Spend a little bit of time getting the basic idea formed. Then, release it. Get feedback on it. Refine it as you go along. Your customers will tell you what’s working and what’s not working. They will show you where the innovative and interesting pieces are, and you can devote more time and energy to that.
This guy uses the metaphor “Ready, Fire, Aim”:
Most people know the phrase like “ready, aim, fire.” You get your gun, you figure out. You make sure it’s in the right spot, and then you fire. But I like to do “ready, fire, aim,” where it’s like I think of what it is I want to do, I put a couple hours… into it. I fire. And then after, I make adjustments.
Let’s set aside the horrific metaphor, and the irresponsibility of firing a weapon indiscriminately with the idea of maybe accidentally hitting the target. If we ever enact common sense firearms legislation, maybe one of the provisions can be that this guy can’t have a gun.
What if I’m doing this as a software designer? Using this philosophy, I write a basic application without spending very much time or thought on it. After all, doing some design and planning seems like actual work, and I don’t have the time or motivation for that. I send my half-baked application out into the world with a ton of marketing hype promising that it does the stuff I thought about but didn’t actually implement. If people start using it, they quickly notice that it sucks, and they tell me. Now, I try to patch some holes and make it a little better so it doesn’t suck so much. I release an update, and I get more feedback, and we keep going through this cycle. The approach is to try to spend as little time and energy as possible, just enough to get people to use it without complaining so much. If there are problems with performance or security, we can just blame those on other hardware or software. If there are features that don’t work, we can just say it’s a project in active development. If there are are bugs or data gets corrupted, it must be a compatibility problem.
The result is software that barely works and has to be constantly updated. We’ll make the end user responsible for that too, and create a culture where people are afraid to not install updates. We’ll write a license agreement that disclaims any liability for the software or any damage it may cause.
I’m tired of being the collateral damage. I’m tired of beta testing everyone’s software. I’m tired of being the bad guy for not installing every update and security patch the minute it’s released. Maybe we should spend a little less trigger-happy time firing, and just a few seconds aiming first.
Video credit: Rob Dial on Youtube.