March 30, 2026

Boot Wars: Start-up Time Smackdown

Spring Boot Done Right: Lessons from a 400-Module Codebase

400 modules later, the internet asks: power move or bloated beast

TLDR: A massive Spring Boot app powering single sign-on shows off neat switchable features across 400 modules, proving big systems can be organized. The comments explode into a culture war: enterprise pragmatists vs. performance purists and Go rewriters debating speed, complexity, and whether Spring is elegant or just heavy.

A 20-year-old login platform, Apereo CAS, just flexed its 400-module Spring Boot build and showed off clever tricks like thin auto-config wrappers and custom feature flags—translation: lots of tiny switches to turn features on and off without touching code. But the comments? Pure fireworks.

One camp shrugs at the hate and points to reality: as sidcool puts it, Spring Boot may be a punchline online, but enterprise adoption is massive. Another camp claps back with performance anxiety. robmccoll delivers the money line: does it take five minutes to start, and is debugging “like exploring someone else’s codebase every time”? Ouch. Then the Rewrite Brigade storms in: faangguyindia boasts they rewrote it in Go, slashing memory and boosting speed, and drops a drive-by “don’t use these stupid Java backends.” Cue the gasps.

Ops voices add spice: stackskipton blames corporate mediocrity more than Java itself, while e7h4nz warns the framework can make devs overconfident, forcing everything into patterns instead of solving problems. The memes write themselves: “Wake me when Boot finishes booting,” “Rewrite in Go by Friday,” and “DI all the things.”

Behind the drama, some quietly admire CAS’s engineering discipline: 272 tiny on-ramps, clear boundaries, and switchable features—exactly what you need when your app runs logins for thousands. The verdict online? Genius architecture vs. Rube Goldberg machine—pick your fighter.

Key Points

  • Apereo CAS is a long-running (20+ years) identity and SSO platform built on Spring Boot 3.x and Java 21+, with about 400 modules and thousands of deployments.
  • CAS uses a “thin auto-configuration wrapper” pattern: empty auto-configuration classes carry annotations and import separate configuration classes that define beans.
  • This separation centralizes conditional load logic in the wrapper and isolates bean definitions in imported configs, improving testability, reuse, and debugging.
  • CAS employs 272 auto-configuration entry points following the thin wrapper approach.
  • CAS built a custom feature-flag system via @ConditionalOnFeatureEnabled, backed by CasFeatureEnabledCondition, to enable/disable entire subsystems with a single property.

Hottest takes

"Hacker news likes to dunk on Spring Boot, but its usage in enterprises is very very high" — sidcool
"Does this app take 5 minutes to start?... tracing and debugging this thing would be like exploring someone else’s codebase every time" — robmccoll
"Don’t use these stupid java backend like sprinboot" — faangguyindia
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.