Imagine you're a residential construction company, and the government approaches you with a project to build a neighbourhood. You receive the architect's plans; all you have to do is build. Looking at the plans, you notice issues here and there in the product. However, when it comes to sharing these concerns, you find it difficult for the architect to answer your questions. Sometimes, you go with your intuition and do what makes sense most.
As a result of this problematic communication, construction of the residences was delayed to the point of causing a 30% increase in costs! Nevertheless, the project is finally delivered, and residents can take possession of their homes. At this point, customers start complaining: "It's not what I wanted!", "It doesn't meet my needs!", "It's not what was presented to me with the plans!"...
This example highlights the limitations of a rigid project development approach, similar to the Waterfall methodology in software development. In the waterfall model, each project stage must be completed and approved before moving on to the next, meaning the initial plan is often considered immutable. Suppose problems arise or you need to make adjustments along the way. In that case, this can lead to delays and additional costs, as in the case of construction, where communication problems with the architect led to decisions based on intuition rather than clear guidelines.
Similarly, once you define requirements and begin waterfall software development, it is difficult to go back and make changes without incurring significant costs and delays. This can lead to a situation where, at the end of the project, the delivered product doesn't match users' expectations or current needs, just as residents of the new neighbourhood complained that the houses built didn't match what they'd been promised. This approach tends to sideline a crucial player in the development process: the user!
The end-user is often relegated to the background, treated as an afterthought rather than a central element in the design process. This approach can lead to products that meet technical specifications but fail to satisfy real, evolving user needs. To avoid this pitfall, which can prove fatal to a product's success or even a company's survival, it's crucial to maintain constant proximity with the customer throughout the development cycle.
By actively involving the customer, gathering feedback, and adapting the product accordingly, the development team can ensure that the product developed is truly aligned with the expectations and requirements of those who use it daily.
To successfully complete a project, collaboration between all stakeholders is essential. Effective, regular communication between the development team, product owners, testers and designers is the cornerstone of a successful team. In his presentation, Async Code Reviews Are Killing Your Company's Throughput, Dragan Stepanović highlights the drawbacks of asynchronous code reviews, which can hamper productivity and team dynamics. Teams can strengthen cohesion and responsiveness by favouring real-time interactions like pair programming or tandem code reviews. These direct collaboration practices not only promote better product quality thanks to immediate feedback but also help create a more engaged and satisfying working environment for all team members.
Last November, at the Agile Tour Montréal, I attended a conference by Félix-Antoine Bourbonnais entitled "Designed in Quebec, made in Germany: programming is design." He stressed the importance of two fundamental stages in product development, whether physical or software: design and manufacturing.
The main difference between design and manufacturing lies in their roles in product development. Design is a deeply human and creative stage, where designers have the freedom to explore, innovate, and give free rein to their imagination. It's an iterative and often non-linear process where ideas are generated, tested, and refined. This phase is essential for defining the essence and functionality of the product, taking into account users' needs and desires.
Conversely, manufacturing is a mechanized and precise stage dominated by automated machines and processes. It requires great rigour and follows detailed specifications to guarantee the quality and conformity of the final product. Manufacturing is characterized by repeatability and efficiency, aiming to mass-produce identical items with a minimum margin of error.
We can compare design to the programming phase, where the development team uses its creativity and technical expertise to write code and create innovative software. This stage is flexible and allows great freedom in solving problems and implementing new ideas. The end-user must be part of the design stage in IT, as they are the ones who interact with the software daily. Involving the end-user ensures that the functionalities developed precisely meet their needs and enhance their experience, as well as avoiding design errors that could undermine the product's effectiveness or adoption.
Conversely, manufacturing is similar to the compilation process, where developers transform the source code into a machine-executable program. Compilation is a systematic, automated process that follows strict rules to ensure the software works correctly with the target hardware. With this in mind, adopting techniques such as automatic or continuous deployment encourages developers to automate the manufacturing phase further. These approaches facilitate the implementation of automated integration and delivery chains that enable smoother, more regular production releases and standardized deployment processes. This limits human error, improves the consistency of production environments and accelerates the software development lifecycle, ensuring more robust and reliable software manufacturing.
The essence of software development lies in its ability to combine technicality and humanity. Customer satisfaction must be at the heart of every stage, from design, where imagination and innovation come to life, to manufacturing, where precision and automation ensure quality and reliability. Close collaboration between all stakeholders and the active involvement of the end-user are pillars for creating sustainable, relevant software. With an agile approach and seamless communication, we can avoid the pitfalls of misunderstandings and unmet expectations. This enables us to deliver software products that truly reflect the needs and aspirations of those for whom they are intended.