You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/docs/Ways-of-Working/Principles/Software-Design.md
+23-1Lines changed: 23 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
---
2
2
title: Software design
3
-
description: SOLID, extensibility, DRY with judgment, and making change easy before making the change.
3
+
description: SOLID, extensibility, smart defaults with local overrides, DRY with judgment, and making change easy before making the change.
4
4
---
5
5
6
6
# Software design
@@ -19,6 +19,28 @@ Extend by adding, not by modifying what already works — the Open/Closed princi
19
19
20
20
The system stays pluggable: the docs do not change when a new agent runtime is added — only a new integration layer is written. See the [Agentic Development](../Agentic-Development.md) specification for how this plays out in practice.
21
21
22
+
## Smart defaults, local overrides
23
+
24
+
The default is the smart, secure choice — what you would pick most of the time, and the safe option when unsure. A system with no configuration is already correct, safe, and useful out of the box. Configuration exists to *deviate* from a good default, never to reach a usable one.
25
+
26
+
Set the default at the broadest scope, and let each narrower scope override it. The setting closest to the thing it controls wins:
27
+
28
+
```text
29
+
org / ecosystem the widest default — set once, inherited everywhere
30
+
└── repository may narrow the default for one codebase
31
+
└── directory may narrow it further for one area
32
+
└── item the last word — closest to what it configures
33
+
```
34
+
35
+
This shape is chosen for manageability over the life of a system, and it earns two properties at once:
36
+
37
+
-**Manageable across the wide.** Change the default in one place and everything that has not opted out follows. You set the norm once instead of finding and editing many copies of it.
38
+
-**Flexible in the narrow.** Deviating is a small, local edit beside the item that needs it — not a fight with the system, and not a change that ripples outward. The exception lives with the thing it applies to.
39
+
40
+
Make the wide default easy to set and the local override easy to make. When the two disagree, the more specific one wins — predictably, by its position in the hierarchy, never by special-casing.
41
+
42
+
This is [Easy and Safe](../../index.md) expressed as design: doing the right thing takes no effort because it is the default, and deviating is deliberate and contained because it is a local override. [Least-privilege](Purpose-and-Direction.md) and [secure by default](../../Coding-Standards/Security.md) are this principle applied to permissions and security; the way [the vision cascades](../../Vision/index.md) is its shape applied to knowledge.
43
+
22
44
## DRY — with judgment
23
45
24
46
Don't Repeat Yourself, but **don't extract too early**. Wait until the same non-trivial logic appears in three or more places, or until the duplication is clearly load-bearing. Premature abstraction is more expensive than duplication.
Copy file name to clipboardExpand all lines: src/docs/Ways-of-Working/Principles/index.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,7 +15,7 @@ Principles are grouped by theme; each theme is its own page so an agent can load
15
15
| --- | --- |
16
16
|[Purpose and direction](Purpose-and-Direction.md)| Why we build, who we build for, and the least-privilege stance under every decision. |
17
17
|[AI-first development](AI-First-Development.md)| Agents as first-class participants, determinism before intelligence, and how humans and agents share the work. |
18
-
|[Software design](Software-Design.md)| SOLID, extensibility, DRY with judgment, and making change easy before making the change. |
18
+
|[Software design](Software-Design.md)| SOLID, extensibility, smart defaults with local overrides, DRY with judgment, and making change easy before making the change. |
19
19
|[Engineering practices](Engineering-Practices.md)| Write it down, everything as code, evergreen docs, test-driven development, and shift-left quality. |
20
20
|[Planning and delivery](Planning-and-Delivery.md)| Roadmapping, lean delivery, and the loops that keep iteration fast. |
21
21
|[References](References.md)| The literature behind these principles. |
0 commit comments