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.

<size:24>System Context View: Software Development Model for Product feature delivery</size> <size:24>The system context diagram for the Software Development Process</size> System Context View: Software Development Model for Product feature deliveryThe system context diagram for the Software Development Process Domain Expert Product Team member whoowns and drives theproduct vision Software Engineer Development Teammember deliveringhigh-quality softwareefficiently and iteratively SoftwareDevelopment Modelfor Product featuredelivery Dynamic and iterativeapproach to deliveringproduct features in a rapidand flexible manner contributes to follows
Context

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.

<size:24>Container View: Software Development Model for Product feature delivery</size> Container View: Software Development Model for Product feature delivery Software Development Model for Product feature delivery[system] Software Architectureand Domain-DrivenDesign[DDD] Explore models in a creativecollaboration of domainexperts and softwareengineers ExtremeProgramming[XP] Developers work together inpairs and as a group,improving the designcontinually to keep italways just right for thecurrent needs Lean ProductDevelopment[Lean] Projects are broken downinto two-week iterationswhich result in a potentiallyshippable productincrement Align and UnderstandProductRequirements[Align & Understand] Align our focus with theorganisation's businessmodel, the needs of itsusers, and its short,medium, and long-termgoals Behavior-DrivenDevelopment[BDD] Define and understand thedesired system behaviorbefore writting any code. Itencourages collaborationand a shared understandingof the project's objectives Domain Expert Product Team member whoowns and drives theproduct vision Software Engineer Development Teammember deliveringhigh-quality softwareefficiently and iteratively presents ProductFeature obtains domainknowledge collaborative domainmodelling creates sharedunderstanding collaborativerequirementspecification guides codeimplementation deliver productincrement
Containers

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 relationshipsEvery 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] StrategicArchitecture[Core Domain Charts, ContextMaps, etc] Decompose a large problemdomain into cohesivemodules, so that we canidentify strategicallysignificant parts of thedomain Software Design[Bounded Context Canvas,Aggregate Design Canvas, C4model, etc] Document BoundedContexts, from naming toresponsibilities alongside itspublic interface anddependencies Code the DomainModel[Services, Repositories, Events,etc] Code the Domain Modelapplying Tactical Patterns -a set of building blocks tostructure theimplementation of themodel Pair Programming[Ensemble, Mob Programming] Developers work together inpairs and as a group,reviewing the code inreal-time and improving thedesign continuously Test-DrivenDevelopment[JUnit, etc] Lower-level examples of thebehavior of internal systemcomponents ContinuousIntegration[Jenkins, Github Actions, etc] Automated build scripts areused to run tests andprovide immediatefeedback to developersabout the status of theircode changes InformativeWorkspaces[Scrum and Kanban boards,DORA/SAFE metrics etc] Project progress andpotential issues are visibleto all team members withinformative workspaces Short Iterations[one to two week developmentcycles] Short development cyclesdeliver incremental valueand enable continuouslearning about the product Knowledge Base[Google Drive, Confluence,Javadoc] Centralized repository ofinformation and bestpractices that the team canrefer to for guidance,problem-solving, andknowledge sharing Customer Feedback[customer satisfaction surveys,gather customer insights, etc] Continuously collectcustomer feedback and useit to refine and enhance thedesign of products andfeatures Product Brief[Opportunity Canvas, Slideck,etc] Short product or featurebrief to frame and constrainthe project Domain Discovery[User Story Map, EventStorming, etc] Map the Big Picture bydescribing the User journeythrough the Product tellinga story from the perspectiveof the end user Product Backlog[Jira, Trello, etc] Prioritised list of UserStories that need to becompleted or addressedduring the project SpecificationWorkshop[Example Mapping] Concrete rules andexamples help us explorethe problem domain toclarify and confirm theacceptance criteria Features[Gherkin] Group of related scenariosthat demostrates how afeature works Acceptance Tests[Cucumber] Executable specificationsthat verify the behavior ofthe system against itsrequirements Domain Expert Product Team member whoowns and drives theproduct vision Software Engineer Development Teammember deliveringhigh-quality softwareefficiently and iteratively presents ProductFeature obtains domainknowledge spread domainknowledge creates collaborativerequirementspecification problemdecomposition formulate automate guides codeimplementation collaborativemodelling apply tacticalpatterns guides codeimplementation write just enoughcode push code to versioncontrol deliver productincrement visualize progress on updates gathers
Components