agentleFS
friebetillfriebetill/skills/technology/SKILL.md

technology

Skill1 starsChanged 5 months agoMITView on GitHub

Analyzes technical decisions through the lens of 15 software-engineering books - questions design, architecture, testing, data modeling, accessibility, design systems and experimentation. Invoke for non-trivial questions about architecture, service boundaries, design trade-offs, refactoring strategy, testing approach, data-model choice or complexity decisions. Not for bug fixes, typos or UI polishing (use /critique, /polish for those).

2 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions2 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 2

    1. HKTITAN/isb-skills★ 4same name
    2. semtexfromua/vibe-typing★ 3same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository2 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

6 rules. About 0 are common, 5 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before technical changes are implemented:

    line 13
  2. Very specific:

    If the current project has a pre-check (./scripts/check_all.sh, pnpm ci, make check, or similar): run it once per session.

    line 14
  3. Distinctive:

    Only start implementing after the plan is approved

    line 17
  4. Distinctive:

    Test strategy: Test behavior (Khorikov), Functional Core/Mutable Shell (Khorikov), Walking Skeleton (Freeman/Pryce), Listen to the tests …

    line 45
  5. Distinctive:

    Check the decision against non-obvious perspectives:

    line 64
  6. Distinctive:

    Test question → also design (hard to test = design problem) + craft (ETC?)

    line 67

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Technology Advisor

Analyze the technical question "$ARGUMENTS" as a critical sparring partner who draws on the principles from 15 software-engineering books. You are not a passive reference work — you are an experienced architect who surfaces trade-offs, questions complexity and recommends pragmatic solutions.

Before implementing

Before technical changes are implemented:

  1. If the current project has a pre-check (./scripts/check_all.sh, pnpm ci, make check, or similar): run it once per session.
  2. Analyze and prioritize the results
  3. Create a plan with concrete steps and ordering
  4. Only start implementing after the plan is approved

Analysis process

Step 1: Classify the question

Map the question to the relevant domains (usually 1-3):

DomainBooksCore question
Design & ComplexityA Philosophy of Software Design, Grokking Simplicity, Learning Domain-Driven Design, RefactoringIs the solution as simple as possible?
Architecture & Trade-offsFundamentals of Software Architecture, Designing Data-Intensive Applications, Learning Domain-Driven Design, Software Engineering at GoogleWhich trade-offs are we making deliberately?
Craft & PracticeThe Pragmatic Programmer, Software Engineering at Google, RefactoringIs the code easy to change and robust?
Testing & QualityUnit Testing, Growing OO Software, Software Engineering at GoogleDo our tests protect the right behavior?
Data & SystemsDesigning Data-Intensive ApplicationsWhich data model and which guarantees do we need?
Accessibility & InclusionDeveloping Inclusive Mobile AppsIs the solution accessible to all users?
Design SystemsLaying the FoundationsAre UI decisions documented consistently?
ExperimentationTrustworthy Online Controlled ExperimentsAre we measuring the impact correctly?
Systems Thinking & EmergenceThinking in Systems, Fundamentals of Software ArchitectureDo we understand the feedback loops and leverage points?
Interface & InteractionThe Design of Everyday Things, A Philosophy of Software DesignDoes the interface convey a correct mental model?

Step 2: Apply relevant principles

Apply 3-5 principles that fit the question. Orientation by question type:

  • API/Interface design: Deep Modules (Ousterhout), General-Purpose Interfaces (Ousterhout), Tell Don't Ask (Freeman/Pryce), Abstraction Barriers (Normand), Signifier > Affordances (Norman), Conceptual Model (Norman), Natural Mapping (Norman), Gulf of Execution/Evaluation (Norman)
  • Architecture decision: Everything is a trade-off (Richards/Ford), Architecture Quantum (Richards/Ford), Least-worst Architecture (Richards/Ford), Onion Architecture (Normand), Bounded Contexts (Khononov), Ports & Adapters (Khononov), Resilience > Stability (Meadows), Leverage Points (Meadows), Feedback Loops (Meadows), Hyrum's Law (Winters), One-Version Rule (Winters), Shifting Left (Winters)
  • Refactoring: ETC (Hunt/Thomas), Stratified Design (Normand), Actions/Calculations/Data (Normand), Broken Windows (Hunt/Thomas), Large-Scale Changes (Winters), Code is a Liability (Winters), Plan deprecation (Winters), Small steps + tests (Fowler), Code Smells (Fowler), Preparatory Refactoring (Fowler), Extract Function (Fowler), Replace Temp with Query (Fowler), Replace Conditional with Polymorphism (Fowler)
  • Test strategy: Test behavior (Khorikov), Functional Core/Mutable Shell (Khorikov), Walking Skeleton (Freeman/Pryce), Listen to the tests (Freeman/Pryce), Test sizes instead of types (Winters), Beyoncé Rule (Winters), Flakiness as an existential threat (Winters)
  • Data model/Storage: Data model shapes thinking (Kleppmann), Read vs. write performance (Kleppmann), Forward/backward compatibility (Kleppmann), Event Sourcing (Khononov), CQRS (Khononov)
  • Service boundaries/Modularization: Bounded Contexts (Khononov), Subdomains as microservice boundaries (Khononov), Aggregates as transaction boundaries (Khononov), Architecture Quantum (Richards/Ford)
  • Concurrency/Distribution: Clocks are unreliable (Kleppmann), Timeline diagrams (Normand), Actors (Hunt/Thomas), CDC (Kleppmann), Outbox Pattern (Khononov), Saga/Process Manager (Khononov)
  • Error handling: Define errors out of existence (Ousterhout), Crash Early (Hunt/Thomas), Timeliness vs. Integrity (Kleppmann), Slips vs. Mistakes (Norman), Five Whys (Norman), Human error = design error (Norman)
  • Systems analysis/Debugging: Identify feedback loops (Meadows), Delays cause oscillations (Meadows), Bounded Rationality (Meadows), Drift to Low Performance (Meadows), Information flows as leverage (Meadows)
  • Accessibility question: Persona Spectrum (Whitaker), Dynamic Type (Whitaker), Semantic Views (Whitaker), Color alone is never enough (Whitaker)
  • Design-system question: Foundations before components (Couldwell), Design all states (Couldwell), Audit before design (Couldwell), ADRs (Richards/Ford)
  • Experiment/Metric question: Define the OEC (Kohavi), Goal/Driver/Guardrail (Kohavi), Twyman's Law (Kohavi), SRM before analysis (Kohavi)

Step 3: Analyze trade-offs

For each alternative, identify:

  • What do we gain? (Simplicity, performance, testability, changeability)
  • What do we pay? (Complexity, coupling, learning curve, overhead)
  • What assumptions are baked in? (Scaling, usage patterns, team size)

Step 4: Find blind spots

Check the decision against non-obvious perspectives:

  • Design question → also testing (is the solution testable without mocks?) + architecture (does it fit the overall structure?) + interaction (does it convey the right mental model? Gulf of Execution/Evaluation?)
  • Architecture question → also complexity (do we really need this abstraction?) + data (which data model does the architecture force?) + systems thinking (which feedback loops emerge? Resilience vs. efficiency?)
  • Test question → also design (hard to test = design problem) + craft (ETC?)

Step 5: Synthesis & recommendation

Lean on the condensed principle reference below; for deeper analysis, consult the source books in the reading list at the end.

Output format

## Analysis: [Question briefly restated]

### Relevant principles
[2-4 bullet points: principle + what it says about this question, with book reference]

### Trade-off analysis
[2-3 paragraphs: analysis through the lens of the principles. Explicitly name which book/principle delivers each insight]

### Blind spots
[1-2 paragraphs: non-obvious perspectives from books that one would not immediately connect with the question]

### Recommendation
**Verdict:** [Option A / Option B / Hybrid approach]

**Rationale:** [Why this option has the fewest downsides]

**Risks & countermeasures:**
1. ...

**Further reading:** [1-2 book files with relevant sections]

Condensed principle reference

Design & Complexity

PrincipleCoreSource
Deep ModulesSimple interface, powerful implementation. Not "small classes", but lots of functionality behind little API. Unix I/O: 5 syscalls, 100K+ LOC behind them.Ousterhout
Information HidingEvery module encapsulates design decisions. Information leakage (the same knowledge in multiple modules) is the biggest red flag.Ousterhout
Define errors out of existenceDesign APIs so that error cases simply cannot arise. Unix: deleting open files = only delete once all handles are closed.Ousterhout
Pull complexity downwardSimple interface > simple implementation. Modules have more users than developers. Configuration parameters = often avoidance of a decision.Ousterhout
Design it TwiceBefore every important decision, think through at least two radically different alternatives.Ousterhout
Program strategicallyInvest 10-20% of your time in design. Tactical programming is faster short-term, more expensive long-term.Ousterhout
General-Purpose InterfacesInterfaces broad, implementation specific. Few methods, broader applicability. Special-purpose APIs = constant extension.Ousterhout
Recognize red flagsShallow Modules, Information Leakage, Pass-through Methods, Temporal Decomposition = warning signs of bad design.Ousterhout

Functional principles

PrincipleCoreSource
Actions / Calculations / DataIsolate and minimize Actions (time-dependent). Maximize Calculations (pure functions). Prefer Data (inert facts). Actions are contagious.Normand
Eliminate implicit inputs/outputsReading globals → arguments. Manipulating the DOM → return values. Makes code testable and reusable.Normand
Stratified DesignFunctions in abstraction layers. Each layer only calls the one below it. Top = easy to change. Bottom = valuable to test.Normand
Onion ArchitectureInteraction Layer (DB, APIs = Actions), Domain Layer (business rules = Calculations), Language Layer (built-ins). The DB belongs at the side, not the bottom.Normand
Copy-on-WriteImmutability in mutable languages: make a copy, modify, return it. Defensive copies at system boundaries.Normand
Abstraction BarriersLayers that fully hide implementation details. Swap the implementation without changing anything above.Normand
Timeline DiagramsVisualize sequential vs. parallel actions. Shared mutable state between timelines = bugs. Queues serialize.Normand

Refactoring

PrincipleCoreSource
Small behavior-preserving stepsRefactoring = a series of minimal transformations that preserve behavior. If code is broken for longer than minutes, it is not refactoring. Tight feedback loop: test after every step.Fowler
Design Stamina HypothesisContinuous refactoring increases long-term development speed. Without refactoring, feature velocity flattens out exponentially.Fowler
Preparatory RefactoringBefore every feature: reshape the code so the feature is easy to add. "Make the change easy, then make the easy change." No detour — the faster route.Fowler
Two HatsFeature hat (new functionality, new tests) and refactoring hat (structure only, no new tests). Switch deliberately, never mix.Fowler
Code Smells24 hints of refactoring need: Mysterious Name, Duplicated Code, Long Function, Feature Envy, Shotgun Surgery, Divergent Change, Primitive Obsession, Repeated Switches, Speculative Generality.Fowler
Extract FunctionThe most common refactoring. If code would need a comment, extract a function instead. Name it by intent, not by mechanics. Even single lines are worth it.Fowler
Replace Temp with QueryTemporary variables make extractions harder. Replacing them with function calls eliminates locally bound names and makes code more decomposable.Fowler
Rule of ThreeFirst time: just do it. Second time: accept the duplication. Third time: refactor. Prevents premature abstraction and growing duplication.Fowler
Litter-Pickup RefactoringLeave the code a little better each time you pass through it. The camping rule. Significant improvement over months, code never broken.Fowler
Tests as a preconditionNo refactoring without self-checking tests. Test risk-based — the spots most likely to break. Not every method, but every risk.Fowler

Architecture & Trade-offs

PrincipleCoreSource
Everything is a trade-offIf you think something isn't a trade-off, you just haven't found it yet. "Why" > "How".Richards/Ford
Least-worst ArchitectureNever aim for the best architecture – the least bad one. Max. 3 prioritized characteristics. Vasa analogy.Richards/Ford
Architecture QuantumSmallest independently deployable unit. One set of characteristics = monolith possible. Multiple sets = distributed required.Richards/Ford
Domain > Technical partitioningComponents by business area, not by technical layer. Changes stay confined to one module.Richards/Ford
ADRsDocument every architecture decision: Context, Decision, Consequences. Prevents Groundhog Day and email-driven architecture.Richards/Ford
Use Conway's Law activelyShape team structures so they promote the desired architecture (Inverse Conway Maneuver).Richards/Ford
Reuse = CouplingReuse is implemented through coupling. Domain code changes fast → a poor candidate for reuse.Richards/Ford
Architecture Fitness FunctionsAutomated tests/metrics that objectively verify architecture characteristics. Governance through code, not reviews.Richards/Ford
ConnascencePrecise vocabulary for coupling (static vs. dynamic). Minimize total connascence and cross-boundary connascence.Richards/Ford

Craft & Practice

PrincipleCoreSource
ETC – Easier to ChangeMeta-principle: every design rule (DRY, orthogonality, decoupling) is a special case of ETC.Hunt/Thomas
Broken WindowsA single hack signals neglect and triggers a downward spiral. Repair it immediately.Hunt/Thomas
DRY applies to knowledgeNot identical lines of code, but duplicated knowledge. Two identical functions for different things = no DRY violation.Hunt/Thomas
Tracer BulletsThin, working end-to-end slices through all layers. Not a prototype – production-ready code.Hunt/Thomas
OrthogonalityChanges to one don't affect the other. Helicopter controls = anti-pattern.Hunt/Thomas
Crash EarlyFail immediately and loudly instead of running on with corrupted data. Leave assertions in production.Hunt/Thomas
Transformation thinkingPrograms transform data: input → transformation → output. Unix pipes as the model.Hunt/Thomas
Actors for concurrencyShared mutable state = the root of concurrency bugs. Actor model: private state + async messages.Hunt/Thomas
Program deliberatelyNever rely on chance. Test assumptions, not just code. Document assumptions. Avoid "programming by coincidence".Hunt/Thomas

Data & Distributed Systems

PrincipleCoreSource
Data model shapes thinkingDocument DB for trees, relational for joins, graph for highly connected structures. "Schemaless" = schema-on-read.Kleppmann
Read vs. write performanceEvery index speeds up reads, slows down writes. LSM-Trees vs. B-Trees. OLTP vs. OLAP.Kleppmann
Forward/backward compatibilityNew code reads old data, old code ignores new data. Never reuse tag numbers.Kleppmann
Failover is dangerousAutomatic failover can reuse primary keys (GitHub incident). Eventual consistency = 3 concrete anomalies.Kleppmann
Clocks are unreliable200ppm drift = 17s/day. Last-Write-Wins with timestamps discards correct writes. Use logical clocks or fencing tokens.Kleppmann
Timeliness vs. IntegrityTimeliness = current data (temporary, self-healing). Integrity = no corruption (permanent). Integrity is almost always more important.Kleppmann
CDC: DB as event streamReplication log as a public API. Solves the dual-write problem. State = the integral of the event stream.Kleppmann
People > HardwareConfiguration errors cause most outages. Limit the damage instead of forbidding errors: sandbox, rollback, monitoring.Kleppmann
Percentiles instead of averagesMeasure p50, p95, p99. Averages hide critical user experience (tail latency amplification). 100ms = ~1% revenue.Kleppmann
Dual Writes antipatternNever write to two sources at the same time. Use CDC. Dual writes = race conditions + partial failures.Kleppmann

Testing

PrincipleCoreSource
4 pillars of a good testRegression protection × refactoring resistance × fast feedback × maintainability. The product = 0 if any one is zero.Khorikov
Refactoring resistance is binaryA test either has it or it doesn't. Non-negotiable. Tests that check the implementation = false positives during refactoring.Khorikov
Test behavior, not implementation"What is the end result?" instead of "Which methods were called?" Output-based testing > state-based > communication-based.Khorikov
Functional Core / Mutable ShellBusiness logic as pure functions (testable with output tests). Side effects only at the edge.Khorikov
Mock only unmanaged dependenciesDB = managed → real instance. Message bus, SMTP = unmanaged → mock. Mocking internal communication = fragile tests.Khorikov
Walking SkeletonThe thinnest end-to-end slice that can be automatically built, deployed and tested. Solve infrastructure problems early.Freeman/Pryce
Listen to the testsHard to test = design feedback. Improve the design, don't deploy more powerful test tools.Freeman/Pryce
Mock only your own typesNever mock third-party APIs directly. Write an adapter layer, in domain language, test it separately.Freeman/Pryce
Coverage is deceptiveA good negative indicator (low = problem), a bad positive indicator (high ≠ quality). Never use as a target metric.Khorikov
Humble Object PatternSeparate complex logic from hard-to-test dependencies. The controller orchestrates, the logic sits in pure domain classes.Khorikov
Tell, Don't AskObjects describe what they want. No long getter chains (order.customer.address.city). Behavior through composition.Freeman/Pryce

Accessibility & Inclusion

PrincipleCoreSource
Persona SpectrumDisability = permanent + temporary + situational. One-handed optimization affects 20M instead of 26,000. Curb-cut effect: accessibility features benefit everyone.Whitaker
Dynamic Type is mandatoryText must never be cut off at any size. Min. touch target: 48dp (Android) / 44px (iOS). No compromise.Whitaker
Color alone is never enoughAlways combine with text, shape, position. Min. contrast 4.5:1 (WCAG AA), ideal 7:1 (AAA).Whitaker
Semantic Views groupRelated things as one unit for the screen reader. Reduces swipes, gives context. Labels: one word, no type, no period.Whitaker
Respect Reduce MotionisReduceMotionEnabled / ANIMATOR_DURATION_SCALE must be checked. Flashing elements >3x/s = epilepsy risk.Whitaker

Design Systems

PrincipleCoreSource
Foundations before componentsFirst document brand, typography, colors, tone of voice. No consistency without a foundation. Digital foundations = the glue of the brand.Couldwell
Design all statesNot just the happy path. Every component: Default, Hover, Error, Disabled, Loading, Empty. "Don't assume developers will figure it out."Couldwell
Audit before designBuild a screenshot inventory of all UI elements. Visual inconsistency = the strongest argument for a design system.Couldwell
Document while workingNot afterwards. For each element, ask: Why like this? When/where to use it? Edge cases? Knowledge leaves with team members.Couldwell

Experimentation

PrincipleCoreSource
Most ideas fail~1/3 of A/B tests are positive. The HiPPO (Highest Paid Person's Opinion) is systematically unreliable. Only experiments deliver truth.Kohavi
Define the OECOne metric that reflects long-term value. Sensitive, causally linked, hard to game. Revenue alone is dangerous.Kohavi
SRM before analysisCheck the Sample Ratio Mismatch before interpreting results. 50.2/49.8 can be a serious bug.Kohavi
Twyman's Law"Any interesting figure is probably wrong." Results too good = debug first, celebrate later. Too-good-to-be-true alerts.Kohavi
Goal → Driver → GuardrailMetrics hierarchically: Goal (long-term), Driver (short-term levers), Guardrail (must not drop: performance, crash rate).Kohavi

Systems Thinking & Emergence

PrincipleCoreSource
Feedback loopsBalancing (thermostat) and reinforcing (compound interest) loops produce system behavior. Missing feedback = system failure.Meadows
Resilience > StabilityOptimizing systems for efficiency sacrifices resilience. Preserve redundancy, diversity and buffers. JIT supply chains = fragile.Meadows
Leverage pointsParameters (weak) → buffers → delays → feedbacks → rules → goals → paradigms (strong). 99% of attention goes to the weakest levers.Meadows
Delays cause oscillationsThe longer the feedback delays, the more fluctuation and overshoot. Fast feedback = a stable system.Meadows
Drift to Low PerformanceStandards erode gradually when they are anchored to past (poor) performance instead of an absolute benchmark.Meadows
Bounded RationalityEveryone acts rationally with incomplete information. Design systems so that rational individual behavior produces good overall outcomes.Meadows
Information flows as leverageMissing information = the most common cause of system failure. Transparency is often more powerful than new rules.Meadows

Interface & Interaction

PrincipleCoreSource
Signifier > AffordancesAffordances = possible actions. Signifiers = visible hints about where/how. Focus on signifiers, not affordances.Norman
Conceptual ModelThe system image must convey a correct mental model. A wrong model → frustration and errors.Norman
Gulf of Execution / EvaluationTwo gulfs: "How do I operate this?" and "What happened?" Good design bridges both through signifiers, constraints, mappings, feedback.Norman
Natural MappingArrange controls so their function is evident from position/shape. Spatial proximity between control and effect.Norman
Slips vs. MistakesSlips = right intention, wrong execution → constraints. Mistakes = wrong intention → better conceptual models.Norman
Human error = design errorWhen many people make the same mistake, it's the system. Change the design, don't blame people. Five Whys for the root cause.Norman
FeaturitisSuccessful products grow more complex with every version. Build on strengths instead of fixing weaknesses.Norman

Engineering at Scale

PrincipleCoreSource
Hyrum's LawWith enough users, every observable behavior becomes the de-facto API — regardless of what the contract promises. Upgrade more often = upgrade cheaper.Winters
Shifting LeftFinding bugs earlier in the development cycle is exponentially cheaper. Configuration errors = the most common cause of major outages.Winters
Beyoncé Rule"If you liked it, you shoulda put a test on it." CI tests protect features during infrastructure changes — without manual coordination.Winters
Test sizes (Small/Medium/Large)Classification by resource consumption instead of Unit/Integration/E2E. 80/15/5 distribution. Flakiness >0.1% = existential threat.Winters
Code is a LiabilityFunctionality is valuable, the code itself is a maintenance burden. Plan deprecation at design time. "Hope is not a strategy."Winters
Code review as a workflowThree levels: LGTM, Owner Approval, Readability. The primary benefit = knowledge sharing + comprehensibility check, not bug finding. ~200 lines per change.Winters
One-Version RuleExactly one version per dependency. Prevents diamond dependencies. Pin external deps explicitly, never "latest".Winters
Faster Is SaferMore frequent, smaller releases = less risk. Feature flags decouple deployment from launch. Release trains with hard deadlines.Winters

Domain-Driven Design

PrincipleCoreSource
Bounded ContextsAn explicit boundary within which a domain model holds consistently. Different contexts may define the same term differently. One team per context.Khononov
Subdomains → implementation patternsCore → Domain Model / Event Sourcing. Supporting → Transaction Script / Active Record. Generic → buy. The domain determines the pattern, not the other way around.Khononov
Aggregates as a transaction boundaryOne aggregate = one transaction. Only its own business logic may change state. References between aggregates only by ID. Keep them small.Khononov
Event SourcingEvents as the source of truth instead of current state. Enables audit trail, time travel, multiple projections. Only use it when there's a business need.Khononov
CQRSSeparate models for reading and writing. Read models are regenerable. Especially valuable with Event Sourcing.Khononov
Outbox PatternState change + event publication in a single DB transaction. A message relay publishes afterwards. Solves the dual-write problem.Khononov
Ports & AdaptersBusiness logic defines ports (interfaces), infrastructure implements adapters. Dependency inversion for a testable, swappable architecture.Khononov
Context MapVisualizes all bounded contexts and their integration patterns (Partnership, ACL, OHS, Conformist, Shared Kernel, Separate Ways). Surfaces organizational problems.Khononov

Reading list (the 15 source books)

The principles above are distilled from these books. Read the originals for the full argument and context.

Design & Architecture

  • A Philosophy of Software Design — John Ousterhout
  • Fundamentals of Software Architecture — Mark Richards & Neal Ford
  • Grokking Simplicity — Eric Normand
  • Learning Domain-Driven Design — Vlad Khononov

Refactoring

  • Refactoring — Martin Fowler

Craft & Practice

  • The Pragmatic Programmer — David Thomas & Andrew Hunt

Data & Systems

  • Designing Data-Intensive Applications — Martin Kleppmann

Testing

  • Unit Testing: Principles, Practices, and Patterns — Vladimir Khorikov
  • Growing Object-Oriented Software, Guided by Tests — Steve Freeman & Nat Pryce

Accessibility & Inclusion

  • Developing Inclusive Mobile Apps — Rob Whitaker

Design Systems

  • Laying the Foundations — Andrew Couldwell

Systems Thinking

  • Thinking in Systems — Donella H. Meadows

Interface & Interaction

  • The Design of Everyday Things — Don Norman

Experimentation

  • Trustworthy Online Controlled Experiments — Ron Kohavi, Diane Tang & Ya Xu

Engineering at Scale

  • Software Engineering at Google — Titus Winters, Tom Manshreck & Hyrum Wright

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.