Building quickly is building dirty

Today, we're diving into the intricacies of the "Ship Fast" philosophy in software development. Let's explore why moving fast isn't always the best approach and how taking the time to build a solid foundation can lead to long-term success.

Building quickly is building dirty

Hi there, Nicolas here! Today, I'd like to share my perspective on the “Ship Fast” philosophy.

“Ship Fast” is a development practice that focuses on building your product as quickly as possible to get it to market early. The goal is to have customers (and thus revenue) as soon as possible. This means concentrating on the features that add the most value during development to get to the essentials.

However, as the title suggests, Tom and I are not big fans of this method. And for good reason, we built Crane It using this method, and we're now regretting it.

A short-term technical solution

In the “Ship Fast” philosophy, the only thing that matters is producing the most essential features of your application. However, there are many other important aspects to consider:

  • Responsiveness: Ensures the application can be used on mobile devices
  • Security: Prevents the application from being a sieve
  • Tests: Make the code more robust and reduce the number of bugs
  • Database: Often the foundation of the application; if poorly structured, the application will be too
  • Code Structure: Avoids duplication and facilitates code evolution
  • Clean Code: Important for maintainability

All these elements take time, but are just as important as the features. It's the combination of all these factors that results in a high-quality product. If you neglect these elements, it will lead to “technical debt.”

"Technical debt" refers to the effort required to bring the software up to date with current knowledge and skills.

The more technical debt you have, the harder it becomes to navigate, debug, improve, and evolve your application.

Technical debt over time using the ship fast method

For us, evolving Crane It has become complex and delicate: no tests to verify that developing a new feature doesn't break an existing one, for example. So the application will evolve very little until the day we decide to completely overhaul the app to better meet our needs.

💩
The more you try to build your application quickly by cutting corners, the more technical debt you'll accumulate in the long run. And the dirtier your application will become.

What philosophy to adopt

The advantage of this philosophy is that it allows you to have a product quickly (even if it's low quality), and thus acquire users early; if only it were that easy. Once you have your application and want to commercialize it, there are still many things to consider:

  • Legal Structure: You can't sell a product if you're not authorized to do so
  • SEO (Search Engine Optimization): Improving it helps you rank better in search engines such as Google
  • Marketing: To convert customers passively
  • Sales: To approach and convert customers
  • Communication: To let your market know you exist

These are all elements to consider when it comes to the success of your project. For Crane It, we didn't have a well-defined and effective commercial strategy, which is why we have very few users today, and that it's not enough to make a living.

Conclusion

From this failure and the difficulties in evolving Crane It, we've learned a few lessons:

Move fast occasionally

Moving fast can help achieve a short-term goal or deadline. But this “rushed” phase should not last a month; it should last a week at most.

Take the time to structure your project

Before building a skyscraper, you lay solid foundations. The idea is to create excellent foundations for the application with a good choice of tech stack and database architecture. Then, you build the floors of this skyscraper (i.e., the features of the application) one by one. Solid foundations will greatly help with future evolutions.

Work clean

Implement measures and best practices to ensure clean code. This makes it easier for everyone to take over each other's code.