Frontend
The key Prop Is a Reconciliation Contract
The key Prop Is a Reconciliation Contract
What React does with keys, why index keys break forms, and how lists should identify rows.
Engineering Journal
A reviewable knowledge base beside the portfolio. Published notes only. Interview prep lives in the Interview Lab. Planned titles stay in the topic map until they are written.
Frontend
The key Prop Is a Reconciliation Contract
What React does with keys, why index keys break forms, and how lists should identify rows.
Frontend
The React Compiler Is a Purity Contract, Not a Speed Hack
React Compiler only pays off if render stays pure. Memo soup is not the same contract. Here is what I change in components before I trust automatic memoization.
Frontend
Next.js `'use cache'` Is a Commit, Not a Faster Fetch
Cache Components in Next.js look like a performance flag. They are a freshness contract: what is cached, who invalidates it, and what the user is allowed to see stale.
Frontend
TypeScript as an API Contract, Not a Costume
Share types across producer and consumer, validate at the edge, and stop trusting JSON because it compiled once.
Frontend
A Mental Model for React Hooks That Survives Production
Treat hooks as subscriptions to render, not lifecycle methods with new names. The model that prevents stale state and mystery effects.
Cloud
AWS Lambda Failure Modes You Should Budget For
Timeouts, retries, partial batch failure, and the handler that is not idempotent.
AEM
The AEM Author–Developer Contract
A component is successful when an author can use it without a Slack thread. Dialogs, names, and defaults are the product.

If the company that sells the chips also owns the default place engineers pull open models, pinning, licensing, and exit plans stop being theoretical.

Frontier models are being wrapped in eval gates and misalignment monitors. Most product agents still log prompts and hope. That gap is now the production problem.

D1, Turso, LiteFS, and a decade of Postgres-by-default have teams rediscovering a file database. The win is locality. The bill is replication and migration discipline.

Retrieval-augmented generation looks finished in a notebook. In production it is a search problem, a freshness problem, and an evaluation problem wearing a chat UI.

Retries are not an edge case. If a client can double-submit a payment, a reward, or a provision call, the header that names the attempt is the interface.

Hybrid key exchange is landing in browsers and CDNs. The engineering work is inventory, dual-stack certificates, and not breaking the middleboxes you forgot you had.

A golden path is paved workflows, paved defaults, and a team that owns the pavement. A catalog of links with a search bar is a bookmark manager.

Managed functions removed capacity planning. They did not remove tail latency, cold starts, or the cost of chatty downstreams. You still have a budget. It is just itemized differently.

Dashboards that cannot tell you whether to wake someone up are decoration. Start from the user promise, then buy traces.

The interesting TypeScript story is not frontend fashion. It is the language teams use to glue APIs, workers, and infrastructure code that used to be a pile of untyped scripts.

Container queries, :has(), and nested CSS removed a generation of JavaScript measuring hacks. The remaining work is restraint: not every layout needs a new primitive.

A flag in production is a smaller, reversible risk than a branch that only exists on one laptop. Trunk-based delivery is an operations choice, not a Git fashion.

xz and a decade of npm incidents taught the same lesson: you run other people's code. Pinning, provenance, and a small dependency graph beat a PDF named policy.

Client-rendered apps solved a 2015 shipping problem. They also shipped empty shells and waterfalls. Server Components are a boundary tool, not a rewrite religion.

CRDTs and sync engines are impressive. Users still need a story for conflict, offline writes, and what happens when two cashiers sell the last seat.

Models can draft a query. They cannot own the index, the cardinality, or the 2 a.m. plan that scans the wrong partition. Relational literacy is still leverage.

429s are not just a WAF rule. They encode who gets capacity, what a client should do next, and whether your API is a partner or a trap.

WebAssembly in the data center is useful when you need isolation, multi-language plugins, or a portable sandbox. It is not a replacement for a well-run service.

How an activation-to-reward pipeline using SQS, SNS, Lambda, and Talon.One keeps fintech loyalty flows decoupled and operable.

An event log is a tool for audit and replay. It is not a requirement for every domain object. Most systems need durable facts and a projection, not a conference architecture.

When the tab can run serious GPU work, the architecture question is not 'can we?' It is 'should this run next to the user's passwords, and what is the fallback?'

How Claude and Cursor can compress design, coding, and review cycles while keeping architecture and production decisions human-owned.

Lessons from enterprise Adobe Experience Manager delivery on making component libraries useful for authors, not just developers.

A practical account of performance work on a high-availability insurance technology platform: find the critical path, measure, then simplify.

What matters when Lambda, S3, and Step Functions process high-volume data under production SLAs.