Build for today not for tomorrow


The more you know, the worse off you are for shipping a successful product. Here is why.

You don’t get it

One day, a professor gave the class the assignment to write a program that produces the following output:

  1
 1 2
3 5 8

One of the students came up with the following code:

console.log('  1');
console.log(' 1 2');
console.log('3 5 8');

He got sacked for not getting it and proposing the wrong solution. How come?! The program did exactly what the professor asked for! It was exactly the right solution to the right problem!

What if…

When we write code, we have a problem in mind that the code should be solving. Printing a set of characters, copying files, automating some work, whatever. But then as we code, something happens.

What if… What if users want to print not 3 but 10 rows? What if they want to reverse-sort the numbers? What if they want to show only the first x numbers? What if they want to run the code on IE11? You start asking yourself all kinds of what ifs.

The more experienced you are, the more what ifs you will come up with. You will be thinking about everything: scale, performance, plugins, reports, marketplace, deployment, cloud - literally everything. You will be imagining all kinds of things that you feel like your code should do right now.

And so you will keep postponing shipping your product, adding your assumptions into the product. Stuff, that no one ever said they needed. Hello, scope creep. Your product will never be ready because around every corner there lurks yet another what if that you feel like you must support, right now. Your 110% solution will never see the daylight.

Do you need it, now?

There is a difference between what your product must do and what you need to take into account.

Sure, your product should work at scale. But do you need to do it now when you have 0 customers actually using your product?

Sure, it should handle 2GB large files. But will anyone actually work with such big files?

Sure, your customers should be able to acquire your product via the marketplace and install it wherever they want. But do you need it right now where you haven’t even proven that anyone even cares and is willing to pay for it?

Sure, the 5 folks who still use IE11 should be able to use your product as well. But do you need to support them right now?

And is the effort to do all these things even worth it?

Ship it

When the first iPhone was shipped, it couldn’t even copy & paste. Couldn’t copy & paste! How ridiculous is that?! And yet it was shipped and incrementally improved. You could argue that copy & paste is a core feature and that a phone should never be shipped without it. But it was shipped anyway, and it became a success.

Shipping a product early is necessary. You don’t have unlimited resources and funds. Whatever limited time you have, you can spend only once. So you better spend it on stuff that’s really important. So, what’s important you ask?

Until you ship your product to people, it’s all your imagination. It’s all your assumptions. Nothing more. And you need to validate them because you are not your users. And boy you will find out how many of your assumptions were plain wrong. And that’s okay, that’s just a part of the process.

The 110% solution

When looking at your product, people will tell you that it would be cool if it could print not only numbers but also letters. And would be cool if they could pick the letter. Oh, emojis too. Emojis are cool. And it would be cool if it could show the chart of 5 most used characters when ran in random mode, in 3D with VR of course. Does it mean you have to build it? Maybe. Do you need to build it now? Absolutely not!

So in the end, what ifs don’t help you. And just because someone said something would be cool or useful or whatever, doesn’t make it a feature. On the contrary, all it does is delaying shipping your product and getting user feedback. Your product will never be finished and there will always be stuff to add. But if you keep delaying shipping the product, you will run out of resources before your 110% solution even sees the daylight.

Stop building, start shipping

Delaying shipping your product to your customer is your biggest enemy and it stands in the way of your success. The more you build before validating with people, the more you will need to throw out and change to ship what they really need. The more you build, the less time you will have to adjust. The more you build, the more emotionally attached you will be to your assumptions preventing you from being objective, because all that time was spent anyway and it would be a waste to throw it all away.

Yes, you should think about scale, and performance, and supporting 10 million users, and emojis, oh and IE11 too. But think about it tomorrow. Meanwhile, build based on what you know, today. Because whatever might happen tomorrow, it might also not happen and you end up wasting a lot of time.

Photo by Raul Barrios on Unsplash

Others found also helpful: