41554 blogs · [ { "id": "01a087a1-0cb9-7285-a95b-9104451374a2", "title": "Make Your Codebase Inevitable", "url": "https://www.martinrichards.me/post/make_your_codebase_inevitable/", "published_at": "2026-07-25T13:25:59+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-9104458d3e3a", "title": "What's Inside the Harness", "url": "https://www.martinrichards.me/post/whats_inside_the_harness/", "published_at": "2026-07-24T19:44:55+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-910445fbb737", "title": "Test Behaviour, Not Implementation", "url": "https://www.martinrichards.me/post/test_behaviour_not_implementation/", "published_at": "2026-05-17T06:39:41+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-910446688b97", "title": "Are we microservice yet? More services than people.", "url": "https://www.martinrichards.me/post/are_we_microservice_yet/", "published_at": "2026-04-30T05:25:31+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-910446fc3d5c", "title": "Building Your Own Agent Harness", "url": "https://www.martinrichards.me/post/building_your_own_agent_harness/", "published_at": "2026-03-10T00:00:00+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-910447e33656", "title": "Real-Time Ledger Systems: Scaling a Double-Entry Ledger for a Massive PSP", "url": "https://www.martinrichards.me/post/ledger_p2_scaling_double_entry_ledger_massive_psp/", "published_at": "2026-01-18T10:00:00+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-9104487506e7", "title": "Real-Time Ledger Systems: Optimistic Locking in a Double-Entry Ledger", "url": "https://www.martinrichards.me/post/ledger_p1_optimistic_locking_real_time_ledger/", "published_at": "2026-01-17T08:00:00+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-9104495c0bf5", "title": "Relational DynamoDB: Advanced Patterns and Production Realities", "url": "https://www.martinrichards.me/post/ddb_p3_advanced_patterns_and_production_realities/", "published_at": "2025-11-02T08:00:00+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-910449886008", "title": "Relational DynamoDB: Building GitHub's Backend in DynamoDB", "url": "https://www.martinrichards.me/post/ddb_p2_building_githubs_backend_single_table_design_in_practice/", "published_at": "2025-11-02T08:00:00+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044a6b54ed", "title": "Relational DynamoDB: When DynamoDB Stops Being Simple", "url": "https://www.martinrichards.me/post/ddb_p1_when_dynamodb_stops_being_simple/", "published_at": "2025-11-02T08:00:00+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044a74bf38", "title": "Events vs Commands: The Distinction Everyone Always Forgets", "url": "https://www.martinrichards.me/post/events_vs_commands_the_distinction_everyone_always_forgets/", "published_at": "2025-07-20T06:25:31+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044abbd488", "title": "EDA for the Rest of Us: Operational Challenges", "url": "https://www.martinrichards.me/post/eda_for_the_rest_of_us_operational_challenges/", "published_at": "2025-07-19T06:25:31+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044ac49831", "title": "EDA for the Rest of Us: Consumption Patterns", "url": "https://www.martinrichards.me/post/eda_for_the_rest_of_us_consumption_patterns/", "published_at": "2025-07-12T05:25:31+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044b100308", "title": "EDA for the Rest of Us: Communication Patterns", "url": "https://www.martinrichards.me/post/eda_for_the_rest_of_us_communication_patterns/", "published_at": "2025-07-01T05:30:00+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044b5e5397", "title": "EDA for the Rest of Us: Event Design Patterns", "url": "https://www.martinrichards.me/post/eda_for_the_rest_of_us_event_design_patterns/", "published_at": "2025-06-29T06:25:31+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044c459e60", "title": "EDA for the Rest of Us: A Guide for the Confused", "url": "https://www.martinrichards.me/post/eda_for_the_rest_of_us_a_guide_for_the_confused/", "published_at": "2025-06-28T15:25:31+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044c60d4f1", "title": "Just use Make as your Task Runner", "url": "https://www.martinrichards.me/post/just_use_make_as_your_task_runner/", "published_at": "2024-09-28T06:32:46+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044d07782a", "title": "An Idiots Guide to mocking HTTP with MSW", "url": "https://www.martinrichards.me/post/an_idiots_guide_to_msw/", "published_at": "2024-09-24T06:18:57+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044dfa0003", "title": "Deploying NodeJS with pnpm and tsx", "url": "https://www.martinrichards.me/post/nodejs_with_pnpm_and_tsx/", "published_at": "2023-11-12T10:55:26+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044e03624c", "title": "Deploying NodeJS Apps with ESBuild and Docker", "url": "https://www.martinrichards.me/post/building_nodejs_apps_with_esbuild_and_docker/", "published_at": "2023-10-28T10:42:02+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044e5e407a", "title": "Python, Poetry and Docker", "url": "https://www.martinrichards.me/post/python_poetry_docker/", "published_at": "2023-10-21T08:04:03+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044f06df65", "title": "The 3 pillars of observability in Quarkus", "url": "https://www.martinrichards.me/post/observability_in_quarkus/", "published_at": "2022-08-23T07:54:37+00:00" }, { "id": "01a087a1-0cb9-7285-a95b-91044f7f27d8", "title": "Adding OpenAPI Specs to Finatra", "url": "https://www.martinrichards.me/post/finatra_openapi/", "published_at": "2022-07-30T07:54:37+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a0757d46", "title": "Unit Testing: Ain't nobody got time for that!", "url": "https://www.martinrichards.me/post/unit_testing_aint_nobody_got_time_for_that/", "published_at": "2018-03-02T00:00:00+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a1189ed5", "title": "How to find what you are looking for?", "url": "https://www.martinrichards.me/post/how_to_find_what_you_are_looking_for/", "published_at": "2018-01-28T05:40:19+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a1c49ad8", "title": "Apache Camel Part II: TDDing CSV Parsing", "url": "https://www.martinrichards.me/post/tdding_csv_parsing/", "published_at": "2017-07-08T18:42:08+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a29c4c5a", "title": "Efficient XML Parsing with Java.", "url": "https://www.martinrichards.me/post/efficient_xml_parsing_in_java/", "published_at": "2017-06-30T18:42:08+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a323dd59", "title": "Apache Camel Part I: Guicing Camel", "url": "https://www.martinrichards.me/post/guicing_camel/", "published_at": "2017-01-06T22:21:45+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a3a8bbd9", "title": "EIP and Apache Camel", "url": "https://www.martinrichards.me/post/enteprise_integration_patterns_and_apache_camel/", "published_at": "2016-10-11T04:37:13+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a46dd1f3", "title": "Wordpress Done Right", "url": "https://www.martinrichards.me/post/wordpress_done_right/", "published_at": "2016-10-05T19:44:02+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a4e21d03", "title": "WebAudio fun with a theremin", "url": "https://www.martinrichards.me/post/web_audio_fun_with_theremin/", "published_at": "2016-05-22T20:27:59+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a4fe2963", "title": "Build your own Heroku with Dokku", "url": "https://www.martinrichards.me/post/build_your_own_heroku_with_dokku/", "published_at": "2016-05-09T05:40:19+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a5d82412", "title": "Deploying a static site to S3", "url": "https://www.martinrichards.me/post/deploying-a-static-website-to-s3/", "published_at": "2016-04-10T07:20:28+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a63c503e", "title": "Troll people with OmniSharp Emacs", "url": "https://www.martinrichards.me/post/troll_people_with_omnisharp_emacs/", "published_at": "2016-02-06T17:12:23+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a6f1b9b7", "title": "Contact", "url": "https://www.martinrichards.me/contact/", "published_at": "2016-02-06T13:18:10+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a7db6ba4", "title": "Projects", "url": "https://www.martinrichards.me/projects/", "published_at": "2016-02-06T13:16:14+00:00" }, { "id": "01a087a1-0cba-70b1-9c54-ef96a8a07f81", "title": "About", "url": "https://www.martinrichards.me/about/", "published_at": "2016-02-06T13:08:17+00:00" } ] posts Claim your blog
Back to martinrichards.me
Blog · corpus.blog/blogs/martinrichards.me/posts

martinrichards.me

martinrichards.me

2026

2025

2024

2023

2022

2018

2017

2016