flowchart TB
Aim([Purpose and need<br>for software]) --> DDDesign([Domain-driven design])
DDDesign --> Design>"Explanation docs<br>(for design)"]
DDDesign --> DDDev
DDDev([Documentation-driven<br>development]) --> Guide>How-to guides]
Guide <--> Test
Guide <--> Develop[Develop<br>implementation]
Design --> Test([Test-driven development])
Test <--> Develop
Develop --> CodeDocs>"Reference docs<br>(for code)"]
Develop --> Tutorials>Tutorials]
Guide --> Tutorials
Guide & Develop <--> Examples[Example real<br>world usage]
1 Software development
This guidebook is written following the diátaxis “how-to guide” style. And because this document reflects how we work in the Seedcase Project, it is living and constantly evolving. It won’t ever be in a state of “done”.
This chapter describes an approach to developing software that we’ve found to be effective at helping us build higher-quality, more reliable, and maintainable software products that get built faster and have less issues over time. It combines and mixes several development methods and best practices, starting from a high-level by following an iterative and incremental development approach with aspects of Kanban for project planning and management, including regular update and reflection meetings (called retrospectives). Within a given product, the workflow includes:
- Continuous integration (that includes automated testing and checking) through trunk-based development (with short-lived branches following the GitHub Flow)
- Continuous delivery/deployment
- Test-driven development
- Domain-driven design
- Documentation-driven development (using Diataxis framework to structure the documentation)
These practices and workflows are also described in many software development books and resources, such as:
So, how do you integrate all of these together when developing software? That’s what this section is all about! 🎉
1.1 Visual overview
The following diagram gives a visual overview of the stages of development and how they connect. We’ll cover each part in more detail in the following sections.
Underlying all of this is an iterative and incremental development approach (described in more detail in Chapter 3), continuously integrating the changes, and continuously deploying the software and associated documentation (as a website).