De-risking software delivery
How to accelerate the process of making products people love?
If you are a self-made entrepreneur, like myself, you’ve most likely asked yourself this, almost existential question:
Why is so hard to deliver excellent quality software?
If you are not, and want to become a self-made entrepreneur, you will ask yourself that question on some point.
Much changed in the app development since I started messing with software (12 years ago 😱), but unfortunately, the bottom line remains as it was.
The bottom line
- Software development is complex and hard to get into.
- Software development is mostly driven by manual code writing.
- New tools in both software development and design, focus on solving outdated problems.
- Meanwhile, the most significant power factor, the collaboration, is reduced to hand-off processes, board systems, and Slack-like communicators — which separate or together are not enough.
Risk rules all games.
Having great ideas is not enough these days. It never was.
Everyone knows that execution is the key to success.
Lack of successful execution is the most common reason of failure for over 70% of startups regardless of the funding size.
92% of all startups fail in the first three years of operation.
Say, you have an idea. Yes, you do! It’s a great one too. Congrats 🎉
Say, you are a specialist. You know what you’re doing. You start with a delivery plan to get some sense of the challenges ahead. Well done 👏
You form your plan around main costs and known risks. Your plan makes sense. It looks amazing. And you do nothing about it. Why? 🤔
You decide not to try and pursue your plan because you don’t know if it’s even worth it? The road is hard, long, full of obstacles, and expensive.
Heck! Let’s say you are the adventurous type and despite the well-known challenges and market ambiguity, you go ahead with your plan.
You get the funding; you get the team, you start the execution phase.
There are thousands, if not millions, of important questions and decisions ahead starting with:
- What frameworks and languages do you use on the front-end and the back-end?
- What is your system architecture? Monolith or micro-services?
- What solution do you use to host what you build?
- What are the tools you get for design, prototyping, testing, monitoring, collaboration?
- What are the processes you want to follow?
We could achieve amazing things if only the act of trying weren’t so hard and expensive.
When you face your new team with these questions, everyone will have an opinion and everyone will be an expert. Most people will choose what they know over a new approach that will require them to change. So, who do you listen to?
Successful software delivery = requires lots of work and skills in setting the right expectations + It’s risky and surprising most of the time + Costs lots of money.
Those are the facts. They make you bitter for a sec, and then you ask, what about all the innovative frameworks, tools, and management processes?
Prototyping got way better with tools like InVision or FramerX, but it’s still only prototyping, you can not ship a prototype and generate sustainable profit. Additionally, it takes a considerable amount of money to go through the discovery/design process even to look for product-market fit.
Doing prototyping, design, specifications first is less risky than throwing yourself into writing code first, but the discovery and design still need specialists, take time, and come at a steep price.
Project management tools have some great features to offer. Still, most are based on a scrum/kanban ticketing process which turns the creation of solutions into task factories with challenges like cognitive biases, narrow problem vision, “output” over “outcome” focus, and many more.
With rapidly changing markets and customer expectations by the time you deliver what you planned, the customer’s need might not be there anymore at the rate you expected.
New frameworks like React (for the front-end) or Hasura (for the database and events) are great, but it’s hard and expensive to find competent specialists. You can try and learn them yourself, but it will take you months or years to be able to get up to speed and build a valuable product.
The biggest challenge in development is the lack of simple debugging tools. It’s hard to tell where’s the problem and requires lot’s of expertise to figure out how to solve it.
There also tools like Supernova, BuilderX, Webflow and a bunch of other in beta testing. Those tools will help you import designs made in Sketch and automatically turn them to code, but you still have to make the flow, manage the state, connect the data, create services (like authentication), write the queries, define where and how you will host your app.
It’s simply hard to make quality software.
Those are the facts in software development. Similar challenges existed in manufacturing until the arrival of a new tool, a 3D printer.
3D printers democratised manufacturing — what can we learn from that transformation?
To reduce risks and costs of software delivery, we need to simplify development and system architecture.
In manufacturing, 3D printers replaced expensive and complicated production lines with a single box and a button “Start printing”.
Simplification enables fast learning and cross-functional contributions.
We need to start eliminating manual work in favour of automation.
In manufacturing, slicing software takes care of model setup automatically replacing the need for hiring industry experts.
Automation enables consistency, saves time, and reduces the cost of change.
We need to make smart tools on top of the simplified abstractions and highly specialised automation.
In a resin-based 3D printing, curing machine is a small desktop tool that applies UV light and washing after printing the model.
Smart tools reduce the management effort and enable machines to do the work.
We need to use time in a smarter, more conceptual and collaborative way to accelerate the creation of new ideas and product improvements.
In the 3D printing world, people exchange machine settings, knowledge, hacks and tricks, help each other build the next best thing.
Collaborative environments enable everyone to contribute to the final product, cross functions and accelerate learning from each other.
Let’s imagine a new bottom line
😳 😜 😬 😁 😎 🤩 🤗 🤑
- Development is easy to learn where simple things are simple, and complex things are still possible.
- Highly specialised automated compilers and transpilers improve code consistency and shift the work focus from writing code to trying, testing, and thinking about the best solutions.
- Everyone contributes to the final product. Designers design as they build. Engineers solve important challenges. Business tests products continuously with real users.
- Change is fast because smart tools push productivity to the limits.
- The full team takes pride in their contributions and is fully committed to the common goals.
We need to get better at getting better. And soon!
Development, design, and product delivery need a more significant transformation than yet another interface library or design system tool.
We don’t need that for us, the makers, or for the investors, we promise the results. We need to change for our customers, the users who will love us for a well-built solution.
The impact we make is the ultimate goal of the software delivery game!