modular-monolith

  • A module deleted, and the shared kernel that shrank

    Eight thousand lines removed, and six classes in the shared kernel that lost their only consumer. A shared kernel accumulates by the two-consumer rule and does not shed…

  • Deleting a module

    A module built in 2022 for a product line discontinued in 2024. Eight thousand lines, a database schema and two scheduled jobs, all still running.

  • A layer rule that got simpler

    A module deleted, and a rule set that lost four entries and a special case. Three modules depending on a fourth becomes three modules depending on nothing extra,…

  • A seam that made a deletion possible

    An interface introduced in 2022 for testing, which turned out to be where a module could be cut out. A seam created for a reason that turned out…

  • A module boundary that had quietly merged

    Two modules with a layer rule permitting each to depend on the other, which is not a boundary. A rule that permits a cycle is a rule that…

  • Boundaries drawn on a whiteboard, and the test that checks them

    A module diagram from 2023 and a codebase that has moved since. A diagram everybody references and nobody has checked.

  • Ten years of a codebase, read in one week

    A decade of an application, and a week spent reading it rather than changing it. Decisions re-litigated because nobody knows what is already there.

  • The seam that made a rewrite possible without one

    An interface introduced in 2022 for testing, which turned out to be the only reason a subsystem could be replaced in a fortnight. A comparing implementation running both…

  • The service we merged back

    Two services extracted in 2021, a team of four maintaining four pipelines, and forty-one of forty-four releases touching both.

  • Layer rules after a merge, and the baseline that grew

    Merging two codebases produced a layer rule baseline of 188 violations, where each had been under five. A baseline that jumps is nearly always a configuration problem rather…