Building on, [[A Breakdown, a Checklist and a Map to your Product]].
%%
The idea is to leverage Git versioning system in structuring the way we build our product.
I intend exploit Git in two ways that answer development needs.
1. Maintaining a template hierarchy.
2. Structuring product development.
%%
Our formula is that, products are constructed by deviation and adjustment from an appropriate [[Better Solution Building using a Template Tree|template]]. We use a template as a starting point for our main branch. Then proceed to add features and patch issues via branching out of the main development line then merging back.
![[A Wave Approach to Product Construction 2024-04-28 12.44.29.excalidraw|1000]]
This approach of diverging from the main line then converging back looks like a breathing pattern.
What is the difference between an iss(ue) arc and a feat(ure) arc? It seems to me that I can make them obey the same moment.
A feat(ure) arc has three moments, (1) test writing, (2) implementation and (3) test passing. These moments are synchronous to (1) branching out `git branch <name> && git checkout <branch>`[^1] , (2) a series of commits and (3) merging back `git checkout main && git merge <name>`[^2]. By identification, a necessary condition for merging back is to pass all tests.
[^1]: The `checkout` sub-command is used to position yourself within the repo's branches.
[^2]: To avoid merge conflicts, we do a "pull" merge, `git checkout <name> && git merge <main>`, to make sure we are up-to-date locally, then a "push" merge from our branch back to main.