Software Development Model for Product feature delivery
Based on the Agile principles, it is designed to be used by software development teams to deliver Product Features in an efficient manner. Rooted in collaboration, adaptability, and customer feedback, it emphasizes iterative development cycles, typically lasting 2-4 weeks.
Focus areas
Domain Experts and Software Engineers work closely together around 5 key focus areas to deliver incremental value with each iteration. Each focus area is modelled as one C4 container.
This iterative cycle fosters a responsive and customer-centric development environment, where product features are delivered efficiently, meeting evolving user needs and market demands.
Components
Individual Components within each focus area help the Team work in small steps to achieve their high level goals.
Continuous Integration and Continuous Delivery (CI/CD) practices ensure that new features are regularly integrated into the Product, allowing for swift feedback and adaptation.
Through frequent retrospectives, teams reflect on their process, identifying areas for improvement and adjusting their approach accordingly.
<size:24>All components and relationships</size> <size:24>Every component across all focus areas</size>
All components and relationships Every component across all focus areas
Software Development Model for Product feature delivery [system]
Software Architecture and Domain-Driven Design [container]
Extreme Programming [container]
Lean Product Development [container]
Align and Understand Product Requirements [container]
Behavior-Driven Development [container]
Strategic Architecture [Core Domain Charts, Context Maps, etc] Decompose a large problem domain into cohesive modules, so that we can identify strategically significant parts of the domain
Software Design [Bounded Context Canvas, Aggregate Design Canvas, C4 model, etc] Document Bounded Contexts, from naming to responsibilities alongside its public interface and dependencies
Code the Domain Model [Services, Repositories, Events, etc] Code the Domain Model applying Tactical Patterns - a set of building blocks to structure the implementation of the model
Pair Programming [Ensemble, Mob Programming] Developers work together in pairs and as a group, reviewing the code in real-time and improving the design continuously
Test-Driven Development [JUnit, etc] Lower-level examples of the behavior of internal system components
Continuous Integration [Jenkins, Github Actions, etc] Automated build scripts are used to run tests and provide immediate feedback to developers about the status of their code changes
Informative Workspaces [Scrum and Kanban boards, DORA/SAFE metrics etc] Project progress and potential issues are visible to all team members with informative workspaces
Short Iterations [one to two week development cycles] Short development cycles deliver incremental value and enable continuous learning about the product
Knowledge Base [Google Drive, Confluence, Javadoc] Centralized repository of information and best practices that the team can refer to for guidance, problem-solving, and knowledge sharing
Customer Feedback [customer satisfaction surveys, gather customer insights, etc] Continuously collect customer feedback and use it to refine and enhance the design of products and features
Product Brief [Opportunity Canvas, Slideck, etc] Short product or feature brief to frame and constrain the project
Domain Discovery [User Story Map, Event Storming, etc] Map the Big Picture by describing the User journey through the Product telling a story from the perspective of the end user
Product Backlog [Jira, Trello, etc] Prioritised list of User Stories that need to be completed or addressed during the project
Specification Workshop [Example Mapping] Concrete rules and examples help us explore the problem domain to clarify and confirm the acceptance criteria
Features [Gherkin] Group of related scenarios that demostrates how a feature works
Acceptance Tests [Cucumber] Executable specifications that verify the behavior of the system against its requirements
Domain Expert Product Team member who owns and drives the product vision
Software Engineer Development Team member delivering high-quality software efficiently and iteratively
presents Product Feature
obtains domain knowledge
spread domain knowledge
creates
collaborative requirement specification
problem decomposition
formulate
automate
guides code implementation
collaborative modelling
apply tactical patterns
guides code implementation
write just enough code
push code to version control
deliver product increment
visualize progress on
updates
gathers
Components
<size:24>All components and relationships</size> <size:24>Every component across all focus areas</size>
All components and relationships Every component across all focus areas
Software Development Model for Product feature delivery [system]
Software Architecture and Domain-Driven Design [container]
Extreme Programming [container]
Lean Product Development [container]
Align and Understand Product Requirements [container]
Behavior-Driven Development [container]
Strategic Architecture [Core Domain Charts, Context Maps, etc] Decompose a large problem domain into cohesive modules, so that we can identify strategically significant parts of the domain
Software Design [Bounded Context Canvas, Aggregate Design Canvas, C4 model, etc] Document Bounded Contexts, from naming to responsibilities alongside its public interface and dependencies
Code the Domain Model [Services, Repositories, Events, etc] Code the Domain Model applying Tactical Patterns - a set of building blocks to structure the implementation of the model
Pair Programming [Ensemble, Mob Programming] Developers work together in pairs and as a group, reviewing the code in real-time and improving the design continuously
Test-Driven Development [JUnit, etc] Lower-level examples of the behavior of internal system components
Continuous Integration [Jenkins, Github Actions, etc] Automated build scripts are used to run tests and provide immediate feedback to developers about the status of their code changes
Informative Workspaces [Scrum and Kanban boards, DORA/SAFE metrics etc] Project progress and potential issues are visible to all team members with informative workspaces
Short Iterations [one to two week development cycles] Short development cycles deliver incremental value and enable continuous learning about the product
Knowledge Base [Google Drive, Confluence, Javadoc] Centralized repository of information and best practices that the team can refer to for guidance, problem-solving, and knowledge sharing
Customer Feedback [customer satisfaction surveys, gather customer insights, etc] Continuously collect customer feedback and use it to refine and enhance the design of products and features
Product Brief [Opportunity Canvas, Slideck, etc] Short product or feature brief to frame and constrain the project
Domain Discovery [User Story Map, Event Storming, etc] Map the Big Picture by describing the User journey through the Product telling a story from the perspective of the end user
Product Backlog [Jira, Trello, etc] Prioritised list of User Stories that need to be completed or addressed during the project
Specification Workshop [Example Mapping] Concrete rules and examples help us explore the problem domain to clarify and confirm the acceptance criteria
Features [Gherkin] Group of related scenarios that demostrates how a feature works
Acceptance Tests [Cucumber] Executable specifications that verify the behavior of the system against its requirements
Domain Expert Product Team member who owns and drives the product vision
Software Engineer Development Team member delivering high-quality software efficiently and iteratively
presents Product Feature
obtains domain knowledge
spread domain knowledge
creates
collaborative requirement specification
problem decomposition
formulate
automate
guides code implementation
collaborative modelling
apply tactical patterns
guides code implementation
write just enough code
push code to version control
deliver product increment
visualize progress on
updates
gathers
Components [
svg |
png |
puml ]