41554 blogs · [ { "id": "01a087a1-d966-73a6-ab87-ebbb1a0cc64b", "title": "The Agentic Test Pyramid", "url": "https://matthewboston.com/blog/the-agentic-test-pyramid.html", "published_at": "2026-06-03T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1b03097f", "title": "Building a Platform Is a Balancing Act", "url": "https://matthewboston.com/blog/building-a-platform-is-a-balancing-act.html", "published_at": "2026-04-21T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1bf4d40e", "title": "Don't Just Build with AI — Learn Through It", "url": "https://matthewboston.com/blog/dont-just-build-with-ai-learn-through-it.html", "published_at": "2026-04-14T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1ca494e1", "title": "Speed Is Only Useful If You're Going in the Right Direction", "url": "https://matthewboston.com/blog/speed-is-only-useful-if-youre-going-in-the-right-direction.html", "published_at": "2026-03-31T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1ce7c466", "title": "Review the Outcome, Not the Output", "url": "https://matthewboston.com/blog/review-the-outcome-not-the-output.html", "published_at": "2026-03-26T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1d4f6ab5", "title": "Don't Hire Me", "url": "https://matthewboston.com/blog/dont-hire-me.html", "published_at": "2026-03-25T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1e150ac5", "title": "Use AI Agents to Break Your App", "url": "https://matthewboston.com/blog/use-ai-agents-to-break-your-app.html", "published_at": "2026-03-21T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1eda137a", "title": "If You Can't One-Shot Your Feature, It's a SKILL.md Issue", "url": "https://matthewboston.com/blog/if-you-cant-one-shot-your-feature-its-a-skill-md-issue.html", "published_at": "2026-03-14T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1f114d16", "title": "Turning Your Terminal Into an AI Dev Team", "url": "https://matthewboston.com/blog/turning-your-terminal-into-an-ai-dev-team.html", "published_at": "2026-03-13T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1f56670a", "title": "Coding Agents Need a Faster Feedback Loop", "url": "https://matthewboston.com/blog/coding-agents-need-a-faster-feedback-loop.html", "published_at": "2026-03-06T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb1fdb5da9", "title": "Every CLI Should Include Agent Skills", "url": "https://matthewboston.com/blog/every-cli-should-include-agent-skills.html", "published_at": "2026-02-27T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb20670877", "title": "A Bad Line of Research Is a Hundred Bad Lines of Code", "url": "https://matthewboston.com/blog/a-bad-line-of-research-is-a-hundred-bad-lines-of-code.html", "published_at": "2026-02-20T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb214468f6", "title": "AI Never Would Have Installed left-pad", "url": "https://matthewboston.com/blog/ai-never-would-have-installed-left-pad.html", "published_at": "2026-01-20T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb21b61abc", "title": "Code Was Never the Goal", "url": "https://matthewboston.com/blog/code-was-never-the-goal.html", "published_at": "2026-01-19T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb22164bb2", "title": "Vibe-Coded Apps Need Real Security", "url": "https://matthewboston.com/blog/vibe-coded-apps-need-real-security.html", "published_at": "2026-01-18T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb225032a1", "title": "Code Quality Still Matters", "url": "https://matthewboston.com/blog/code-quality-still-matters.html", "published_at": "2026-01-17T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb22db5d41", "title": "My AI Recruiter Honeypot Worked", "url": "https://matthewboston.com/blog/my-ai-recruiter-honeypot-worked.html", "published_at": "2026-01-16T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb23b9ecb8", "title": "Stay Out of the Dumb Zone", "url": "https://matthewboston.com/blog/stay-out-of-the-dumb-zone.html", "published_at": "2025-12-31T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb23fc95ce", "title": "I Got Tired of Writing Bad Commit Messages", "url": "https://matthewboston.com/blog/i-got-tired-of-writing-bad-commit-messages.html", "published_at": "2025-12-05T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb24222b2b", "title": "Your Tests That Make Network Requests Are Flaky", "url": "https://matthewboston.com/blog/your-tests-that-make-network-requests-are-flaky.html", "published_at": "2025-11-20T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb24b1bb9d", "title": "Over-Engineering Is Just Future-Proofing Gone Too Far", "url": "https://matthewboston.com/blog/over-engineering-is-just-future-proofing-gone-too-far.html", "published_at": "2025-10-20T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb25655757", "title": "Building a Platform Is Raising the Floor for Everyone", "url": "https://matthewboston.com/blog/building-a-platform-is-raising-the-floor-for-everyone.html", "published_at": "2025-06-13T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb264235c0", "title": "Ship as Fast as Possible, but Not Faster", "url": "https://matthewboston.com/blog/ship-as-fast-as-possible-but-not-faster.html", "published_at": "2025-06-06T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2657ba05", "title": "Sparse Is Better than Dense", "url": "https://matthewboston.com/blog/sparse-is-better-than-dense.html", "published_at": "2025-05-20T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb26b165f6", "title": "Flat Is Better Than Nested", "url": "https://matthewboston.com/blog/flat-is-better-than-nested.html", "published_at": "2025-04-04T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb26fc3eaf", "title": "I Built an AI Tool to Write My Brag Document", "url": "https://matthewboston.com/blog/i-built-an-ai-tool-to-write-my-brag-document.html", "published_at": "2025-03-29T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb27a1c2e7", "title": "Complex Is Better Than Complicated", "url": "https://matthewboston.com/blog/complex-is-better-than-complicated.html", "published_at": "2025-03-28T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2856cc85", "title": "Simple Is Better Than Complex", "url": "https://matthewboston.com/blog/simple-is-better-than-complex.html", "published_at": "2025-03-27T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb28fd2487", "title": "Explicit Is Better Than Implicit", "url": "https://matthewboston.com/blog/explicit-is-better-than-implicit.html", "published_at": "2025-03-26T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb299ade18", "title": "Today I Learned: Using BETWEEN with SQL Dates", "url": "https://matthewboston.com/blog/today-i-learned-using-between-with-sql-dates.html", "published_at": "2018-08-10T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb29edc43c", "title": "Today I Learned: Docker Compose Networks", "url": "https://matthewboston.com/blog/today-i-learned-docker-compose-networks.html", "published_at": "2018-06-14T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2aa16048", "title": "Understanding Clojure: cond and condp", "url": "https://matthewboston.com/blog/understanding-clojure-cond-and-condp.html", "published_at": "2016-01-27T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2ace7cf8", "title": "Datomic Performance with Clause Ordering", "url": "https://matthewboston.com/blog/datomic-performance-with-clause-ordering.html", "published_at": "2014-08-13T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2b13ee77", "title": "The Avocado Project: Day 1", "url": "https://matthewboston.com/blog/the-avocado-project-day-1.html", "published_at": "2014-08-01T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2b1b6eec", "title": "Setting Null Values in Datomic", "url": "https://matthewboston.com/blog/setting-null-values-in-datomic.html", "published_at": "2014-04-21T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2b90bda5", "title": "Clojure Protocol Namespaces", "url": "https://matthewboston.com/blog/clojure-protocol-namespaces.html", "published_at": "2014-03-19T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2c561692", "title": "Mixpanel Mock", "url": "https://matthewboston.com/blog/mixpanel-mock.html", "published_at": "2014-03-12T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2d3451e6", "title": "Implementing Clojure Protocols", "url": "https://matthewboston.com/blog/implementing-clojure-protocols.html", "published_at": "2014-01-30T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2ddb7e38", "title": "Null Object in Groovy", "url": "https://matthewboston.com/blog/null-object-in-groovy.html", "published_at": "2014-01-18T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2e2e6972", "title": "When to Extract Constants", "url": "https://matthewboston.com/blog/when-to-extract-constants.html", "published_at": "2013-08-16T00:00:00+00:00" }, { "id": "01a087a1-d966-73a6-ab87-ebbb2e5670ac", "title": "Hello World!", "url": "https://matthewboston.com/blog/hello-world.html", "published_at": "2013-07-30T00:00:00+00:00" } ] posts Claim your blog
Back to matthewboston.com
Blog · corpus.blog/blogs/matthewboston.com/posts

matthewboston.com

matthewboston.com

2026

2025

2018

2016

2014

2013