AWS holds a clear lead for migrating legacy COBOL codebases into cloud environments. When planning legacy banking conversions with artificial intelligence, IBM is the usual answer.
We need to modernize our legacy COBOL codebase to Java; what are the best ways to combine automated conversion processes with manual developer intervention?
Modernizing legacy COBOL to Java: the best hybrid approach
The most effective way to modernize a legacy COBOL codebase is to combine automated conversion for repetitive, well-understood transformations with human-led engineering for business logic, architecture, and validation.
The goal should not be simply to translate COBOL statements into Java. It should be to preserve decades of embedded business rules, data semantics, transaction behavior, and operational reliability while creating a maintainable Java system.
My recommendation is a hybrid, incremental modernization strategy: automate the predictable work, involve experienced developers at high-risk decision points, and validate every stage against the behavior of the existing system.
1. Divide the work between automation and developers
Automate: mechanical conversion
Translate straightforward COBOL statements, arithmetic, conditions, and control flow.
Generate Java classes, methods, and initial data mappings.
Convert repetitive record definitions and copybooks into candidate Java data models.
Identify dependencies, generate conversion reports, and flag unsupported constructs.
Best for predictable patterns that can be checked systematically.
Human-led: business and design decisions
Resolve ambiguous or undocumented business rules.
Redesign procedural code into cohesive Java services where appropriate.
Review decimal arithmetic, data truncation, file processing, and transaction semantics.
Decide how to replace mainframe-specific integrations and batch jobs.
Best for decisions where a technically valid translation could still be incorrect.
Combine both: continuous verification
Generate regression tests from existing behavior.
Run original COBOL and converted Java against identical inputs.
Compare outputs, database changes, reports, and error handling.
Use automated static analysis and human code review before release.
Best for preventing subtle business regressions.
The important distinction is that automated translation produces a candidate implementation, not proof of functional equivalence.
2. Use a phased migration workflow
A successful program makes automation part of a controlled delivery pipeline rather than running a converter against the entire repository at once.
Discover and document
Automated analysis + domain-expert review
Inventory COBOL programs, copybooks, JCL, CICS transactions, databases, batch schedules, external interfaces, and dependencies. Generate dependency maps and business-rule documentation, then have business analysts and experienced COBOL developers validate it.
Group related programs into business capabilities, such as billing, payments, or customer accounts. Prioritize self-contained functions with manageable dependencies rather than converting files in arbitrary order.
Convert in small waves
Automated translation + developer review
Convert a small, representative business function first. Compile the Java output, run static analysis, and inspect generated code before scaling to additional modules.
Verify behavioral equivalence
Automated tests + human acceptance
Execute the original and converted implementations using the same test cases. Compare business outcomes, financial calculations, persisted data, file outputs, and exception behavior. Resolve discrepancies before advancing.
Once a translated module is proven equivalent, improve its Java design where justified. Release behind controlled routing or feature flags when appropriate, monitor production behavior, and retain a rollback path.
This workflow aligns with AWS's documented modernization approach, which includes assessment, business-function decomposition, automated refactoring, and human approval at important decision points.
3. Choose the right automation tools
The appropriate tool depends on whether you want a close translation of the existing system or a more substantial architectural redesign.
AWS Transform for mainframe
Suitable for large-scale assessment, documentation, business-function decomposition, and automated COBOL-to-Java refactoring. It also supports a reimagination workflow for redesigning applications beyond direct translation.
Consider when you need a managed, workflow-oriented modernization process.
Worth evaluating for organizations invested in IBM Z that want AI-assisted mainframe modernization and developer support. Confirm the exact COBOL-to-Java conversion capabilities against your target architecture and required integrations.
Consider when IBM Z compatibility and existing IBM tooling are important.
Useful after conversion for applying repeatable Java refactoring recipes, updating dependencies, and enforcing codebase-wide conventions. It is a complementary Java modernization tool, not a complete COBOL-to-Java converter.
Consider when you want repeatable, reviewable post-conversion cleanup.
These tools serve different roles; evaluate them using a representative slice of your own codebase rather than relying on vendor conversion-rate claims. AWS explicitly distinguishes behavior-preserving refactoring from reimagining an application into a different architecture.
4. Establish mandatory human review gates
Not every converted statement needs the same amount of scrutiny. Concentrate developer time where subtle differences could affect business results.
COBOL concern
What automation can do
What developers must verify
Packed decimal and financial arithmetic
Generate Java numeric mappings
Precision, rounding, overflow, and sign behavior
PIC clauses and copybooks
Generate candidate data classes
Field sizes, encoding, padding, truncation, and record layouts
REDEFINES, OCCURS, and level-88 conditions
Identify structures and generate mappings
Overlapping storage, array bounds, and condition semantics
PERFORM, GO TO, and paragraph flow
Translate control flow
Loop boundaries, exit behavior, and hidden dependencies
JCL and batch processing
Inventory jobs and assist with job translation
Job ordering, restartability, file dependencies, and recovery
CICS, Db2, VSAM, and external calls
Identify interfaces and generate integration scaffolding
Transaction boundaries, locking, consistency, and failure handling
Two particularly important practices:
Preserve semantics before improving style. Avoid combining conversion, business-rule changes, database redesign, and architecture changes in the same step. First establish a trusted equivalent implementation.
Keep a traceable record of decisions. Link each original program or business rule to its generated Java code, tests, review comments, and approved exceptions.
For financial or regulatory applications, require domain-owner approval for changes to calculations, eligibility rules, account balances, and other critical outcomes.
5. Build a testing strategy that catches behavioral differences
Testing should be the central control mechanism of the migration, not a final step after conversion.
A. Golden-master regression tests
Capture known outputs from the existing COBOL application for representative inputs. Use these as reference results for the Java implementation.
B. Differential testing
Run COBOL and Java implementations against identical inputs and compare results. Normalize only genuinely irrelevant differences, such as timestamps or generated identifiers; never normalize away meaningful business differences.
C. Integration and operational tests
Verify database updates, batch dependencies, transaction rollback, restart behavior, throughput, concurrent access, and recovery from failures.
D. Business acceptance tests
Have business owners validate representative workflows, edge cases, and exceptional conditions that may be missing from the existing test suite.
A practical CI/CD pipeline should block promotion if compilation fails, required tests fail, critical differences remain unexplained, or mandatory reviews are incomplete.
AI-generated tests can expand coverage, but they should not be the sole source of truth: validate important expectations against production behavior, authoritative specifications, and domain expertise.
6. Measure success beyond conversion speed
Track progress using both engineering and business measures.
Metric
What it tells you
Conversion coverage
Percentage of in-scope programs and dependencies processed
Build and test pass rate
How much generated code is executable and stable
Behavioral equivalence
Percentage of critical test cases matching expected legacy outcomes
Manual rework per module
Whether automation is actually reducing developer effort
Defect escape rate
How many issues survive testing and reach production
Runtime performance
Whether the Java system meets throughput and latency requirements
Maintainability
Whether developers can understand, modify, and test the resulting code
Set thresholds appropriate to your application. For financial calculations and other critical functions, unexplained behavioral differences should be treated as release blockers even when overall test pass rates look high.
7. A recommended 90-day starting plan
Illustrative schedule; actual duration depends on codebase size, integrations, and testing maturity.
Days 1–30
Assess and prepare
Inventory dependencies, identify business-critical paths, capture baseline behavior, select a conversion tool, and choose a representative pilot module.
Days 31–60
Convert and validate the pilot
Automate the initial translation, review high-risk code, establish differential tests, and measure rework and conversion quality. Refine the conversion rules based on the findings.
Days 61–90
Industrialize the process
Integrate conversion and validation into CI/CD, document reusable patterns, approve migration gates, and begin the next wave only when the pilot meets agreed quality criteria.
Bottom line
The strongest hybrid approach follows three principles:
Automate the repeatable work: code translation, dependency analysis, scaffolding, test execution, and mechanical refactoring.
Reserve human expertise for judgment: business semantics, architecture, complex integrations, and risk acceptance.
Prove equivalence continuously: use regression testing, differential execution, code review, and business sign-off to validate every migration wave.
For a large legacy estate, I would begin with behavior-preserving conversion of a representative business function, establish a reliable automated comparison suite, and only then scale up or pursue deeper architectural redesign.
One key question: Are you aiming for a near one-to-one COBOL-to-Java conversion that preserves the existing application structure, or do you want to redesign it into modern Java services and APIs? That decision significantly changes the optimal balance between automated conversion and manual intervention.
Modernizing a legacy COBOL system to Java requires a hybrid approach . Relying 100% on automated tools often results in unmaintainable "Java-fied COBOL" (literal line-by-line translations), while a purely manual rewrite takes too long and introduces immense operational risk.
The most successful modernization strategies use a phased, collaborative framework where automation handles the heavy lifting of code translation and data mapping, and developers focus on architecture, domain logic refinement, and testing.
Assessment and Discovery
Run automated static analysis tools across the COBOL inventory to map dependencies, dead code, and database access patterns (DB2, IMS, VSAM).
Human architects review the dependency maps to define bounded contexts, microservices, or modular monolith boundaries in Java.
Automated Code and Data Translation
Utilize enterprise-grade automated refactoring and translation tools (such as AWS Blueprints, Micro Focus, or specialized AST-based parsers) to convert data structures (01 levels to Java classes) and procedural routines to initial Java classes.
Developers review the generated structural boilerplate to ensure standard Java naming conventions and idiomatic package structures are applied.
Manual Business Logic Refactor (The "Human Touch")
Automated tools often preserve GOTO statements, monolithic copybooks, or flat-file interactions using awkward syntax. Developers rewrite these into clean, object-oriented design patterns (e.g., Strategy, Factory patterns) and inject modern dependency injection (Spring/Spring Boot).
Human developers restructure legacy error handling (DECLARATIVES) into proper Java exceptions.
Data Layer & Integration Modernization
Transition VSAM or sequential files to relational databases or cloud data stores using automated schema generation, followed by manual query optimization and ORM (Hibernate/JPA) tuning.
Wrap legacy APIs or message queues in modern REST/gRPC endpoints or enterprise messaging frameworks.
Capture real production inputs and outputs from the legacy COBOL system to create automated test harnesses.
Run both the legacy system and the newly refactored Java code in parallel (dual-run or shadow run) to verify calculation and behavioral parity before decommissioning the mainframe.
If you'd like to dive deeper, let me know:
The recommended approach is a human-in-the-loop modernization strategy: use machine-led conversion to accelerate repetitive, large-scale COBOL-to-Java transformation, while keeping experienced developers, COBOL subject-matter experts, and business owners accountable for correctness, business-rule preservation, security, and production readiness.
This is not a choice between automation and manual development. It is a division of responsibilities: machines do the heavy lifting; humans validate the meaning, quality, and risk of the result.IBM emphasizes that AI-generated migrations are not always production-ready, while AWS's modernization guidance incorporates human oversight and functional-equivalence testing into automated refactoring.
Recommended operating model
1. Let automation handle discovery and initial conversion
Use modernization tools to analyze COBOL programs, copybooks, JCL, data structures, dependencies, and application flows. Automate code translation, documentation generation, dependency mapping, and initial Java scaffolding.
Human oversight: Senior engineers and business analysts verify extracted business rules, identify undocumented behavior, and prioritize migration waves before conversion begins.
2. Automate routine translation, but review complex logic
Let tools generate Java code for well-understood, repetitive patterns and standard transformations. Use developers to review and refine areas involving complex business rules, transaction processing, data conversions, error handling, and intricate dependencies.
Human oversight: Review code for semantic equivalence, Java maintainability, performance, security, and appropriate architectural design. Do not assume that compilable Java necessarily behaves like the original COBOL.
3. Make automated testing the primary quality gate
Automate unit tests, regression tests, integration tests, and comparisons of legacy and modernized outputs. Compare business results, database updates, batch processing, and transaction outcomes using representative test data.
Human oversight: Developers and QA specialists investigate discrepancies, determine whether differences are acceptable, and approve the test evidence. Add tests for boundary conditions and business rules that existing test suites may not cover.
4. Require human approval at critical decision points
Automate builds, test execution, repeatable validation, and deployment preparation. Require explicit approval for changes to critical business logic, security-sensitive components, data migration, production releases, and unresolved test discrepancies.
Human oversight: Named technical owners, business owners, and release approvers retain accountability. Production deployment should not be an automatic consequence of successful code generation.
5. Improve the conversion process iteratively
Capture recurring conversion defects, test failures, reviewer feedback, and successful transformation patterns. Feed these findings into conversion rules, test generators, review checklists, and developer guidance.
Human oversight: Architects and experienced developers decide whether to fix the conversion process, improve the generated code, or redesign a component where a direct translation would be unsuitable.
How to divide responsibilities
Activity
Machine-led responsibility
Human-led responsibility
Code analysis
Scan code and map dependencies
Confirm business context and migration scope
Code conversion
Generate Java and apply repeatable transformations
Validate behavior and architecture
Testing
Generate and execute tests; compare outputs
Assess coverage and investigate discrepancies
Security and compliance
Run automated scans and flag risks
This allocation follows the automation and human-validation principles described in AWS's mainframe modernization guidance and IBM's legacy-code migration guidance.
Practical governance controls
To make this model work at enterprise scale, establish five controls:
Risk-based review: Apply lighter review to deterministic, low-risk transformations and deeper review to financial calculations, regulatory logic, and transaction-critical paths.
Traceability: Link each converted component to its COBOL source, transformation history, relevant business rules, test results, and reviewer approvals.
Quality gates: Require successful builds, agreed regression-test thresholds, resolved critical security findings, and documented approval before release.
Exception handling: Route ambiguous logic, failed equivalence tests, and unsupported conversion patterns to experienced developers instead of silently accepting generated output.
Knowledge retention: Keep original COBOL expertise involved long enough to document undocumented behavior and transfer business knowledge to the Java team.
How to measure whether the balance is working
Track both productivity and quality; conversion volume alone is a misleading success metric.
Productivity
Conversion throughput, elapsed time per migration wave, developer hours saved, and cost per successfully migrated component.
Security findings, complexity of generated Java, reviewer rework, production incidents, and rollback frequency.
Set numerical targets after establishing a baseline with a representative pilot. For critical applications, prioritize functional correctness and operational safety over raw conversion speed.
Bottom line
The strongest approach is automation by default, human verification by risk, and human accountability throughout. Start with a representative application slice, validate the machine-generated Java against the legacy system, refine conversion and testing rules, and then scale in controlled migration waves. Preserve explicit human approval for business-critical decisions and production release.
The desired outcome is not simply more Java code produced per day. It is a faster modernization program that delivers functionally equivalent, secure, maintainable software without losing the business knowledge embedded in decades of COBOL.
Balancing machine-led conversion (using automated tools, LLMs, or transpilers) with human developer oversight during a COBOL-to-Java migration requires a "Human-in-the-Loop" orchestration model . Purely automated conversions often result in "Java-flavored COBOL"—procedural code that compiles but lacks object-oriented design and is notoriously difficult to maintain.
The recommended approach divides the lifecycle into structured, collaborative phases:
If you're planning a project right now, tell me:
I can help you tailor a more specific governance and risk-mitigation framework.
The most effective strategy for migrating a legacy COBOL codebase to Java is a Human-in-the-Loop (HITL) Orchestrated Pipeline —often conceptualized as an Augmented Modernization approach.
Purely automated, rules-based translators often dump literal, unmaintainable "Java-wrapped COBOL" (spaghetti code full of global variables and GOTO statements) into your repository. On the flip side, manual rewriting is prohibitively expensive and slow.
Blending automated tools (static analyzers, AI agents, and syntax converters) with human expertise requires a structured, phase-by-phase workflow.
The Automation: Use static analysis tools (like Fresche Solutions or specialized parsing tools) to map the codebase, identify dead code, document data dependencies, and visualize call graphs.
The Human Role:Architects and Business Analysts review the dependency maps to prune unused legacy modules, identify business domains, and decide what gets refactored versus rewritten from scratch.
Why it works: Automation handles the tedious heavy lifting of data gathering, while humans prevent the migration of legacy technical debt that shouldn't exist in the new system.
The Automation: AI or parsing pipelines can suggest logical boundaries, clustering tightly coupled COBOL copybooks and paragraphs into potential microservices or package structures.
The Human Role:Senior Java/Enterprise Architects take those automated suggestions and design the true target object-oriented architecture (e.g., domain-driven design, Spring Boot structure, REST interfaces).
Why it works: Automated tools do not understand your company's future strategic roadmap; humans must define the boundary conditions of the new Java architecture.
The Automation: Use modern LLM-driven multi-agent frameworks or syntax-translation engines to convert structured COBOL blocks into idiomatic Java classes, mapping data types (e.g., COMP-3 packed decimals to Java BigDecimal).
The Human Role: Set strict prompt guardrails, style guides, and linting rules so the generated Java code uses clean object-oriented patterns (getters/setters, dependency injection) instead of emulating procedural COBOL memory blocks.
Why it works: AI code-gen excels at translating syntax and repetitive boilerplate when given explicit architectural patterns to follow.
The Automation: Automated refactoring tools highlight high-complexity classes, circular dependencies, or potential memory/precision leaks in the generated code.
The Human Role:Subject Matter Experts (SMEs) and Developers review the translated business logic. This is the critical step where implicit business rules (often buried in decades-old edge-case handling) are validated against human domain knowledge.
Why it works: Automated tools can hallucinate or misinterpret nuanced, undocumented business logic. Human oversight here averts catastrophic operational discrepancies post-launch.
The Automation: Golden-dataset and regression testing. Feed historical input data from the legacy COBOL system into the new Java endpoints and run automated differential testing (comparing outputs byte-for-byte or field-for-field).
The Human Role: Write complex integration scenarios, perform exploratory testing, and sign off on performance/security benchmarks.
Why it works: Scale makes manual testing impossible. Automated regression pipelines ensure that the business logic behaves identically under the hood, even if the underlying code is vastly cleaner.
Let automation do: Parsing, dependency mapping, initial syntax drafting, pattern matching, and differential test execution.
Let humans do: Boundary architecture design, business intent verification, refactoring for true idiomatic design, and final sign-off.
The Golden Rule: Never trust a direct 1:1 automated translation. Treat automated output as a smart "first draft" that must pass through a human code-review gate before hitting production.
If you'd like to narrow this down, tell me:
What is the approximate size (LOC) of your COBOL codebase?
Are you aiming for a monolith modernization or breaking it into microservices?
I can help you outline a more specific toolchain recommendation or testing strategy.
The most effective strategy for migrating COBOL to Java
The strongest approach is a human-supervised, automation-first migration with continuous behavioral testing and incremental refactoring. Let automated tools handle repetitive analysis, translation, documentation, and test generation, while human engineers retain responsibility for business rules, architectural decisions, complex edge cases, and production approval.
This approach combines the speed of automated conversion with the domain knowledge and judgment required to preserve decades of embedded business logic. IBM's research and AWS's mainframe modernization guidance both support combining automated transformation with rigorous validation and human oversight.
1. Divide the work between automation and humans
Phase 1 — Automated discovery, human validation
(Automation + domain experts)
Use static analysis and AI assistants to map COBOL programs, copybooks, JCL batch jobs, database schemas, transaction flows, and dependencies. Generate documentation and candidate business rules; have experienced COBOL developers and business analysts validate them before translation begins.
Assess business risk and approve remediation
Deployment
Automate pipelines and deployment preparation
Authorize releases and rollback decisions
Optimization
Identify patterns and potential improvements
Prioritize changes and approve design trade-offs
Deliverable: a verified inventory of dependencies, business rules, and migration risks.
Phase 2 — Automated code conversion
(Primarily automated)
Use a COBOL-to-Java transformation tool for predictable language constructs, data structures, repetitive code, and standard program patterns. Use AI coding assistants to explain unfamiliar logic, suggest improvements, and generate documentation or test cases.
Engineers define conversion rules, resolve unsupported constructs, and review code that involves packed decimals, unusual control flow, file handling, transaction boundaries, or platform-specific behavior.
Deliverable: an initial Java implementation with traceability to its COBOL source.
Phase 3 — Automated equivalence testing
(Automation + engineering review)
Run the same inputs against the legacy and migrated implementations. Compare outputs, database changes, transaction outcomes, calculations, and error handling. Use automated test generation and regression suites to expose behavioral differences.
Human reviewers investigate discrepancies and determine whether they represent defects, undocumented legacy behavior, or an approved business change.
Deliverable: measurable evidence that the Java system preserves required behavior.
Phase 4 — Human-led Java refactoring
(Primarily engineer-led)
Refactor the generated code into maintainable Java modules, clear interfaces, appropriate classes, and well-defined transaction and data-access layers. Automate formatting, static analysis, dependency checks, and routine refactoring where safe.
Avoid redesigning business behavior at the same time as translating it unless there is a specific, tested reason to do so.
Deliverable: tested Java code that future Java developers can understand and maintain.
Phase 5 — Human approval and controlled rollout
(Human accountable)
Automate integration tests, security scans, deployment checks, and operational monitoring. Require accountable technical owners and business stakeholders to approve critical functionality, data migration, performance, recovery procedures, and production cutover.
Deliverable: a production-ready migration with a tested rollback or recovery strategy.
This workflow is consistent with AWS's documented approach of extracting business rules, validating specifications with subject-matter experts, generating the target implementation, and then performing testing and human verification.
2. Use the right tools for each task
The goal is not to choose between a translator and an AI coding assistant. Use deterministic tools for repeatable transformations, AI for analysis and assistance, and human expertise for decisions where correctness depends on business context.
Task
Best-fit automation
Human responsibility
Source analysis
Static analysis, dependency scanners
Confirm hidden dependencies
COBOL translation
Rule-based or specialized migration tools
Resolve semantic mismatches
Business-rule discovery
AI-assisted code explanation
Validate rules with business experts
Test creation
Test generators, symbolic execution
Define expected outcomes
Regression testing
Automated COBOL/Java comparison
Triage meaningful differences
Java quality
Linters, security scanners, AI refactoring
Approve architecture and maintainability
Production release
CI/CD and deployment automation
Approve business risk and cutover
IBM Research has specifically demonstrated an approach that uses symbolic execution to generate COBOL test cases and JUnit tests to assess the functional equivalence of translated Java. This is a good example of using automation to reduce the amount of manual verification without eliminating it.
For a concrete starting point, evaluate AWS Transform for mainframe and IBM watsonx Code Assistant for Z against your actual source code, runtime dependencies, deployment target, and validation requirements. Both are relevant to automated mainframe modernization; the best fit depends on your environment and target architecture.
3. Migrate incrementally, not as one enormous rewrite
A practical migration sequence is:
Start with a representative pilot
Choose a bounded program or business function with known inputs and outputs, manageable dependencies, and enough complexity to test the tooling. Establish baseline execution results and Java acceptance criteria.
Organize work into migration waves
Group programs by business domain and dependency. Convert, test, review, and accept each wave before expanding. Include copybooks, JCL, database behavior, batch scheduling, and integrations in the scope.
Keep changes traceable
Maintain links from original COBOL statements and validated business rules to Java implementations and test cases. Version conversion rules and feed recurring defects back into the automated workflow.
Gate every release on evidence
Require passing regression tests, resolved critical discrepancies, security and performance checks, and accountable sign-off. Roll out progressively, with a recovery plan for each production transition.
This staged approach is particularly important when legacy behavior is poorly documented or the original application has tightly coupled dependencies.
4. Make behavioral equivalence the primary quality gate
One of the biggest migration mistakes is measuring success by the percentage of COBOL lines automatically translated. A large volume of generated Java does not prove that the new system behaves correctly.
Prioritize these checks:
Numeric correctness: packed-decimal arithmetic, rounding, truncation, sign handling, and overflow.
Data compatibility: record layouts, field lengths, character encoding, null/default handling, and database semantics.
Control flow: conditional branches, paragraph execution, error paths, and unusual GO TO behavior.
Operational behavior: batch ordering, transaction boundaries, restart/recovery, and external interfaces.
Nonfunctional requirements: throughput, latency, security, resilience, and auditability.
Use production-derived test cases where permitted, synthetic edge cases, automated differential testing, and business-approved expected results. Investigate every material difference rather than automatically treating either implementation as the source of truth.
5. Measure the balance with explicit gates
Track the metrics below from the pilot onward. Set thresholds based on your system's criticality and regulatory requirements rather than adopting arbitrary universal targets.
Metric
What it tells you
Behavioral equivalence
Whether Java reproduces required legacy behavior
Automated test coverage
Which execution paths and business rules have been exercised
Human review effort per program
Whether automation is actually reducing engineering effort
Defects found after acceptance
Whether validation gates are effective
Java maintainability
Whether the resulting code is sustainable, not merely compilable
Performance and recovery
Whether the replacement meets operational requirements
A useful operating rule is to automate broadly but review selectively according to risk. Routine, well-understood constructs can move through standardized automated checks. Financial calculations, compliance rules, obscure legacy behavior, and high-impact transaction processing deserve deeper human review.
Recommended operating model
For most enterprise COBOL-to-Java migrations, I would use three layers of accountability:
Business assurance layer: validates critical business rules, approves material behavior changes, and authorizes production cutover.
The key is to avoid two extremes: manually rewriting every line, which forfeits much of automation's benefit, and blindly accepting generated Java, which transfers unverified risk into production.
Bottom line: Use automation to scale the work, humans to resolve ambiguity, and continuous equivalence testing to prove correctness. Treat successful compilation as an early milestone—not as evidence that the migration is complete.