- What AWS Transform is and how custom transformations work
- The patient: a Spring CRUD app with 3 high-severity EOL issues
- Creating the transformation in the console
- The worklog — 61 agent minutes, end to end
- Output: 33 files, 9 directories, one atomic commit
- All 8 technical debt findings, prioritised
- Architecture and sequence diagrams written from source code
- 6-phase migration sequence — leaf dependencies first
- What AWS recommends running next: two named transformations
- Takeaways
Most "assessment tools" scan for known CVEs, produce a PDF with a heat-map, and call it done. AWS Transform does something different. It deploys an agentic loop — reading every source file, navigating the dependency graph, generating diagrams, and writing structured documentation — then tells you exactly which named transformation to run next. Assessment feeds pipeline.
I ran it against a real app. This is what happened.
What AWS Transform is — and what custom transformations do
AWS Transform is a managed modernisation service built on Amazon Bedrock. You connect a repository, choose a transformation, and an agent handles the rest: reading code, reasoning about structure, writing artefacts, and surfacing a clear next step. No YAML configs. No custom scripts. One CLI command.
The service ships with built-in transformations for the most common modernisation patterns, and an expanding set of custom transformations you configure through the console chat interface:
Beyond built-ins, here are the available custom transformations — each addressing a specific modernisation scenario:
The patient: a Spring CRUD app with 3 high-severity EOL issues
The application is a textbook layered monolith — RESTful CRUD for user records, 8 endpoints, 7 Java source files, ~559 lines of code. Small surface area, but carrying the exact debt pattern seen across thousands of enterprise Java apps that haven't been meaningfully touched since 2020.
──────────────────────────────────────────────────────
Language Java 8 (1.8) ← EOL Jan 2019
Framework Spring Boot 2.5.14 ← EOL Aug 2023
ORM Spring Data JPA / Hibernate Managed
Database MySQL 8.0
Build Maven 3.6+
App Server JBoss / WildFly 12+ ← legacy deploy model
Packaging WAR ← blocks containerisation
API Namespace javax.* ← blocks Spring Boot 3.x
Utility Lombok Managed
javax.* → jakarta.* namespace migration. All three high-severity items are one linked chain — fix them in order or the migration fails midway.Creating the transformation in the console
From the AWS Transform console, I described the intent in natural language. The agent surfaced the available custom transformations, I selected AWS/comprehensive-codebase-analysis, and it confirmed the setup instantly:
Excellent! Your transformation is now ready.
Transformation Created
Name AWS/comprehensive-codebase-analysis
Status Open and ready to execute
Purpose Deep static analysis with technical debt
identification for pre-migration assessment
Dashboard active in the Dashboard tab.
Use the AWS Transform CLI to execute the transformation.
The CLI command to trigger the run against the repo:
atx run \
--transformation AWS/comprehensive-codebase-analysis \
--repo mycontainers \
--path /root/aws-transform-containers
The worklog — 61 agent minutes, end to end
AWS Transform maintains a full timestamped worklog for every job. Under the hood the agent fired hundreds of shell, file_read, and file_write tool calls — navigating directories, reading source files and the SQL schema, parsing pom.xml, and writing the entire documentation tree from scratch. Here's the high-level log:
Output: 33 files, 9 directories, one atomic commit
Everything landed in a single git commit — "Step 1: Create comprehensive ATXDocumentation with full codebase anal…" — 22 minutes after the job started. Browse it live at github.com/aquavis12/aws-transform-containers → src/ATXDocumentation.
├── README.md
├── project-overview.md ← app identity, tech stack, source metrics
├── technical-debt-report.md ← executive summary + recommended transforms
├── analysis/
│ ├── complexity-analysis.md ← per-file cyclomatic complexity
│ └── tech-debt.md
├── architecture/
│ ├── system-overview.md ← layered arch, deployment model diagram
│ ├── dependencies.md ← external + internal dep graphs
│ ├── components.md
│ └── patterns.md
├── behavior/
│ └── business-logic.md
├── diagrams/
│ ├── structural/ ← class diagrams, component maps
│ ├── behavioral/ ← sequence diagrams, activity diagrams
│ └── architecture/ ← system context, deployment diagrams
├── migration/
│ ├── component-order.md ← 6-phase migration sequence
│ └── validation-criteria.md ← build + functional + behavioral checklist
├── reference/
│ └── program-structure.md
└── technical-debt/
├── summary.md
├── outdated-components.md
├── maintenance-burden.md
└── remediation-plan.md ← action-by-action upgrade path
All 8 technical debt findings, prioritised
The agent produced a debt matrix covering 3 high-severity EOL items, 1 medium, and 4 low-severity code quality issues — ranked correctly by upgrade impact, not just by surface severity.
| # | Issue | Component | Sev | Impact |
|---|---|---|---|---|
| 1 | Java 8 End of Life | Runtime | High | No free security patches since Jan 2019. Missing records, sealed classes, virtual threads. |
| 2 | Spring Boot 2.5.14 EOL | Framework | High | EOL August 2023. No security fixes. Blocks upgrade to Spring Boot 3.x. |
| 3 | javax.* namespace | API | High | Must migrate to jakarta.* before Spring Boot 3.x is possible. Affects User, UserDTO, UserController. |
| 4 | mysql-connector-java 8.0.33 | Dependency | Medium | Artifact renamed to mysql-connector-j in v8.0.31+. Works but deprecated naming. |
| 5 | Field injection (@Autowired) | Code quality | Low | Harder to unit test. Hides dependencies. Prevents immutability. |
| 6 | Generic RuntimeException | Code quality | Low | "Not found" returns 400 instead of 404. No custom exception hierarchy. |
| 7 | No pagination on getAllUsers | Code quality | Low | Returns all records unbounded. Performance risk at scale. |
| 8 | No uniqueness check on update | Code quality | Low | updateUser doesn't check for duplicate username/email — can violate DB constraints. |
Architecture and sequence diagrams written from source code
The agent didn't rely on existing documentation — there was none. It read the Java source files and generated ASCII-art architecture and sequence diagrams by reasoning about the class structure and method call chains.
System context diagram
┌────────────────────┐ ┌────────────────────────────────────┐
│ Client │ HTTP │ JBoss / WildFly │
│ (Browser / curl) │──REST──▶ │ ┌──────────────────────────────┐ │
│ │◀──JSON── │ │ Spring Boot 2.5.14 (WAR) │ │
└────────────────────┘ │ │ UserController │ │
│ │ └── UserService │ │
│ │ └── UserRepository │ │
│ └──────────────┬───────────────┘ │
└─────────────────┼──────────────────┘
│ JDBC
▼
┌─────────────────────────────────────┐
│ MySQL 8.0 · crud_db · users │
│ idx_username · idx_email │
│ idx_created_at │
└─────────────────────────────────────┘
Sequence diagram — GET /users/{id}
Client Controller Service Repository Database │ │ │ │ │ │ GET /users/1 │ │ │ │ │───────────────▶│ │ │ │ │ │ getUserById(1) │ │ │ │ │───────────────▶│ │ │ │ │ │ findById(1) │ │ │ │ │────────────────▶│ │ │ │ │ │ SELECT │ │ │ │ │──────────────▶│ │ │ │ │◀──────────────│ │ │ │◀────────────────│ Optional<User>│ │ │◀───────────────│ UserDTO │ │ │◀───────────────│ 200 OK │ │ │
6-phase migration sequence — leaf dependencies first
The migration/component-order.md file gives an ordered migration plan where each phase only touches files whose own dependencies are already migrated — avoiding mid-migration build failures.
javax.persistence.* → jakarta.persistence.* and javax.validation.* → jakarta.validation.* in the model layer — it has zero dependencies on other app classes, so it's the safe starting point.javax.validation.* → jakarta.validation.* in the DTO. Isolated from persistence concerns — safe to migrate independently after Phase 1.javax.validation.* → jakarta.validation.* in the controller. Verify Spring MVC compatibility in the exception handler. Update error response codes (404 for not-found, proper 4xx mapping).AWS/JBoss-to-Spring-Boot transformation handles this end-to-end.What AWS recommends running next — two named transformations
The last section of technical-debt-report.md doesn't just list issues. It names the exact AWS Transform transformations to run next — strings you can drop directly into the CLI:
RECOMMENDED TRANSFORMATIONS:
AWS/java-version-upgrade
AWS/JBoss-to-Spring-Boot
This codebase uses Java 8 which reached end of public updates
and Spring Boot 2.5.x which is EOL. These two transformations
address the full high-severity debt chain.
Here's exactly what each one does:
AWS/java-version-upgrade or AWS/JBoss-to-Spring-Boot next, those transformations are working with a fully understood codebase. The 6-phase migration plan from the analysis directly informs the order the automated transforms run in.Takeaways
AWS Transform's comprehensive codebase analysis is the most thorough automated pre-migration assessment I've run. A few things stood out:
- The output is genuinely actionable, not just comprehensive. The 6-phase migration sequence respects leaf-first dependency order. The validation criteria is a real test checklist, not documentation filler. The debt table prioritises the linked chain correctly — it doesn't list Java 8 and Spring Boot 2.5 as independent issues; it surfaces the dependency between them.
- Named next-step transformations are the real value. Assessment tools typically end with "you should upgrade Java." This one ends with
AWS/java-version-upgradeandAWS/JBoss-to-Spring-Boot— exact strings you paste into the CLI to start the automated migration. - 61 agent minutes is fast for this output volume. 33 files, 2,216 lines, sequence diagrams, dependency graphs, full remediation plan — generated by reading source code, not config. For a one-time pre-migration assessment on a legacy system this is genuinely faster than any manual approach.
- Run this before any automated transformation. Knowing that the
javax.*namespace is the upgrade blocker before you start is the difference between a clean transformation run and debugging a half-migrated build at 2am. - The portfolio-level variants are the next frontier. For teams managing 20+ Java services at different maturity stages,
AWS/portfolio-modernization-readiness-analysisshould consolidate findings and prioritise which services move first — with migration waves, not just individual reports.