01 / Guide
A Test That Never Fails Is Not Reassuring
Tests earn trust by exposing mistakes. A practical look at boundaries, regressions and failure cases, using the verification workflow behind this static site.
Writing
All published writing, in chronological order.
01 / Guide
Tests earn trust by exposing mistakes. A practical look at boundaries, regressions and failure cases, using the verification workflow behind this static site.
02 / Essay
A forest-monitoring exercise shows how buffering, recovery targets and limited bandwidth turn software architecture into a series of explicit trade-offs.
03 / Essay
Reliability becomes visible when networks fail and work must recover. Explore buffering, bounded retries and requirements that describe useful failure behavior.
04 / Essay
Fewer clicks can still mean more confusion. A practical argument for interfaces that expose state, explain choices and reduce the memory a task requires.
05 / Guide
Turn vague promises about reliability into measurable scenarios, with explicit failure conditions, recovery boundaries and evidence a test can actually collect.
06 / Essay
Strategy, Adapter and Observer help name design choices. Their value depends on the forces they address, their costs and the boundaries they preserve.
07 / Field note
Removing a visitor counter simplified an entire operating model. A field note on maintenance cost, safe deletion and responsibilities hidden behind features.
08 / Essay
Web systems accumulate complexity around state, URLs, caches and integrations. Follow a catalogue change across boundaries a polished interface can hide.
09 / Field note
Building this website with a coding agent changed the unit of delegation: a bounded engineering task, with repository context, checks and a reviewable result.
10 / Essay
AI-assisted changes need inspectable evidence: repository context, meaningful tests, visual checks and diff review. Generation is the beginning of the workflow.
11 / Guide
An impressive output is a starting point. Build an evaluation plan around realistic tasks, visible failures, human review and changes to prompts or models.
12 / Guide
An LLM workflow needs a route for uncertainty, invalid output and exhausted retries. Design review queues and deterministic checks before automating decisions.
13 / Essay
Better AI-assisted work starts with approved decisions, useful evidence and clear limits. A practical approach to context that survives real project changes.
14 / Essay
Visual workflows can coordinate useful work without owning each rule. Examine testing, recovery and the point where domain logic deserves its own boundary.
15 / Guide
A practical way to choose automation boundaries for catalogue work: stable transformations, inspectable inputs, visible exceptions and deliberate human review.
16 / Guide
Latency, cost, rate limits and recovery shape an AI feature long before a model benchmark settles the choice. Design the dependency around the actual user task.
17 / Essay
Revisiting FiscoBud exposed a useful distinction: a coherent product concept can still rest on untested problems. Feature planning needs evidence underneath it.
18 / Essay
Pricing shapes who a SaaS product serves and how customers experience its value. Explore packaging, usage measures and honest tests of willingness to pay.
19 / Essay
The useful work begins before building: identify a risky assumption, choose evidence that could change a decision and design the smallest meaningful experiment.
20 / Essay
Distribution, buying decisions and trust belong in product discovery. Trace the route from a customer problem to a first conversation and useful adoption.
21 / Guide
Compliments cannot carry a product decision. Connect assumptions to recent behavior, existing alternatives and experiments that can genuinely change the plan.
22 / Essay
Public updates can create conversations, but attention alone cannot validate a product. Define the learning goal, audience and evidence before sharing work.
23 / Essay
Reconsidering an all-in-one product can reveal a clearer entry point. Notes on FiscoBud, focused scope, educational support and a credible path to expansion.
24 / Field note
Supplier files become a systems problem when identifiers, variants, prices and stock disagree. A practical way to build a catalogue you can safely publish.
25 / Essay
A roadmap can explain strategic choices without pretending uncertainty has disappeared. Make bets, dependencies and review points explicit before promises.
26 / Guide
Supplier files need an explicit boundary: preserve the input, detect its schema, normalize carefully and validate meaning before creating channel exports.
27 / Field note
Multi-channel commerce is an integration problem: shared product facts meet different schemas, publication states and failure modes that need explicit handling.
28 / Essay
WooCommerce can support commerce, while integrations and operating rules need their own design. Examine data ownership, extensions and recovery at the edges.
29 / Guide
The happy path is only the beginning. Design integrations around ownership, retries, idempotency, partial updates and reconciliation of uncertain outcomes.
30 / Field note
A small visitor counter was pulling this portfolio toward a backend. Removing it made the hosting decision simpler without giving up the features that mattered.
31 / Guide
Catalogue, prices, orders and stock overlap across commerce systems. Decide who owns each fact, how changes travel and how conflicts are detected and repaired.
32 / Essay
Product data, approvals and exception queues turn strategy into daily work. Make decisions explicit before automating the spreadsheet that holds them.
33 / Essay
Scripts, publication gates and nearby documentation turn repeated project decisions into a predictable workflow that humans and coding agents can both follow.
34 / Guide
Versioned articles, validation, static builds and search indexing form a publishing pipeline. Here is how this site connects editorial changes to delivery.
35 / Guide
A stock number means little without ownership, reservations and freshness. Explore overselling, delayed updates and reconciliation across sales channels.
36 / Guide
Files, permissions, processes, ports and logs make infrastructure inspectable. Use a Linux investigation to narrow a failure without breaking more things.
37 / Essay
Control can live in source, content and a portable build. A practical look at static hosting, independent recovery and the limits of infrastructure ownership.
38 / Essay
Memory, storage, thermals and ergonomics shape daily development. Evaluate a laptop through a workflow and its constraints, rather than a specification contest.
39 / Essay
More apps can create more places for work to disappear. Design a productivity stack around clear ownership, fewer handoffs and recovery after interruption.
40 / Guide
When a service becomes part of your infrastructure, migration and data access matter. Compare SaaS tools through boundaries, recovery and a tested exit plan.
41 / Essay
Complexity grows when components, people and states must agree. A practical look at coupling, shared state and the coordination hidden inside architecture.
42 / Guide
Turn vague performance expectations into testable scenarios, with explicit workloads, measurement boundaries and targets that reflect real user needs.
43 / Essay
Choices impose reading, comparison and recovery costs. Design defaults and progressive disclosure around what people need to understand before acting.
44 / Essay
Architecture decisions depend on assumptions that change. Record context, review triggers and migration costs so yesterday’s sensible choice stays visible.
45 / Guide
Make repository tasks verifiable with acceptance criteria, focused context, meaningful tests, visual review and clear boundaries for a production release.
46 / Essay
Useful AI context includes repository state, schemas, examples and tool results. Curate evidence and authority instead of polishing one instruction forever.
47 / Guide
Design AI features around inputs, retrieval, evaluation and recovery. A model response needs a reliable product workflow before anyone can depend on it.
48 / Field note
Make repeatable Python catalogue jobs with explicit inputs, rejected rows, dry runs and deterministic output, then define what a successful rerun means.
49 / Essay
Scope a first product around the assumption you need to test. Choose evidence, participants and decision rules before turning a hypothesis into a backlog.
50 / Essay
Use interviews to understand recent behavior, workarounds and constraints. Treat feature requests as clues to investigate before committing to a solution.
51 / Essay
Design experiments that can stop a weak idea as well as support it. Define decisions, measurement checks and stopping rules before interpreting results.
52 / Essay
Limited time and operating capacity shape architecture. Use the static publishing workflow to examine fixed costs, reversibility and justified complexity.
53 / Field note
Treat supplier spreadsheets as versioned external interfaces. Make schemas, provenance, missing values and identity rules explicit before importing rows.
54 / Guide
A catalogue job can succeed while publishing incorrect prices or mappings. Add semantic checks, reviewable changes and recovery to the import boundary.
55 / Essay
Integration failures emerge from timing and conflicting assumptions. Design for retries, duplicate delivery, partial updates and evidence across boundaries.
56 / Guide
Distinguish internal IDs, supplier references, SKUs and GTINs. Preserve identity, packaging context and mappings before automating downstream catalogue work.
57 / Essay
Clear commits preserve the reasoning behind software changes. Make history useful for review, debugging and recovery without burying behavior in noise.
58 / Guide
Separate DNS delegation, hosting, TLS and HTTP redirects. Lessons from moving this static site from SiteGround toward its verified HostingPerTe deployment.
59 / Guide
Build predictable releases with validation, restricted credentials and manifest ownership. Examine the boundaries of this static site’s deployment pipeline.
60 / Essay
Choose development tools that make correct work easier. Balance formatting, linting, types and tests against setup friction, exceptions and maintenance.