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.