<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog – Christoph Sens</title>
    <link>https://www.christoph-sens.com/blog/</link>
    <description>Success stories and articles by Christoph Sens on Kotlin, Java, AWS, architecture and software development.</description>
    <language>en</language>
    <atom:link href="https://www.christoph-sens.com/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>When the Target System Can No Longer Cope: Circuit Breakers as Protection for Legacy Backends</title>
      <link>https://www.christoph-sens.com/blog/circuit-breakers-for-legacy-backends/</link>
      <guid>https://www.christoph-sens.com/blog/circuit-breakers-for-legacy-backends/</guid>
      <pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate>
      <description>Why batching and rate limiting alone are not enough, how a circuit breaker coupled with queue processing keeps the dead letter queue empty – and how latency-based configuration brought an overloaded legacy system back to 99.9% availability.</description>
    </item>
    <item>
      <title>Hexagonal architecture in practice: keeping domain logic and technology apart</title>
      <link>https://www.christoph-sens.com/blog/hexagonal-architecture-in-practice/</link>
      <guid>https://www.christoph-sens.com/blog/hexagonal-architecture-in-practice/</guid>
      <pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate>
      <description>While replacing a monolith in the energy sector step by step, I build every new application hexagonally: model, application, adapter and bootstrap as separate Gradle modules, enforced with ArchUnit. What this gives decision-makers, architects and developers, why it speeds up AI-assisted development – and where it hurts.</description>
    </item>
    <item>
      <title>Keeping dependencies up to date: why Renovate and Dependabot belong in every codebase</title>
      <link>https://www.christoph-sens.com/blog/keeping-dependencies-up-to-date/</link>
      <guid>https://www.christoph-sens.com/blog/keeping-dependencies-up-to-date/</guid>
      <pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate>
      <description>Software ages even when nobody touches it. Why many small updates cost less than rare big migrations, how Renovate and Dependabot take load off developers – and when the process can be fully automated, given good enough test coverage.</description>
    </item>
    <item>
      <title>Most integration tests are unit tests in disguise</title>
      <link>https://www.christoph-sens.com/blog/most-integration-tests-are-unit-tests-in-disguise/</link>
      <guid>https://www.christoph-sens.com/blog/most-integration-tests-are-unit-tests-in-disguise/</guid>
      <pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate>
      <description>A @SpringBootTest is quick to write and expensive to run. Testing domain logic through integration tests costs context restarts, Testcontainers start-ups and long pipelines. How hexagonal architecture puts the test pyramid back on its feet – and which Spring levers take a pipeline from 40 to 20 minutes.</description>
    </item>
    <item>
      <title>Replacing a monolith without putting operations at risk</title>
      <link>https://www.christoph-sens.com/success-stories/monolith-replacement/</link>
      <guid>https://www.christoph-sens.com/success-stories/monolith-replacement/</guid>
      <pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate>
      <description>An energy supplier is replacing an unmaintainable PHP monolith for market communication step by step. In a load test, the new aggregation processed 70,000 market data records in under a minute.</description>
    </item>
    <item>
      <title>A tariff change in e-mobility – on time for the new year</title>
      <link>https://www.christoph-sens.com/success-stories/tariff-change-e-mobility/</link>
      <guid>https://www.christoph-sens.com/success-stories/tariff-change-e-mobility/</guid>
      <pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate>
      <description>At the turn of the year, a car maker’s charging tariffs change. Hardly anyone wanted to take on the change in the billing backend – I took it on as a new team member.</description>
    </item>
    <item>
      <title>What the test suite does not find: how I harden a JSONPath library</title>
      <link>https://www.christoph-sens.com/blog/what-the-test-suite-does-not-find/</link>
      <guid>https://www.christoph-sens.com/blog/what-the-test-suite-does-not-find/</guid>
      <pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate>
      <description>Passing all 715 cases of the official test suite is not enough. Fuzzing, differential tests, mutation testing and a close reading of the specification found bugs in Treetrail and Eclipse Parsson that no test suite shows – and a bug in the test suite itself.</description>
    </item>
    <item>
      <title>Treetrail: Why I wrote a JSONPath library for Java</title>
      <link>https://www.christoph-sens.com/blog/why-i-wrote-treetrail-jsonpath-for-java/</link>
      <guid>https://www.christoph-sens.com/blog/why-i-wrote-treetrail-jsonpath-for-java/</guid>
      <pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate>
      <description>Treetrail brings RFC 9535, the JSONPath standard, to Java: the same results as in other languages, safe with untrusted queries, adapters for Jackson, Gson and JSON-P – and an orderly way off Jayway JsonPath.</description>
    </item>
    <item>
      <title>Extended clients for Kotlin – closing a gap in the AWS ecosystem</title>
      <link>https://www.christoph-sens.com/success-stories/kotlin-extended-clients/</link>
      <guid>https://www.christoph-sens.com/success-stories/kotlin-extended-clients/</guid>
      <pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate>
      <description>AWS offers extended clients for large SQS and SNS messages for Java only. The Kotlin counterpart: around 730 lines instead of thousands, no Jackson, tested and on Maven Central.</description>
    </item>
    <item>
      <title>PDF generation in microservice landscapes</title>
      <link>https://www.christoph-sens.com/success-stories/pdf-generation/</link>
      <guid>https://www.christoph-sens.com/success-stories/pdf-generation/</guid>
      <pubDate>Fri, 14 Jun 2024 00:00:00 GMT</pubDate>
      <description>A microservice renders multilingual PDFs from HTML templates. Templates and translations can be swapped without a deployment – using license-friendly building blocks such as OpenPDF and Noto.</description>
    </item>
    <item>
      <title>A successful technology switch: how a media group changed its app development</title>
      <link>https://www.christoph-sens.com/blog/media-group-technology-switch/</link>
      <guid>https://www.christoph-sens.com/blog/media-group-technology-switch/</guid>
      <pubDate>Fri, 19 Apr 2024 00:00:00 GMT</pubDate>
      <description>How a large media group put its app development on a common technology base with Flutter and brought it in-house.</description>
    </item>
    <item>
      <title>Generating screen forms automatically from configuration files</title>
      <link>https://www.christoph-sens.com/blog/screen-forms-from-configuration-files/</link>
      <guid>https://www.christoph-sens.com/blog/screen-forms-from-configuration-files/</guid>
      <pubDate>Fri, 19 Apr 2024 00:00:00 GMT</pubDate>
      <description>Generating screen forms, including their REST integration, automatically from configuration files – a success story from an Angular project.</description>
    </item>
    <item>
      <title>The role of Signals</title>
      <link>https://www.christoph-sens.com/blog/the-role-of-signals/</link>
      <guid>https://www.christoph-sens.com/blog/the-role-of-signals/</guid>
      <pubDate>Fri, 19 Apr 2024 00:00:00 GMT</pubDate>
      <description>Why Angular introduced Signals and how they differ from Observables.</description>
    </item>
  </channel>
</rss>
