Engineering Decisions
The project involved several architecture decisions that shaped how maintainable the platform would be.
1. Centralize shared behavior, not everything
GOOD
shared utility → shared/
GOOD
business-specific behavior → forms/FORM_001.js
AVOID
every form depending on one giant implementation file
The library keeps reusable behavior centralized without forcing unrelated forms to become tightly coupled.
2. Keep the loader lightweight
The loader resolves context and loads code.
It does not become the place where business rules accumulate.
loader responsibility:
context → script selection → loading
not:
context → every business rule in the system
3. Treat render timing as a platform concern
Instead of every form inventing its own setTimeout, timing behavior is exposed as a shared utility.
many ad-hoc delays
↓
one reusable timing helper
4. Separate deployment from development
Developers should not manually copy JavaScript into higher environments.
code change
↓
pipeline
↓
controlled promotion
5. Infrastructure should be reproducible
Bicep makes the infrastructure reviewable and repeatable instead of relying only on portal configuration.
6. Documentation is part of maintainability
A platform is only useful if another developer can understand how to work with it.
That is why the documentation site was built as part of the project rather than after it.