Skip to content

Commit 5e1676d

Browse files
committed
docs: clarify further paragrafs
1 parent 19d2bd1 commit 5e1676d

File tree

4 files changed

+65
-40
lines changed

4 files changed

+65
-40
lines changed

ARCHITECTURE.md

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ This design document shall be stable and amendments go through a proper process
1010

1111
## Overview
1212

13-
Standard is a collection of functionality and best practices (_"framework"_) to bootstrap and sustain the automatable sections of the Software Delivery Lifecycle (SDLC) _efficiently_ with the power of Nix and Flakes.
13+
Standard is a collection of functionality and best practices (_"framework"_) to bootstrap and sustain the automatable sections of the Software Development Lifecycle (SDLC) _efficiently_ with the power of Nix and Flakes.
1414
In particular, Standard is a _Horizontal\* Integration Framework_ which integrates _vertical\*_ tooling.
1515

1616
> <sub>We occasionally adapt concepts from non-technical contexts. This is one instance.</sub>
@@ -22,14 +22,14 @@ In particular, Standard is a _Horizontal\* Integration Framework_ which integrat
2222
What is being integrated are the end-to-end automatable sections of the SDLC.
2323
For these we curate a collection of functionality, tools and best practices.
2424

25-
An SDLCs _efficiency_ on the is characterized by two things.
25+
An SDLCs _efficiency_ is characterized by two things.
2626

2727
Firstly, by adequate _lead time_ which is the amount of time it takes to set up an initial version of the software delivery pipeline.
2828
It needs to be _adequate_ rather than _just fast_, as it takes place in the context of a team.
2929
Rather than for speed, they need optimization for success.
3030
For example, a process needs to be documented & explained and your team needs to be trained on it.
3131
Standard encourages incremental adoption in order to leave enough space for these paramount activities.
32-
If you're in a hurry and your team is onboard, though, you still can jumpstart the implementation.
32+
If you're in a hurry and your team is onboard, though, you still can jumpstart its adoption.
3333

3434
Secondly, efficient SDLCs are characterized by short _cycle times_ which is the amount of time it takes for a designed feature to be shipped to production.
3535
Along this journey, we encounter our scope (more on it below):
@@ -50,16 +50,17 @@ Additionally, unlike similar projects, we harness the power of Nix & Flakes to e
5050
- _Complete_: Standard should cover the important use cases for setting up and running the automatable sections of the SDLC.
5151
- _Optimized_: Standard should optimize both for the needs of the individual developers and the market success of the product.
5252
- _Integrated_: Standard should provide the user with a satisfying integration experience across a well-curated assortment of tools and functionality.
53+
- _Extensible_: Standard should account for the need to seamlessly modify, swap or extend its functionality when necessary.
5354

54-
Please defer to the [sales pitch](./PITCH.md), if you need more excitement.
55+
Please defer to the [sales pitch](./PITCH.md), if you need more context.
5556

5657
## Ideals
5758

5859
While we aim to improve the SDLC by applying Nix and its ecoysystem's ingenuity to the problem, we also want to build bridges.
5960
In order to bring the powers of store based reproducible packaging to colleagues and friends, we need to maneuver around the ecosystem's pitfalls:
6061

6162
- _Use nix only where it is best suited_ &mdash; a Nix maximalist approach may be an innate condition to some of us, but to build bridges we deeply recognize and value other perspectives and don't dismiss them as ignorance.
62-
- _Disrupt where disruption is necessary_ &mdash; the Nix ecosystem has a fairly rigid set of principles and norms that we don't think always apply in our use cases.
63+
- _Disrupt where disruption is necessary_ &mdash; the Nix ecosystem has a fairly rigid set of principles and norms that we don't think always apply in every use case.
6364
- _Look left, right, above and beyond_ &mdash; our end-to-end perspective commands us to actively seek and reach out to other projects and ecosystems to compose our value chain; there's no place for the "not invented here"-syndrome.
6465

6566
## Scope
@@ -85,9 +86,9 @@ And we focus on:
8586

8687
## Architecture
8788

88-
### Overview
89+
With clarity about Standard's general scope and direction, let's procede to get an overview over its architecture.
8990

90-
#### Locating Standard in the SDLC
91+
### Locating Standard in the SDLC
9192

9293
Where is Standard located in the big picture?
9394

@@ -108,7 +109,7 @@ Therefore, we make a distinction between:
108109
109110
<div align="center"><img src="./artwork/sdlc.svg" width="900" /></div>
110111

111-
#### Standard's Components and their Value Contribution
112+
### Standard's Components and their Value Contribution
112113

113114
What is Standard made of? And how do its components contribute value?
114115

@@ -122,7 +123,7 @@ They are abstract definitions of artifact classes.
122123
Those abstract classes implement _shared functionality_.
123124

124125
A few examples of artifact classes in our scope are: packages, containers, scripts and manifests, among others.
125-
Examples of shared functionality are _push_ on containers and _build_ on packages.
126+
Examples of shared functionality are (a shared implementation of) _push_ on containers and (a shared implementation of) _build_ on packages.
126127

127128
_**Cells**_, in turn, organize your code into related units of functionality.
128129
Hence, Cells are a code _orgnization principle_.
@@ -132,7 +133,7 @@ On top of Paisano's abstractions, Standard implements within its scope:
132133
- a collection of Block Types; and
133134
- a collection of library functionality organized in Cells.
134135

135-
On the right side of the graphic, we sketch an idea how these components are put into service for the SDLC.
136+
On the right side of the graphic, we sketch an idea of how these components are put into service for the SDLC.
136137

137138
<div align="center"><img src="./artwork/components.svg" width="900" /></div>
138139

@@ -161,27 +162,27 @@ And so can CI.
161162

162163
In fact, this is an innovation in the SDLC space:
163164
We can devise an implementation of a CI which, by querying Paisano's Registry, autonomously discovers all work that needs to be done.
164-
Indeed, we made a reference implementation for GitHub Actions over at [`divnix/std-action`](https://github.com/divnix/paisano).
165+
In order to demonstrate the value of this proposition, we made a reference implementation for GitHub Actions over at [`divnix/std-action`](https://github.com/divnix/paisano).
165166
To our knowledge, this is the first and only "zero config" CI implementation based on the principles of artifact typing and code organization.
166-
By using these principles rather than a rigid opinionated structure, it also remains highly flexible and adapts well to the user's preferences.
167+
By using these principles rather than a rigid opinionated structure, it also remains highly flexible and adapts well to the user's preferences & needs.
167168

168169
In summary, all these organization and typing principles enable:
169170

170-
- Easy refactoring of your repository's devops namespace
171-
- Intuitive grouping of functionality that encourages well-defined internal boundaries
172-
- Allowing for keeping your automation code clean and maintainable
173-
- Making use of Block Types and the shared library to implement the DRY principle
174-
- Reasoning about the content of your repo through structured data
175-
- Thereby interesting user interfaces, such as a CLI, TUI or even a UI
176-
- As well as also services like a (close to) zero config, self-updating CI
177-
- Similar organizational principles help to lower the cost of context switching between different projects
171+
- easy refactoring of your repository's devops namespace;
172+
- intuitive grouping of functionality that encourages well-defined internal boundaries,
173+
- allowing for keeping your automation code clean and maintainable;
174+
- making use of Block Types and the shared library to implement the DRY principle;
175+
- reasoning about the content of your repo through structured data,
176+
- and, thereby, facilitate interesting user interfaces, such as a CLI, TUI or even a UI,
177+
- as well as services like a (close to) zero config, self-updating CI;
178+
- similar organizational principles help to lower the cost of context switching between different projects.
178179

179180
### Standard's Block Types (DevOps Type System)
180181

181182
As mentioned above, Standard exploits the Block Type abstraction to provide artifact types for the SDLC.
182183
Within the semantics of each Block Type, we implement shared functionality.
183184
This is designed to offer the user an optimized, audited implementation.
184-
Alleviates the burdon of devising "yet another" local implementation of otherwise well-understood generic functionality, such as, the building of a package or the pushing of a container image.
185+
Alleviates the burden of devising "yet another" local implementation of otherwise well-understood generic functionality, such as, the building of a package or the pushing of a container image.
185186

186187
### Standard's Cells (Function Library)
187188

@@ -191,4 +192,5 @@ While optional, an audited and community maintained function library and its cor
191192
## Modularity & Virality Model
192193

193194
We aim to provide a public registry in which we index and aggregate additional Block Types and Cells from the Standard user community that are not maintained in-tree.
194-
A good documentation story will be part of that registry.
195+
To boost its value, aggregate documentation will be part of that registry.
196+
We need to decide on how to deeply integrate documentation concerns, such as structured docstrings & adjacent readmes, into the framework.

COMPARE.md

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,53 @@ _Where appropriate, we compare with `divnix/paisano`, instead_.
66

77
### flake-utils
88

9-
`numtide/flake-utils` is a small & lightweight utility with a focus on generating flake file _outputs_ in accordance with the packaging use case built into the Nix CLI tooling.
9+
`numtide/flake-utils` is a small & lightweight utility with a focus on generating flake file _outputs_ in accordance with the packaging and NixOS use cases built into the Nix CLI tooling.
1010

11-
Paisano, in turn, is an importer with a focus on _code organization_; it still plugs well into a `flake.nix` file, but also preserves its index function by keeping it clean.
12-
While you _can_ use it to match the schema that Nix CLI expects, it also enables more flexibility as it is not specially optimized for the Nix _package manager use case_.
11+
Paisano, in turn, is an importer with a focus on _code organization_.
12+
13+
Like Flake Utils, it, too, was designed to be used inside the `flake.nix` file.
14+
However, `flake.nix` is a repository's prime estate.
15+
And so Paisano was optimized for keeping that estate as clean as possible and, at the same time, beeing a useful table of content even to a relative nix-layman.
16+
17+
While you _can_ use it to match the schema that Nix CLI expects, it also enables more flexibility as it is not specially optimized for any particular use case.
1318

1419
### flake-parts
1520

1621
`hercules-ci/flake-parts` is a component aggregator with a focus on a flake schema that is built into the Nix CLI tooling that makes use of the NixOS module system for composability and aggregation.
1722

1823
Paisano, in turn, is an importer with a focus on _code organization_; it still plugs well into a `flake.nix` file, but also preserves its index function by keeping it clean.
19-
While you _can_ use it to match the schema that Nix CLI expects, it also enables more flexibility as it is not specially optimized for the Nix _package manager use case_.
24+
While you _can_ use it to match the schema that Nix CLI expects, it also enables more flexibility as it is not specially optimized for any particular use case.
2025

2126
To a lesser extent, Paisano is also a component aggregator for your flake outputs.
2227
However, in that role, it gives you back the freedom to use the output schema that best fits your problem domain.
2328

24-
Convergence towards the Flakes output schema is provided via the harvester family of functions (`winnow`, `harvest` & `pick`).
25-
Depending on the domain schema, it can be a _lossy_ convergence due the lesser expressivity of the flake output schema.
26-
27-
Flake Parts aggregates bespoke use-case specific interfaces implemented in a domain specific language based on Nix (i.e. "the module system").
28-
Paisano, in turn, focuses on code organization along high level code boundaries connected by generic interfaces.
29-
3029
The core tenet of Flake Parts is domain specific interfaces for each use case.
30+
Flake Parts implements and aggregates these interfaces based on the NixOS module system.
3131

32-
The core tenet of Paisano remains Nix' original functional style paired with a function library.
32+
Paisano, in turn, focuses on code organization along high level code boundaries connected by generic interfaces.
33+
The core tenet of Paisano remains Nix's original functional style.
34+
35+
Convergence towards the Flakes output schema is provided via the harvester family of utility functions (`winnow`, `harvest` & `pick`).
36+
Depending on the domain schema, it can be a _lossy_ convergence, though, due the lesser expressivity of the flake output schema.
37+
38+
<details>
39+
<summary>Example usage of harvester functions</summary>
40+
41+
```nix
42+
{
43+
inputs = { /* snip */ };
44+
outputs = { std, self, ...}:
45+
growOn {
46+
/* snip */
47+
}
48+
{
49+
devShells = std.harvest self ["automation" "devshells"];
50+
packages = std.harvest self [["std" "cli"] ["std" "packages"]];
51+
templates = std.pick self ["presets" "templates"];
52+
};
53+
```
54+
55+
</details>
3356

3457
### Devshell
3558

@@ -51,4 +74,4 @@ Currently it has more advanced build caching strategies: a gap that the Nix comm
5174
### My CI/CD
5275

5376
Any CI can leverage Paisano's Registry to discover work.
54-
Implementations can either be native to the CI or provided via CI-specific wrappers, a strategy chosen for example by our reference implementation for GitHub Actions.
77+
Implementations can either be native to the CI or provided via CI-specific wrappers, a strategy chosen, for example, by our reference implementation for GitHub Actions.

PITCH.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ A helpful analogy would be the person who sets up and maintains the conveyor bel
1414
Consumes and co-maintaines the automation along the SDLC.
1515
A helpful analogy would be that this person not only uses and configures our conveyor belt, but is also capable of occasionally maintaining it.
1616

17-
It is essential to have an understanding what they value, so let's try to get an overview.
17+
It is essential to have an understanding of what they value, so let's try to get an overview.
1818
We'll make use of a high level value matrix with simple sentiment scores:
1919

2020
- :heart_eyes: &rarr; <i>"absolutely love it!!!"</i>
@@ -34,10 +34,10 @@ We'll make use of a high level value matrix with simple sentiment scores:
3434

3535
So, this is for you and your team, if you:
3636

37-
- Care about reproducibility
38-
- Value clean code
39-
- Have a deadline to meet
40-
- Want to serve an optimized UX
37+
- Care about reproducibility for more reliablility throughout your software development
38+
- Value clean code for keeping a check on techincal debt and increased long-term maintainability
39+
- Have a deadline to meet with the help of the includes best practices and batteries
40+
- Want to serve an optimized UX to your colleagues via a repo CLI / TUI and (close to) zero-config CI
4141

4242
# Selling Points
4343

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ and many more amazing people (see end of file for a full list)._
2121
---
2222

2323
[Standard][std] is a nifty DevOps framework that
24-
enables an efficient Software Delivery Life Cycle (SDLC) with the power of [Nix][nix] via [Flakes][nix-flakes].
24+
enables an efficient Software Development Life Cycle (SDLC) with the power of [Nix][nix] via [Flakes][nix-flakes].
2525

2626
It organizes and disciplines your Nix and thereby speeds you up.
2727
It also comes with great horizontal integrations of high

0 commit comments

Comments
 (0)