41554 blogs · [ { "id": "01a0d934-cb10-7353-a947-ed9025886380", "title": "Prompt Testing Is a Plinko Machine", "url": "https://joshowens.dev/prompt-testing-is-a-plinko-machine/", "published_at": "2026-09-22T00:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9b4d7242", "title": "No Quorum, No Vote: How the Graph Actually Works", "url": "https://joshowens.dev/no-quorum-no-vote-how-the-graph-works/", "published_at": "2026-08-18T00:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9bd6fcc5", "title": "My AI Coding Pipeline Has a Team of Rivals. It Rejects Code on Purpose.", "url": "https://joshowens.dev/ai-quality-loops-cabinet-of-rivals/", "published_at": "2026-07-28T00:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9c4594d3", "title": "The Harness Tax", "url": "https://joshowens.dev/the-harness-tax/", "published_at": "2026-07-23T00:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9c5637ee", "title": "I Had 40 Engineers and AI Tools. Here's Why Adoption Still Stalled.", "url": "https://joshowens.dev/why-ai-adoption-failed-engineering-team/", "published_at": "2026-06-30T09:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9d20492f", "title": "I Told AI to Write Tests First. It Wrote 3,400 of Them.", "url": "https://joshowens.dev/ai-tdd-pipeline/", "published_at": "2026-03-24T09:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9de758d5", "title": "I Mass-Deleted My MCP Servers. Here's What I Use Instead.", "url": "https://joshowens.dev/mcps-are-dead/", "published_at": "2026-03-19T09:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9e08b0a7", "title": "Your AI Doesn't Need Better Prompts. It Needs a Sprint Planning Session.", "url": "https://joshowens.dev/ceremonies-for-ai/", "published_at": "2026-02-17T09:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9f0025a3", "title": "Someone Put Claude in a Bash Loop Called Ralph Wiggum. It Changed How I Build Software.", "url": "https://joshowens.dev/ralph-wiggum-subagents/", "published_at": "2026-02-12T09:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9f878a54", "title": "Context Rot: Why Your AI Gets Dumber the Longer You Use It", "url": "https://joshowens.dev/context-rot/", "published_at": "2026-02-11T09:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9fd521b3", "title": "I Couldn't Find Anything in My Claude Chats, So I Accidentally Built a Life OS", "url": "https://joshowens.dev/life-os-markdown/", "published_at": "2026-02-10T09:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fd9fee3ca1", "title": "Changing code culture", "url": "https://joshowens.dev/changing-code-culture-in-your-company/", "published_at": "2019-06-05T08:04:18+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda0998bc0", "title": "Dealing with Burnout", "url": "https://joshowens.dev/dealing-with-burnout/", "published_at": "2018-02-20T22:04:18+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda0ee291f", "title": "5 SEO Tips for JavaScripters", "url": "https://joshowens.dev/5-seo-tips-for-javascripters/", "published_at": "2016-12-14T02:42:13+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda1028eab", "title": "Javascript is the gateway drug", "url": "https://joshowens.dev/javascript-is-the-gateway-drug/", "published_at": "2016-06-10T21:43:25+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda1849682", "title": "Building your own Meteor Galaxy hosting setup with Digital Ocean", "url": "https://joshowens.dev/building-your-own-meteor-galaxy-hosting-setup/", "published_at": "2016-03-29T16:24:31+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda18decde", "title": "But does Meteor scale?", "url": "https://joshowens.dev/but-does-meteor-scale/", "published_at": "2016-02-01T18:22:43+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda2081216", "title": "Using a CDN with your production Meteor app", "url": "https://joshowens.dev/using-a-cdn-with-your-production-meteor-app/", "published_at": "2016-01-18T21:49:40+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda24f2271", "title": "Building an admin app as a microservice with Meteor.js", "url": "https://joshowens.dev/building-an-admin-app-as-a-microservice-with-meteor-js/", "published_at": "2015-10-19T19:03:01+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda2ae52b3", "title": "Why Meteor needs a conference", "url": "https://joshowens.dev/why-meteor-needs-a-conference/", "published_at": "2015-09-08T13:24:42+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda2b80440", "title": "SSL and Meteor.js", "url": "https://joshowens.dev/ssl-and-meteor-js/", "published_at": "2015-08-27T17:01:31+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda3326643", "title": "Easily debugging meteor.js", "url": "https://joshowens.dev/easily-debugging-meteor-js/", "published_at": "2015-07-16T19:43:44+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda3a48a2d", "title": "Fat Models, Skinny Templates", "url": "https://joshowens.dev/fat-models-skinny-templates/", "published_at": "2015-06-17T05:40:16+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda44eec8c", "title": "Meteor Security 201", "url": "https://joshowens.dev/meteor-security-201/", "published_at": "2015-06-02T01:55:26+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda4d7c10c", "title": "The curious case of the unknowing leaky Meteor security", "url": "https://joshowens.dev/the-curious-case-of-the-unknowing-leaky-meteor-security/", "published_at": "2015-04-02T13:30:55+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda5c19a52", "title": "Facebook to acquire Meteor", "url": "https://joshowens.dev/facebook-to-acquire-meteor/", "published_at": "2015-04-01T11:52:59+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda63cafd7", "title": "Environment Settings and Security with Meteor.js", "url": "https://joshowens.dev/environment-settings-and-security-with-meteor-js/", "published_at": "2015-02-25T20:51:29+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda6e50229", "title": "Using MongoDB geospatial index with Meteor.js", "url": "https://joshowens.dev/using-mongodb-geospatial-index-with-meteor-js/", "published_at": "2015-02-20T06:00:50+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda7060bd5", "title": "Cucumber.js and Meteor - The why and how of it", "url": "https://joshowens.dev/cucumber-js-and-meteor-the-why-and-how-of-it/", "published_at": "2015-02-11T08:05:30+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda77bff80", "title": "Getting started with Meteor.js", "url": "https://joshowens.dev/getting-started-with-meteor-js/", "published_at": "2015-01-22T19:27:02+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda86377fb", "title": "Google analytics events, goals, and Meteor.js", "url": "https://joshowens.dev/google-analytics-events-goals-and-meteor-js/", "published_at": "2015-01-10T03:15:53+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda94866a7", "title": "What is Meteor.js?", "url": "https://joshowens.dev/what-is-meteor-js/", "published_at": "2014-12-18T05:09:53+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fda94caacd", "title": "Using MongoDB aggregations to power a Meteor.js publication", "url": "https://joshowens.dev/using-mongodb-aggregations-to-power-a-meteor-js-publication/", "published_at": "2014-12-11T16:06:23+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdaa2cf19a", "title": "Adding comments to your Meteor.js app", "url": "https://joshowens.dev/adding-comments-to-your-meteor-js-app/", "published_at": "2014-12-05T15:58:12+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdaae0d452", "title": "Dealing with Timezones in javascript", "url": "https://joshowens.dev/dealing-with-timezones-in-javascript/", "published_at": "2014-11-28T03:54:42+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdab794a2b", "title": "What is Meteor.js club?", "url": "https://joshowens.dev/what-is-meteor-js-club/", "published_at": "2014-11-18T16:28:27+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdac7148b2", "title": "Modulus vs Heroku vs Digital Ocean", "url": "https://joshowens.dev/modulus-vs-heroku-vs-digital-ocean/", "published_at": "2014-11-07T20:09:25+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdad2c86b6", "title": "Meteor Security 101", "url": "https://joshowens.dev/meteor-security-101/", "published_at": "2014-10-15T04:29:44+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdad788129", "title": "Meteor and Mongo Performance", "url": "https://joshowens.dev/meteor-and-mongo-performance/", "published_at": "2014-10-10T04:10:30+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdadbd1479", "title": "How to optimize your Mongo database for Meteor.js", "url": "https://joshowens.dev/how-to-optimize-your-mongo-database-for-meteor-js/", "published_at": "2014-10-01T04:17:04+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdae32d6a7", "title": "Meteor and Angular - a match made in heaven?", "url": "https://joshowens.dev/meteor-and-angular-a-match-made-in-heaven/", "published_at": "2014-09-23T12:53:41+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdaee9c3f3", "title": "How to scale a meteor.js app", "url": "https://joshowens.dev/how-to-scale-a-meteor-js-app/", "published_at": "2014-09-15T15:17:33+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdaf1bb436", "title": "Where is the ORM in Meteor?", "url": "https://joshowens.dev/where-is-the-orm-in-meteor/", "published_at": "2014-09-08T13:14:08+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdafef1ddc", "title": "How to organize your Meteor.js app", "url": "https://joshowens.dev/how-to-organize-your-meteor-js-app/", "published_at": "2014-08-31T05:24:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb0583b0f", "title": "How to upgrade your Meteor.js package to work for 0.9", "url": "https://joshowens.dev/how-to-upgrade-your-meteor-js-package-to-work-for-0-9/", "published_at": "2014-08-27T03:40:51+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb10a3b4f", "title": "What I've learned from a year with Meteor.js", "url": "https://joshowens.dev/what-ive-learned-from-a-year-with-meteor-js/", "published_at": "2014-08-26T05:07:06+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb19470ac", "title": "Why you shouldn't wait for Meteor 1.0 (to start using it)", "url": "https://joshowens.dev/why-you-shouldnt-wait-for-meteor-1-0-to-start-using-it/", "published_at": "2014-08-18T12:24:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb26a3195", "title": "The 'deeper why' of open source", "url": "https://joshowens.dev/the-deeper-why-of-open-source/", "published_at": "2013-11-10T17:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb2ad3ea5", "title": "Being a maker is in my DNA", "url": "https://joshowens.dev/being-a-maker-is-in-my-dna/", "published_at": "2013-07-23T16:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb366fb1f", "title": "Building Communities are hard", "url": "https://joshowens.dev/building-communities-are-hard/", "published_at": "2013-07-21T16:00:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb4171ea9", "title": "The right tool for your job", "url": "https://joshowens.dev/the-right-tool-for-your-job/", "published_at": "2010-07-13T05:41:26+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb4d572cc", "title": "Launch it, quick!", "url": "https://joshowens.dev/launch-it-quick/", "published_at": "2010-06-05T05:08:14+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb56c07ce", "title": "Throwing away code", "url": "https://joshowens.dev/throwing-away-code/", "published_at": "2010-04-23T04:20:15+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb5963079", "title": "Ensure with no rescue", "url": "https://joshowens.dev/ensure-with-no-rescue/", "published_at": "2010-04-11T03:31:08+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb5ac50f6", "title": "Lessons Learned Bootstrapping Harmony - Ordered List", "url": "https://joshowens.dev/lessons-learned-bootstrapping-harmony-ordered-list/", "published_at": "2010-04-02T20:15:00+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb694db73", "title": "Grow your app from seeds", "url": "https://joshowens.dev/grow-your-app-from-seeds/", "published_at": "2010-03-29T14:51:47+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb6ea5789", "title": "TextMate shortcuts you should be using « require ‘brain’", "url": "https://joshowens.dev/textmate-shortcuts-you-should-be-using-require/", "published_at": "2010-03-16T15:29:57+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb7cfde05", "title": "Be pragmatic with your time", "url": "https://joshowens.dev/be-pragmatic-with-your-time/", "published_at": "2010-03-09T14:08:11+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb8381689", "title": "Fun with ActiveRecord", "url": "https://joshowens.dev/fun-with-activerecord/", "published_at": "2010-02-16T17:53:24+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb9165ac9", "title": "Mocking and Stubbing can be evil", "url": "https://joshowens.dev/mocking-and-stubbing-can-be-evil/", "published_at": "2010-01-06T18:40:32+00:00" }, { "id": "01a08791-2ce8-70c1-8424-46fdb98a0a95", "title": "Building an api", "url": "https://joshowens.dev/building-an-api/", "published_at": "2009-11-25T16:28:00+00:00" } ] posts Claim your blog
Back to joshowens.dev
Blog · corpus.blog/blogs/joshowens.dev/posts

joshowens.dev

joshowens.dev

2026

2019

2018

2016

2015

2014

2013

2010

2009