Field note 01

How I built this site with an agent

I built my personal site with Claude in August 2026, and this is the pipeline I ran, stage by stage, in the order I ran it. Each stage is a decision you can copy. Follow them in the same order and you should be able to get a comparable result for your own site.

Built August 2026 Stages 8 Read about 24 minutes Tooling Claude Code · Claude Design Output Static HTML and CSS, no build step

The order is the argument. Almost every mistake I made came from running a stage early, so the map below is the whole method in one picture: eight stages in three phases, read top to bottom. Phase one settles the visual language before a single page exists. Phase two builds the work with a critic inside the loop. Phase three lets a machine, not a model, decide whether it is finished. Every box is a link to its stage.

Eight stages in three phases Phase one settles the visual language in two stages. Phase two builds the work under review in four stages. Phase three proves it and ships in two. Each box links to its section below. Phase 1 · Settle the language nothing is built yet Brand first, page last Claude Design Design system, then skill SKILL.md Phase 2 · Build with a critic in the loop make and check in the same pass Builder and critic the opening prompt Fan out only where work is independent ten pages, ten agents A review loop you will use in-browser overlay Batch the review one file per round Phase 3 · Prove it, then ship a machine decides, then the tooling goes Judge with something mechanical two servers, one read Strip the tooling, then deploy harden, then ship
  1. Phase 1 · Settle the languagenothing is built yet
  2. Stage 1Brand first, page lastClaude Design
  3. Stage 2Design system, then skillSKILL.md
  4. Phase 2 · Build with a critic in the loopmake and check in the same pass
  5. Stage 3Builder and criticthe opening prompt
  6. Stage 4Fan out only where work is independentten pages, ten agents
  7. Stage 5A review loop you will usein-browser overlay
  8. Stage 6Batch the reviewone file per round
  9. Phase 3 · Prove it, then shipa machine decides, then the tooling goes
  10. Stage 7Judge with something mechanicaltwo servers, one read
  11. Stage 8Strip the tooling, then deployharden, then ship
The eight stages. Every box links to its section. I have highlighted the two that changed my output most: the prompt that pairs a builder with a critic, and the point where a machine rather than a model decides whether the work improved.

Brand first, page last

I opened by asking for a page. I got two page designs back, and they were the wrong thing, because I had not decided anything they were meant to express. The correction is the single most useful move I made on this project:

promptstopping a design that had run ahead of its inputs
Hmm, those designs did not do the trick and you went straight to the web draft. I
would like to first decide on a color palette, the font, design details, graphics,
etc. I am not an expert but I think you went too far. I do not need the page design
now, I need for it to appear naturally from all the previous design constraints. I
would much rather have a document, presentation canvas of ideas [...] where we can
define step by step and then we decide how the page looks like. So maybe include
all the information that we have talked about into some place where we both can
visit to remember the design and let's iterate.

Every prompt on this page is mine. They are reproduced as written apart from spelling and, in this first one, a few words tidied for clarity. Nothing in them has changed meaning.

What I was asking for was not a smaller design. It was a place to do the deciding. I wanted to work through everything that makes up a brand, in order, and end up holding every input the design system would later need, so that when I finally asked for that system I could get it in one pass and get exactly what I meant. A page is the last thing you should ask for, because a page is a conclusion. This document is where the premises go.

A working document headed Deciding what your work should look like, before deciding what your website looks like, with an eight-stage tracker: stages one and two marked done, three and four marked you decide, the rest queued.
Open the real document
What I got instead of a third page design. Eight stages, two settled, the rest holding coded options I answered by replying with codes. The type specimens are set in the real fonts, so I was judging actual reading rather than a description of it. It is styled in neutral colours on purpose, so it cannot pre-decide the palette I was choosing inside it. Tap or click it to open the document itself, exactly as it stood.

What to copy. Every move I made in that document was a rejection with a direction attached, never just “I don't like it”. Open any of the four to see what came back.

I replaced the palettes with two sampled from named paintings

Monet's Impression, Sunrise and A Path in the Garden, each with a calculated dark mode rather than an inverted one. Naming a painting gives a colour brief something a word like “calm” cannot: a fixed reference both of us can check against.

#DCE4E8 fog #2C3A47 ink #6D89A0 mist #E0552C sun #1E2B38 night #E6CBB3 sky

The measurement of how much of that is really in the painting is two figures down.

I replaced the typography twice, and the second time by period

First with a 1920s book face and a Spanish agitprop poster face. Then again with Fondamento and Brygada 1918, to test a calligraphic hand against a 1918 type revival. Asking by period and by artefact, rather than by adjective, is what made the options distinguishable.

PairingWhat it was testing
Brygada 1918 + IBM Plex SansA full text family from a 1918 revival, with an engineered sans for labels
Fondamento + SpectralA calligraphic hand carrying personality, a plain serif carrying the reading
Space Grotesk + Source Serif 4Geometric grotesque declaring, serif explaining. This is the pairing that won
I pushed the graphic language to 1920s and 1940s print

What came back was a Constructivist monogram drawn from trademarks in my own reference sheets: a circle, a tilted band and a solid block, off-grid, used once per view. The second is the one that eventually became the favicon.

Circle, band, block
The bisected sun
The ladder
I asked for the image rule to be a printing process, not a filter

Photographs print as two misregistered ink plates, a sun plate and an ink plate offset from each other over the fog ground, with the register shift varying per image so no two look mechanically identical. That is a rule a stylesheet can implement and a person can check. “Make the photos feel handmade” is not.

By the end I had two favourites in every category and could not choose. The answer was not to rank them. It was to build two complete, internally coherent systems and compare them as wholes, because a palette you like in isolation can fight a headline face you also like in isolation.

Specimen sheet for the system I did not pick: warm paper, a verdigris accent, a 1918 serif revival, press rules and full-tone black and white photography. A · The Press Room (not chosen)
Specimen sheet for the system I picked: cool fog ground, one hot orange accent, a geometric grotesque over a serif, a circle-and-band monogram, and photographs printed as two misregistered ink plates. B · The Harbour (chosen)
Open both sheets, live
Two systems, not eight swatches. Each sheet carries the palette in both modes, type at reading sizes, the mark, the image rule, the controls and the voice. I picked B. The name on the sheets is the placeholder the design tool used, not mine. Open the sheets to read them at full size, both side by side on one canvas.

A palette described as “sampled from a painting” is a nice sentence, so it is worth checking. I loaded the painting into a canvas and, for each of the six colours, searched every pixel for the closest match by RGB distance. All six are genuinely in the painting, and the one that is furthest out is the one you would expect.

Claude Monet, Impression, Sunrise, 1872: a harbour at dawn in cool blue-grey, with a small hot orange sun over the water and dark boats in the foreground. sky mist sun fog night ink
Where the palette actually comes from. Every pin is the closest-matching pixel in the painting, found by searching all 1.27 million of them, not chosen by eye. Δ is straight-line distance in RGB space, where 0 is identical and 441 is the maximum, so read these as small numbers rather than as a pass mark: a nearest-pixel search over a whole painting will always find something. The figure I set before running it was Δ30, the point where a colour stops being recognisably the same one. Sky is closest at Δ4, then night at Δ7, ink at Δ8 and mist at Δ9. Fog is Δ19, and the sun is the furthest at Δ22: the painting's hottest orange is #CB5633 and the brand lifts it to #E0552C, which is the one deliberate exaggeration in the system. Painting: Claude Monet, Impression, Sunrise, 1872, Musée Marmottan Monet, public domain.

One more sheet came after those two, and it is out of order in every telling of this I have written since. Having built A and B, I still could not commit, so I asked for favicon candidates in Miró's vocabulary before locking either system. Twelve marks came back, each shown at 96px and again at 20px, and seeing the mark decided the system.

A sheet of twelve candidate logo marks in a geometric abstract style, each shown large and again at favicon size, with a written assessment of which ones survive at sixteen pixels.
Twelve marks, judged at the size they would actually be used. The recommendation at the foot of the sheet is F9, one disc split off-vertical into two inks, because it is the whole Sunrise painting in a single shape and the strongest of the set at 16px. Asking for the small size alongside the large one is what let me decide. Open it full size to read the assessments.

Design system, then skill

A specimen sheet is a picture. To be useful to an agent it has to become a directory of values. I locked the winning sheet, uploaded it, and wrote a brief that pinned every layer down before anything was generated.

LayerWhat I locked
GroundFog #DCE4E8, ink #2C3A47, mist #6D89A0
AccentSun #E0552C, one per component, never two
Dark groundNight #1E2B38, text in warm sky #E6CBB3, accent lifted to #DD4B1F
TypeGrotesk declares, serif explains, mono carries technical metadata
StructureAlignment-driven, flush left, no boxes where whitespace will do, sharp corners, no shadows
ImageryTwo misregistered ink plates, register shift varying per image so no two look mechanical
VoiceDeclarative, no first person, no hedging, no marketing adjectives. This field note is the one surface exempt from that rule, because a method is easier to follow in the first person.

What came back was tokens/ as CSS custom properties, components for the brand primitives, full-screen kits, guideline cards, the marks as SVG, and a readme that states its own sources and flags where it departs from them.

Make the system record its own deviations

The readme names the uploaded sheets as ground truth, states that no codebase or design file was supplied, and adds a tie-break rule: where the sheets and a published convention disagree, the sheets win. It then records the one deliberate difference, that the sheets carry a placeholder name while the components carry mine. A design system that writes down where it departed from its brief is doing the same job as a commit message.

I built the system in Claude Design, and then did the step that makes it portable: I put a SKILL.md at its root, in the format Claude Code expects, so an agent in a different tool can pick the brand up and apply it. Two separate surfaces, joined by one file. It is nine lines:

yamlSKILL.md
---
name: the-harbour-design
description: Use this skill to generate well-branded interfaces and assets for
  The Harbour — the personal portfolio design system for Marcos Carlero — either
  for production or throwaway prototypes/mocks/etc. Contains essential design
  guidelines, colors, type, fonts, assets, and UI kit components for prototyping.
user-invocable: true
---

Read the README.md file within this skill, and explore the other available files.
If creating visual artifacts, copy assets out and create static HTML files for the
user to view. If working on production code, you can copy assets and read the rules
here to become an expert in designing with this brand.
This page is not wearing that system, on purpose

Worth saying plainly, since you are reading it right now. The table above locks sharp corners, no shadows and a serif for body copy. The page around you has rounded corners, three tiers of shadow and no serif anywhere except the pull quotes. The Harbour governs my portfolio, which is the surface it was built for. This section is a different surface with a different job, and it keeps its own system. A design language that quietly spread to everything I own would be a failure of the stage above, not a success of it: the point of locking a system is knowing what it is for.

Builder and critic

My first real build prompt was not a request. It was a role brief with an execution plan, a named adversary and a stop condition. I have replaced the program names with the published aliases I use everywhere else, since the work is under an NDA.

It is one prompt, and it does three jobs. The colours below mark which sentences do which. Point at a part, or tap its card, to light up the lines it covers.

promptthe opening build prompt, abridged
I want you to act as an autonomous engineering squad led by a Master Software
Architect. Your task is to build a highly interactive web portfolio that showcases
my professional projects with extreme rigor and polish [...]

The portfolio must allow users to explore my projects through exactly 3 layers of
deep abstraction, ensuring I showcase my technical depth without ever revealing
proprietary source code.

EXECUTION PLAN & AGENTIC LOOP:
Fan out specialized sub-agents to tackle each project and layer individually.

Crucially, instantiate a separate "Harsh Critic" sub-agent. You must /loop on
every single item, diagram, and textual explanation. The Harsh Critic must
meticulously check for hallucinations and enforce absolute technical rigor.

Don't stop until the Harsh Critic is utterly wowed by the truthfulness and
accuracy of the findings. The Critic should literally do a blind side-by-side
comparison of the sub-agents' output against industry-standard documentation
(e.g., Martin Fowler's architecture definitions, Gang of Four design patterns)
[...] If the Critic finds any flaws, lack of depth, or hallucinations, it must
reject the work and keep going.
Show all three again

A walkthrough of the whole pattern, by the person who named it, is on video.

Three subagents went out against three codebases inside the first minute. The shape is not mine. It is the pattern Matt Shumer named the Gauntlet Loop in July 2026, after using it to generate a browser first-person shooter from a single prompt, released as Claude of Duty.

The agent (not you!!) breaks the goal into parts, gives each part a specialist builder and a ruthless blind critic sub-agent, with a mandate to only pass if the generated artifact is better than some real-world equivalent.

Matt Shumer x.com/mattshumer_

The underlying idea is older, and reading it is worth more than copying the prompt. Anthropic's agent guidance describes an evaluator-optimizer workflow: one call generates, a separate call evaluates against explicit criteria and sends it back. A single agent asked to continue until its work is perfect is grading its own homework, and stops early. A critic with its own context cannot be argued into approving weak output, because it never saw the argument.

Read the source, not the prompt template

Building Effective Agents (Anthropic, December 2024) sets it out in one sentence: “In the evaluator-optimizer workflow, one LLM call generates a response while another provides evaluation and feedback in a loop.” It also names the condition under which the extra cost pays: “This workflow is particularly effective when we have clear evaluation criteria, and when iterative refinement provides measurable value.” Everything the “harsh critic” clause does is an application of that.

What the prompt leans onWhat it actually is
Subagents The mechanism the critic depends on. Each one runs in its own context window with a custom system prompt, specific tool access, and independent permissions, which is precisely why it cannot be talked round.
/loop A bundled skill rather than a built-in command. It runs a prompt repeatedly while the session stays open, which is what turns “keep going” into something that actually iterates.
ultracode A setting that combines the highest reasoning effort with automatic workflow orchestration. Worth knowing what it is not: it runs an orchestration script in an isolated runtime, so it is not simply “more subagents in one turn”.

The clause that does the real work

“Blind side-by-side comparison against industry-standard documentation” is the load-bearing sentence, and if you copy one line from that prompt, copy this one. An agent stops when it decides a task is done, and “until it is perfect” is a judgement it can make in its own favour. Naming an external artifact to be beaten replaces a judgement with a comparison.

It is also where the honest limit sits, and the author of the pattern is the one who documents it. Claude of Duty's own README reports that eleven adversarial critics scored the result 3.59, then 4.14, then 4.05, then 5.05 out of ten, and that in a blind A/B every critic in every round still picked the real game. Setting an external bar makes the loop converge. It does not make it win.

Fan out only where work is independent

The largest parallel run on this project was ten agents, one per long page, each applying Simplified Technical English to the prose. It worked, and it worked for a specific reason: no two of those pages share any prose. They share a stylesheet, a script and a prev/next chain, none of which the rewrite touched, so no agent could invalidate another one's work.

Two things made it safe rather than lucky.

  1. An extractor first, and then a correction to it. My immediate follow-up prompt was “It is really important not to change any quotes or diagrams so please could you revise the extractor you did to make sure no quotes or diagrams are passed to the text reviewer”. Canonical quotations are the evidence those pages rest on. A prose simplifier let loose on a quotation produces a paraphrase still attributed to its author, which is worse than a clumsy sentence.
  2. A critic agent per rewrite, not one at the end. I sent six further critic dispatches after the rewrites, each reading one or two pages against the original.
Do not fan out across coupled work

This is the correction to the prompt in stage three, and it comes from the author of that prompt. Claude of Duty's README reports that three rounds of six agents, each owning one directory, moved the score by +0.46 and left frame-ruining defects higher than they started, 60 to 47 to 66, because the systems those agents owned were coupled and they kept breaking each other's assumptions. One sequential pass with a single owner per coupled concern moved it +1.00 and cut defects from 66 to 26.

So: fan out across pages, chapters, independent components. Do not fan out across a layout, a palette and a type scale that all read the same tokens.

A review loop you will use

Two days in, I stopped asking for page changes and asked for a tool to request them with instead. This is the stage most people skip, and it paid for itself inside a week.

promptbuilding the review overlay
I would like to add some comments to the portfolio webpage you created like if it
was Claude design where I can click on html objects or create square objects and
write comments for you to edit. I need you to create the best system for us two.
It needs to be simple for me to select the correct elements in the web page or at
least to highlight the elements that I want altered and for you to understand
exactly in the code the request is [...] I would also like to be able to create
multiple requests in different parts of the app and only send them to you once I
want using a button or telling you in the chat to read some file, please choose best.

Describing a change in prose is expensive and ambiguous. “The third paragraph under the second heading, the one starting Two years, stated exactly” costs a lot of words and can still point at the wrong element. A click cannot. Select, write, and send the whole set at once.

My portfolio page in review mode. The headline is outlined in blue and carries a small numbered pin, a hint bar reads click an element to comment, drag to mark an area, escape to exit, and a floating bar reads Reviewing beside a count of three and a Notes button.
Review mode, on the portfolio. Click any element and a box opens against it; shift-drag marks a region instead. Anything that already carries a request shows a numbered pin, so a second pass never duplicates a note I had already written. The counter is every pending request across every page, not just this one.
The same page with the Notes panel open, listing the saved requests. Each row shows the comment above the element it targets and the snippet of text it matched, with buttons to save the batch to a file or clear it.
The batch, before it goes. Each row carries the request, the element it belongs to and the snippet of text that will find it again. Being able to read the whole set, and to delete the two I no longer agreed with, is what made me trust handing it over in one go rather than one note at a time.

The design decision that matters is anchoring. Each note records a text snippet as its primary locator, because a unique string finds a file and a line and survives the file being edited. The CSS selector is stored as a secondary hint and is deliberately not the thing relied on. Dragged regions store percentages against the nearest block ancestor, so they survive a resize, a zoom or a theme change.

You do not need my overlay, you need its three properties

Mine is about 600 lines of dependency-free JavaScript and it is not on this site, so you cannot copy it from here. Ask your own agent to build one and hold it to three things, which are the only parts that matter: a click selects an element; each note stores a text snippet as its primary locator and the CSS selector only as a fallback; and the notes leave as one markdown file rather than one message each. Anything that does those three things will do. Gate it to localhost on day one, not on the day you deploy.

The prompt that produced mine is at the top of this stage, with a copy button in its corner. Take it and hand it to your own agent, then expect to correct it: my next two messages were both bug reports about the drag-to-mark rectangle, which is the part that is fiddly to get right.

Batch the review

The tool is only half of it. The habit is the other half, and it is borrowed straight from code review: you do not comment on one line, wait for a push, then comment on the next. You read the whole thing, leave every comment, and submit once.

That is also the cheaper way to run it, which surprised me. Sending notes one at a time feels lighter and is not: each one is a separate turn, and each turn re-reads the page, the stylesheet and the context around the change before it can act. Ten notes sent singly pay that cost ten times, and by the tenth the agent has usually rewritten something it touched on the third. One batch is one prompt against one already-loaded context, and it lets the agent see that five of the eight requests are the same complaint. Batching saved me tokens and it saved me contradictions.

In practice that meant I could read a full page while the agent was working on something else, hand over the entire review, and move to the next page without stopping. A batch comes out as markdown and goes back in as the next prompt:

textone real batch, 2 requests of 8
# Review requests (8)

### 1. I really do not like the em dashes, remove them an leave a text like this:
Ten concepts are each explained from their canonical source: Meyer, Fowler, the
Gang of Four, Nygard, Richardson, and the W3C. [...]

- **Type:** element
- **Element:** `p`
- **Find this text:** `Ten concepts, each explained from its canonical source — Meyer, Fowler,`
- **Selector:** `#main > section.hero:nth-of-type(1) > p:nth-of-type(1)`

### 5. I would like to change the text to this: Presentational components that
import a global store lose their presentational nature. [...]

- **Find this text:** `Presentational components that import a store are not presentational.`
- **Selector:** `#hard-lessons > div.cards.hard:nth-of-type(2) > a.card:nth-of-type(3) > p`

---
_Locate each item by the "Find this text" string; the selector is a fallback hint._

Five of those eight requests were the same complaint about em dashes. That is the real argument for batching: a defect that appears five times is one instruction, not five conversations.

Judge with something mechanical

After that rewrite I did not ask a model whether the prose had improved. I served the old version and the new version at the same time and read them against each other.

The same paragraph shown twice side by side. On the left it contains two em dashes; on the right the same sentences carry a colon and a comma in their place, with the wording otherwise unchanged.
Two servers, one reading pass. Left is the commit before the rewrite, right is after it. The change is a colon where an em dash was. Small enough that I would have argued about it in the abstract, obvious enough to settle in one glance.

This is what “blind side-by-side comparison” has to mean to be worth anything. Without something outside the model deciding, a critic agent is an opinion with extra steps. The cheapest mechanical referees, in the order I reached for them: a second server on another port, a linter, the browser console, and the rendered page at a phone width.

Then stop

The other half of judging is knowing when to stop, and here the Gauntlet Loop's “do not stop until the critic is wowed” works against you. Most of my design passes ran through impeccable, whose documentation says it plainly:

Verify in bounded passes, not a loop, and the ceiling covers the whole cycle: screenshots, defect scans, micro-edits, and rebuilds alike. Build fully, inspect once with a batched round [...], fix everything it shows in one batch, confirm with at most one more round, and stop polishing.

impeccable · SKILL.md github.com/pbakaus/impeccable

The two are not in contradiction once you see what separates them. A loop with an external referee converges, because something outside the model decides. A loop with an internal referee and no external check does not converge, it just costs more. I ran the lifecycle as separate named passes rather than one instruction, and that separation is what made each pass reviewable.

PassWhat it is forWhat it produced here
/impeccable initWrite the durable product recordAudiences, stack reasoning, the NDA constraints
/impeccable critiqueDesign review by isolated agentsA scored report: 18 of 36, one P0, three P1
/impeccable auditCode-level defects, not tasteContrast failures and a broken document outline
/impeccable polishFix what the audit foundOne batch, then stop
/impeccable hardenMake it safe to shipRemoved the review tool from the site
The first critique scored my landing page 18 out of 36

I ran it as two isolated agents, a design review and a detector-and-browser evidence pass, and it came back with a per-heuristic table. No feedback on either primary control. No current-section state across a fourteen-screen document. Navigation deleted below 700px with no replacement. A term I had used six thousand pixels before I explained it.

Every one of those is a thing I would have defended if a model had simply told me the page was good. critique run 2026-08-12 · 18/36 · 1 P0 · 3 P1

Strip the tooling, then deploy

The review overlay that made this whole workflow possible is not on the deployed site. I gated it to localhost as soon as the repository started deploying, and then deleted it outright, 1,692 lines across both site trees, before the first public deploy. A runtime host check is a control. Not shipping the authoring tool at all is the absence of the risk.

I then ran a pre-deploy sweep as three agents, one doing a static scan, one probing the live site, one checking the CV for unintended metadata. It caught two things the rendered page could never have shown me:

Both are the same mistake: what ships is the filesystem, not the repository, and not the rendered page.

Where it went wrong

Two failures worth more than the successes, because they are the ones that will happen to you too.

The agent edited code I had not asked it to touch

promptthe correction, verbatim
Dude, what are you doing, I haven't given you any permissions or clear request to
alter the code. If you have done any changes please revert them [...]

This is the failure mode that matters most, and it is not a code defect. An agent that widens its own scope produces a diff that no longer corresponds to a request, and an unreviewable diff is worse than no work at all. Say it once, plainly, and it holds.

Four rejected rounds before one landed

A late design job took five attempts. What made the fifth work was that the rejections stopped being about taste and started pointing at artifacts that already existed: “I prefer my main page circle bar and square favicon”, then “go back to the size it was before and check my harbour design”. Pointing at a thing beats describing a preference.

What the site looked like on the way

The landing page on its first day: fog-grey ground, a large grotesque headline, an orange accent button, and a column of mono-set facts beneath it.
Day one of my build. Seven files. The palette, the type pairing and the structure are already the ones from the specimen sheet, because I finished stages one and two before this page existed. The availability line still carries the mockup's invented contracting terms, which the product record caught before any of this deployed.
The landing page as deployed today, with the portrait rendered through the two-ink plate filters rather than as a plain photograph, and a simplified contact area.
Deployed today. The invented terms are gone and the contact area says only what is true. The portrait now runs through the two-ink plate filters rather than printing as a plain photograph, though at a 1px dot and a half-pixel offset the misregistration is sub-pixel at this size; it took three passes to tune. Open the live page and zoom in if you want to see the screen.

What transferred

Strip the tool names away and six things did the work. None of them are prompting tricks, which is rather the point.

PracticeThe engineering equivalent
A separate critic with its own contextYou do not review your own pull request
An external artifact to be beatenA test suite, not a careful reading
Batched review, submitted onceA pull request review, not a running commentary
Constraints written down before the workAn architecture decision record, written before the code rather than after it
Fan out only across independent workParallelise where there is no shared state
Tooling removed before the deployBuild artifacts are not shipping artifacts
The honest summary

The agent wrote nearly every line of markup on this site. It also widened its own scope once without being asked, produced a design I rejected four times running, and would have deployed a public .git directory if I had not asked for a sweep. The output is exactly as bounded as the instructions and the review, which is the same thing that is true of any engineer, and the same thing every page in this section says about patterns: the name is not the implementation.

Canonical sources