Backend platform engineering
Progressive model builder for large enterprise data platforms
Refactored a 2,000-line Java workflow into focused components and added safe progressive updates that preserve user-defined structure.
The system
An enterprise platform generated complex display models from discovered source systems. The original implementation handled first-time creation, but repeated scans could not safely incorporate new objects without risking existing user configuration.
What had to be solved
A full rebuild was technically simpler but functionally wrong. It could overwrite manual ordering, user-created groups and established layer structure. The service was also large enough that adding update behavior directly would make future changes harder to test and reason about.
Non-negotiable requirements
- Existing objects had to be matched across scans using stable business identifiers.
- Manual ordering and user-created layers or groups had to remain untouched.
- A genuinely missing baseline could create a new model; a failed read had to stop safely.
- Current first-run behavior had to remain compatible while the implementation was decomposed.
What I implemented
- Designed distinct CREATE and UPDATE execution paths instead of forcing both scenarios through a rebuild.
- Extracted classification, table filtering, layer discovery and key-matching rules into focused Java components.
- Implemented stable matching using source-model and atomic-origin identifiers.
- Added progressive placement rules that append newly discovered objects without reordering curated content.
- Reduced the main implementation from roughly 2,000 lines to about 1,500 while adding new behavior.
Key implementation choices
Separate creation from update
Initial generation and progressive synchronization have different correctness rules, so they were modelled as explicit paths rather than a collection of conditionals.
Preserve user intent
Manual structure was treated as durable domain state, not presentation output that automation could freely regenerate.
Fail safely
Missing data and unreadable data were handled differently to avoid replacing a valid model after an integration failure.
Engineering outcome
- Newly discovered objects can be added during subsequent runs without destroying manual configuration.
- The orchestration code is smaller, clearer and divided into independently testable responsibilities.
- The design supports future classification and ordering rules without extending a single monolithic service.