Bazel, Symfony, and Long Migrations
A long migration should be easy to pause and resume. An old PHP-to-Symfony rewrite taught me how to move a large Bazel repository without stopping the release train.
Loading...
Theory, judgment, design, and reflective notes about building software that survives contact with reality.
A long migration should be easy to pause and resume. An old PHP-to-Symfony rewrite taught me how to move a large Bazel repository without stopping the release train.
Writing code used to build some understanding along the way. AI can now produce the diff without producing that understanding.
A number from agricultural history made the AI analogy click: farming did not vanish when labor shrank, and software may be entering a similar turn.
AI lowered the cost of generating code. The expensive parts moved into understanding, verification, maintenance, and trust.
Ad lazy loading is not just "load when visible". A useful implementation separates layout reservation, bid requests, rendering, and refresh policy, then tunes each step around real latency and viewability goals.
A runtime bidder from a floor-interception integration, reduced to one synthetic 1×1 response. Here is the bid shape, why the fields are there, and how to check that Prebid accepts it.
A practical TypeScript pattern for chatbot message parsing: small predicates decide when a parser runs, parser functions emit domain events, and the dispatcher stops only when a command asks it to.
Git uses the words ours and theirs from the point of view of the operation it is currently performing. That is why they mean one thing during merge and can feel reversed during rebase.
A small Promise bridge lets redux-form hand validation to a Redux Saga and receive field errors back. An integration example for older Redux applications.
Piet Hein’s short poem captures something I love about learning: making mistakes again, but a little less each time.