A monolithic application deployed via SaltStack across 50-60 EC2 instances carries years of accumulated environment-specific assumptions, undocumented dependency chains, hardcoded configuration, and integration points that exist only in institutional memory. Before a single Docker image could be built, we needed to surface everything. The objective wasn't speed, it was repeatability: identical, predictable builds across development, staging, and production environments.
- SaltStack audit and dependency mapping: We audited the existing SaltStack deployment model end-to-end, identifying every environment variable, external integration, and dependency chain that the application relied on at runtime. This surfacing work is unglamorous but essential; skipping it is the primary reason containerization projects produce images that work in development and break in production. The audit produced a complete inventory of what needed to be externalized from the application before containerization could begin.
- Docker image standardization and CI/CD integration: With the dependency map in hand, we built standardized Docker images for the application runtime base images hardened, versions pinned, and all environment-specific configuration extracted and injected at runtime rather than baked in. The container build process was defined directly in the CI/CD pipeline, making every build reproducible and auditable. Any engineer on the team could trigger a build and receive an identical artifact, regardless of their local environment.

