Impacter le succès de l'entreprise à travers la définition du système
Table of Contents
- Introduction
- Importance of System Definition Stage
- Identifying the Core Part of the Application
- Building a Business Case for the Core Part
- Adopting a Product Mindset for the Core Part
- Anticipating Future Changes to the Core Part
- Solving Business Problems without Technical Concerns
- Boundary Management for Legacy System Integration
- Creating a Domain Model
- 9.1 Spending Time in the Problem Space
- 9.2 Using a Context Map
- 9.3 Revealing Communication and Workflows
- 9.4 Focusing on the Complex and Interesting Core Part
- 9.5 Engaging Business Specialists
- 9.6 Communicating with Business Specialists
- 9.7 Discoveries within the Model
- 9.8 Implementing the Model in Code
- 9.9 Keeping the Model Simple and Focused
- 9.10 Dividing the Model into Multiple Business Contexts
- 9.11 Emphasizing Learning and Discovery
- 9.12 Updating the Model with New Insights
- 9.13 Dealing with Legacy Systems
Shaping Business Impact with Software: Best Practices during the System Definition Stage
In the world of software development, the success of a project often depends on the ability to identify and focus on the core part of the application. This core part is what sets a company apart from its competition and delivers the value that the business expects. However, determining what exactly constitutes the core part is not always easy. In this article, we will explore the best practices for shaping business impact through software during the system definition stage.
Introduction
The system definition stage is a critical phase in any software development project. It is during this stage that the focus and direction of the project are established. By identifying the core part of the application and building a strong business case around it, software teams can ensure that they deliver the desired impact and value to the business.
Importance of System Definition Stage
Not all parts of the problem space are created equal. Some areas of the application hold more significance and require more attention and investment. By spreading effort and quality equally throughout the entire system, the real impacting areas may lose focus. To prevent this, it is essential to identify and prioritize the core part of the application.
Identifying the Core Part of the Application
Determining the core part of the application is crucial for its success. It requires a deep understanding of why a certain part is critical and cannot be bought off the shelf. Building a business case around the value of the core part helps demonstrate the return on investment (ROI) of the software. It is important to socialize this business case with software sponsors to validate its significance and secure long-term support.
Building a Business Case for the Core Part
If there is no consensus on the business criticality of the identified core part, it is necessary to minimize the features, efforts, and cost of the software. This allows for quick learning and validation of the idea or the possibility of pivoting. By approaching the core part of the application with a product mindset, it receives constant care and attention and evolves better over time.
Adopting a Product Mindset for the Core Part
When software is built with a project approach, little thought is given to code maintenance, architecture considerations, and overall quality. This often leads to challenges and sluggishness when making future changes. By adopting a product mindset for the core part, it ensures ongoing maintenance, architectural considerations, and quality improvement.
Anticipating Future Changes to the Core Part
It is crucial to avoid being attached to the solution and anticipate that the core part will change over time. As the understanding of the problem space develops, new insights may emerge, requiring adjustments to the core. It is essential to leave room for future changes when defining the requirements and concentrate efforts on solving only the business problems at hand, avoiding technical concerns.
Solving Business Problems without Technical Concerns
When solving business problems, it is important to focus solely on the business aspects and avoid mixing technical concerns like security audits or integration with legacy systems. If integration with a poorly designed legacy system is necessary, it is crucial to create a clean boundary to prevent flaws from spreading to new areas of the application.
Boundary Management for Legacy System Integration
Integration with legacy systems presents its own challenges. It is recommended to avoid fixing issues in the legacy codebase during the development process to avoid deviating from the project's goals and wasting time. By separating the core part from legacy systems and managing boundaries effectively, the software can be developed without unnecessary distractions.
Creating a Domain Model
A domain model is a powerful tool for capturing the complex logic and policies in the problem space. It represents the shared understanding between business specialists and technical experts and serves as a bridge between abstract analysis and code implementation. Creating an effective domain model requires following several best practices.
Spending Time in the Problem Space
To create an accurate domain model, it is crucial to spend as much time in the problem space as in the solution space. By refining the problem space iteratively, software teams can uncover the true intent behind stakeholders' vision. This approach avoids wasting time on irrelevant needs and ensures a better solution.
Using a Context Map
Dividing the problem space into various parts and submodels using a context map helps define boundaries and contact points between them. It provides a clear representation of the organizational relationships and technical integration within the application. By revealing issues with communication and workflows, teams can address them effectively.
Revealing Communication and Workflows
Modeling the core part of the application requires a focus on the complex, hard, and interesting aspects that have high expectations from the business. Engaging with business specialists who have a deep understanding of the business and its operations is crucial. Concrete scenarios should be used to build a shared understanding, and the model should be communicated using business terminology to ensure consensus.
Discoveries within the Model
Often, the key to unlocking deep discoveries within the model lies in what the business specialists barely hint at or don't explicitly mention. It is important to bring out all the business logic in the model, ensuring that it is internalized in the mental model of business specialists. By iterating, exploring, and experimenting, teams can uncover new concepts and improve their understanding of the problem space.
Implementing the Model in Code
Translating the domain model into code early and frequently using the business terminology, language, and concepts helps bridge the gap between the model and the actual software implementation. It is essential to keep the model simple and focused, avoiding unnecessary complexity.
Keeping the Model Simple and Focused
As the complexity and size of the model grow, it becomes efficient to divide it into multiple business contexts. This minimizes coupling between contexts and creates clear boundaries, promoting modularity and maintainability. Instead of striving for one perfect model, the focus should be on continuous learning, exploration, and discovery of new concepts within the business space.
Updating the Model with New Insights
To ensure the model aligns with the ever-changing stakeholder behaviors and requirements, it is necessary to update the rules, terminology, and nomenclature. Reflecting new insightful abstractions and simplifying the model improves its effectiveness. By embracing and validating new ideas, teams can drive continuous improvement.
Dealing with Legacy Systems
When working with legacy systems or integrating with them, it is important to avoid getting distracted from the project goals by trying to fix the existing issues in the legacy codebase. This allows teams to stay focused on the actual goal and not waste time on unrelated tasks.
In conclusion, shaping business impact through software requires careful attention to the core part of the application and meticulous modeling of the problem space. By following best practices during the system definition stage, software teams can deliver impactful solutions that drive business success.