Rethinking the Development Process in the AI Era
With the advent of generative AI, software development has reached a major turning point.
Program generation itself has already entered a practical phase, and having AI write programs is no longer unusual. However, this does not mean that development becomes automated or that the role of humans is simplified.
Rather, whether AI can truly demonstrate its capabilities depends heavily on what happens before code is written—how requirements are organized, how clear the specifications are, the granularity of design, and how the project as a whole is conducted.
Based on hands-on experience of developing software in collaboration with generative AI, this article organizes the premises and context needed to think about development processes in the AI era.
What We Have Learned by Developing with AI
The author is currently developing the following products in spare time while using generative AI as a development partner.
-
Cloud Native Component Framework: a component framework
-
Semantic Integration Engine: a knowledge processing application
-
SmartDox: a documentation and knowledge processing system
-
Cozy: a model compiler
SmartDox and Cozy had been developed gradually since before the advent of AI, whereas CNCF and SIE were developed rapidly after November 2025, when the author started using Codex (OpenAPI) in VSCode.
This would have been unthinkable without AI-driven automatic programming.
Through this experience, several important premises of AI-driven development have become clear.
AI-Generated Programs “Run,” but That Is Not Enough
Programs generated by generative AI are generally effective in the sense that they compile and run. However, in terms of structure, naming, responsibility separation, and long-term maintainability, they are rarely suitable as-is for large-scale development or long-term operation.
This gap stems not so much from a lack of AI capability as from the quality of the specifications and context provided.
When Specifications Are Ambiguous, AI Makes Extreme Interpretations
When specifications are clearly defined, AI can generate remarkably appropriate programs. On the other hand, when specifications contain ambiguity or omissions, AI may choose interpretations or workarounds that feel extreme from a human perspective.
AI does not fill in “atmosphere” or “common sense”; it selects solutions that are logically consistent with the information it has been given.
In the absence of constraints, AI generates the minimal rational program necessary to achieve goals such as passing compilation or satisfying the given TDD tests. As a result, this often manifests as a procedural, monolithic program commonly referred to as a “Big Ball of Mud.”
AI Reads All Texts, Not Just Code
Generative AI does not look only at source code. It reads all textual artifacts—specifications, design documents, README files, comments, and background explanations—as part of its context.
Inconsistencies between documents and outdated descriptions are also incorporated into that context. AI may treat such contradictory information as equally valid and may even fabricate a “correct” answer to reconcile those contradictions.
This represents a major risk in software development.
Conversely, if inconsistencies and outdated descriptions are eliminated, AI can leverage this information to generate remarkably sophisticated programs.
Maintaining documentation is essential for collaboration with AI, and its operational management requires the utmost care.
Project Management Is Essential Even for Small Teams
In the AI era, even a single human developer works alongside AI as a partner. In the author’s development environment, OpenAPI Desktop and VSCode Codex (OpenAPI) are used together, effectively forming a three-person development team.
As mentioned earlier, this also entails creating a large volume of technical documentation and managing its operation.
In AI-driven development, implicit assumptions or ad-hoc decisions may appear to work in the short term. However, this is often sustained only by a Big Ball of Mud that passes compilation and tests, leaving long-term issues for future extensions and bug fixes.
To address these issues, it becomes necessary to establish development plans and manage progress.
Clear instructions must be given to AI regarding the current state and the next actions to take.
This is essentially the same as working in a multi-person development team.
Therefore, even in single-person development, project management becomes indispensable when collaborating with AI.
Thinking About Development Processes in the AI Era
The SimpleModeling development process is based on the Unified Process, with additional elements of domain modeling and model-driven development. At the same time, it adopts a hybrid structure that preserves the plan-driven aspects of UP while incorporating elements of agile development.
With the advent of AI, it is easy to imagine that the positioning and structure of development processes will undergo significant changes.
Before proceeding with this discussion, let us first review the Unified Process and agile development.
Characteristics of the Unified Process
We will organize the characteristics of the Unified Process along the following points.
-
Models and Programs
-
Phases and Iterations
-
Component-Oriented Development
-
Use-Case–Driven Development
-
Iterative and Incremental Development
-
Architecture-Centric
-
Risk-Driven
Models and Programs
The Unified Process (UP) is a technology framework centered on models. The process assumes that models are created first and then translated into programs.
Requirement models and design models are used in UP as the basis for design decisions and implementation policies. Programs are concrete realizations of those models, and their consistency with the intent of the models is subject to verification.
In this way, UP presupposes a process in which meaning and structure are first established in models before proceeding to implementation.
Phases and Iterations
One of the major characteristics of UP is that its project management framework has a dual structure of phases and iterations. The phases are divided into four: Inception, Elaboration, Construction, and Transition.
Phases are not merely process stages, but a meta-structure for shifting what should be emphasized and what should be fixed in the next stage. As phases progress, the center of gravity shifts in terms of requirement precision, architectural stability, and overall completeness.
Iterations in UP are not simply repetitions of work. Each iteration is positioned as a unit for redesigning how to proceed next, based on the knowledge gained at that point.
Thus, UP provides a mechanism for absorbing and organizing change at a meta level—through phases and iteration planning—rather than injecting it directly into day-to-day tasks.
Component-Based Development (CBD)
The Unified Process (UP) is also a process that presupposes component-based development (CBD).
UP emphasizes dividing responsibilities into units such as subsystems and components and assigning clear boundaries to them in order to make the impact of changes easier to control.
CBD has important implications for the process itself, not merely as a design or implementation technique. Once component boundaries are established, it becomes clear which areas are subject to change and which constitute stable regions.
In UP, such boundaries are deliberately designed at a relatively early stage, serving as a foundation for stabilizing subsequent development.
Use-Case–Driven Development
In UP, use cases are not merely requirement descriptions.
Use cases are used as a central axis that runs through the entire development process.
-
Organizing requirements
-
Guidance for design
-
Perspectives for testing
-
Criteria for progress and completion
As a result, each development activity is given meaning in terms of which use case it is intended to realize. In project management as well, progress can be assessed based on the realization status of use cases rather than merely on task completion.
Iterative and Incremental Development
The Unified Process (UP) presupposes iterative and incremental development.
Iteration in UP is defined as an approach that repeatedly executes small development units encompassing analysis, design, implementation, and testing.
Rather than flowing processes in a single direction, this design assumes that technical and structural factors—only revealed through implementation—should be identified early.
Iteration is positioned as a fundamental mechanism for surfacing such factors early, rather than deferring them to later stages of development.
Incremental development in UP is defined as an approach that progressively determines the content and precision of deliverables as development proceeds, rather than aiming for a complete form from the outset.
Elements such as requirements, design, and architecture are initially placed in provisional form and are gradually concretized and stabilized through iterations.
Incremental development is positioned as a fundamental progression principle that does not assume full determination at the outset, but instead builds decisions step by step.
Architecture-Centric
In UP, architecture is placed at the center of decision-making.
Architecture is not merely a structural diagram, but a foundation that constrains and guides subsequent design and implementation choices. By establishing architecture at an early stage, the cost of rework is reduced and the overall stability of development is increased.
This architecture-centric perspective reflects a stance that prioritizes structural soundness over functional completeness.
Risk-Driven
One of the fundamental ideas underlying the Unified Process (UP) is risk-driven development.
In UP, priorities are determined not by simple feature order or workload, but by the magnitude of technical and structural risks.
The phase structure itself is designed from the perspective of which risks should be mitigated, when, and at what stage.
This makes it possible to surface uncertainties early and address them, rather than having problems emerge late and cause failure.
As we have seen so far, the Unified Process is a software development framework designed to accommodate projects of various scales and purposes, ranging from large enterprise systems to single-shot web applications.
Elements such as phases, iterations, architecture, use cases, and risks are organized as a set of functions for structuring how development proceeds and at what granularity decisions are made.
The Unified Process is positioned as a framework that allows development processes to be constructed according to the scale and nature of a project by combining these functions.
Comparing Agile Development Through the Lens of UP Characteristics
Using the characteristics of the Unified Process summarized in the previous section as comparison axes, we will examine how agile development approaches the same issues.
Models and Programs
UP treats object models described in UML as primary artifacts and positions programs as deliverables derived from those models.
In contrast, agile development treats programs as primary artifacts, resulting in a code-driven development process.
Model-driven versus program-driven: this distinction can be seen as the decisive difference between UP and agile development.
Phases and Iterations
This characteristic concerns the level at which change and uncertainty are organized and reflected in decision-making.
UP has a dual structure of phases and iterations, shifting the center of gravity of the project at the phase level while carrying out individual validation and progress through iterations. Changes are primarily organized at the level of planning and redesign.
Agile development, on the other hand, lacks a higher-level structure such as phases and responds to change directly within iterations (sprints). While both address the same challenges, they differ in the layer at which flexibility is exercised.
Component-Based Development (CBD)
This characteristic addresses how the scope of change impact is controlled through process mechanisms.
In UP, component orientation is built into the development process from the outset. Boundaries are defined early, and subsequent changes are, in principle, localized.
In contrast, agile development does not mandate the definition or stabilization of component boundaries as a formal process, leaving such decisions to developers and teams.
Use-Case–Driven Development
This characteristic concerns how work is given meaning and at what unit it is managed.
In UP, use cases serve as management units that run through the entire process, linking requirements, design, testing, and progress tracking.
Agile development proceeds by starting from a backlog and decomposing work into user stories and tasks. While both approaches share similar concerns, they adopt methods with different levels of granularity and modes of expression.
Iterative and Incremental
This characteristic concerns what is advanced through iteration.
In UP, iteration is positioned as a means to mature understanding and structure and to reduce uncertainty. Outcomes are evaluated in terms of structural clarification and risk reduction.
Iteration is also an important means of progress in agile development, but it proceeds primarily through working deliverables and feedback. The difference lies in the layer at which iteration is operated and the criteria by which it is evaluated.
Architecture-Centric
This characteristic concerns how far the process guarantees when and to what extent structure is determined.
In UP, architecture is positioned at the center of decision-making, and establishing it early is a process requirement.
In agile development, an architecture-centric stance is not mandatory, and structural establishment is assumed to occur gradually through practice and refactoring.
Risk-Driven
This characteristic concerns how priorities are determined.
In UP, technical and structural risks are explicitly prioritized, and the phase structure itself is designed as a risk mitigation strategy.
In agile development, business value and feedback serve as primary decision inputs, and risks that emerge during execution are handled incrementally.
Summary and Positioning of the Comparison
In the previous section, we compared how agile development approaches the same challenges using the characteristics of the Unified Process (UP) as reference axes.
The table below summarizes whether each characteristic discussed so far falls into “essential differences,” “differences in approach,” or “outside the scope of agile.”
| Feature | Classification |
|---|---|
|
Models and Programs |
Essential Difference |
|
Phases and Iterations |
Difference in Approach |
|
Use-Case–Driven Development |
Difference in Approach |
|
Iterative / Incremental |
Difference in Approach |
|
Risk-Driven |
Difference in Approach |
|
Outside Agile Scope |
|
|
Architecture-Centric |
Outside Agile Scope |
What emerges from this comparison is that UP and agile are not doing “entirely different things” as development processes; rather, many differences stem from policy choices about which concerns are explicitly treated as process responsibilities.
The essential difference lies in the positioning of models and programs.
UP is model-centric: requirements, structure, and design intent are consolidated into models, which then serve as the basis for generating and evaluating programs.
In agile development, the running program effectively becomes the primary source of truth, while models and documents play a supporting role.
Changing Premises in the AI Era
In software development, the ideal workflow has traditionally been to create analysis models, obtain stakeholder agreement, and then proceed with programming.
In practice, however, it has not been easy to keep models and specifications up to date and consistent. As a result, together with the increasing expressive power of programming languages, a program-centric approach—treating code as the de facto primary source of truth—became established as a practical choice.
With the advent of generative AI, this premise is now beginning to change.
AI reads not only programs but also models, specifications, design documents, comments, and other textual artifacts simultaneously, generating programs based on the relationships among them.
Therefore, if discrepancies or contradictions exist between models, specifications, and programs, accurate program generation becomes difficult.
At the same time, generative AI makes it possible to synchronize models, specifications, and programs by referencing them against one another. Updating specifications or models during development and immediately reflecting those changes in programs has now become a practical operational reality.
In this way, the very premise that treated program-centric development as a practical solution is undergoing a fundamental shift.
Going forward, it will be necessary to share information and form agreements through models and specifications not only among developers and stakeholders, but also with AI included as a participant.
In other words, software development that collaborates with AI will inevitably take a model-centric form.
Since the early 21st century, agile development has led software development as a program-centric methodology. However, when the use of AI is assumed, significant structural changes may also occur in this domain.
If software development in the AI era shifts toward a model-centric approach, it naturally follows that development processes themselves should also be centered on models.
From this perspective, the Unified Process—designed as a model-centric development process—can be regarded as one of the most useful reference frameworks for thinking about software development processes in the AI era.
Summary
The model presupposed by the Unified Process was an object model, typically represented by UML. Requirements and designs were expressed as structured diagrams, which humans interpreted and translated into programs. This was a rational design based on the assumption of human-centered development.
In contrast, models in the AI era have a fundamentally different nature. Modern generative AI can understand, manipulate, and transform natural language text that includes object models.
Natural language is no longer merely explanatory or supplementary; it has become an intelligible and executable model for AI.
This marks the fundamental difference between the model view presupposed by UP and that of the AI era.
With the advent of AI, the constraints that “models must be diagrams” or “models must be formal languages” have been lifted. As a result, conditions have emerged in which requirements and designs written in natural language themselves can be placed at the center of development.
Literate model-driven development, pursued within SimpleModeling, directly embraces this change by reconstructing natural language descriptions as the core of models.
In the next article (📄 Framing the Development Process in the AI Era), building on these premises, we will reinterpret the Unified Process as a reference framework for thinking about development processes in the AI era and explore its connection to SimpleModeling in greater depth.
References
Glossary
- Development Process
-
A development process is the entire set of activities involved in building, deploying, and maintaining software systems. It encompasses planning, modeling, implementation, testing, and delivery as a systematic flow of development activities.
- Cloud Native Component Framework (CNCF)
-
Cloud Native Component Framework (CNCF) is a framework for executing cloud application components using a single, consistent execution model. Centered on the structure of Component, Service, and Operation, it enables the same Operation to be reused across different execution forms such as command, server (REST / OpenAPI), client, and script. By centralizing quality attributes required for cloud applications—such as logging, error handling, configuration, and deployment—within the framework, components can focus on implementing domain logic. CNCF is designed as an execution foundation for literate model-driven development and AI-assisted development, separating what is executed from how it is invoked.
- Semantic Integration Engine (SIE)
-
An integration engine that unifies structured knowledge (RDF) and document knowledge (SmartDox) derived from the BoK, making them directly accessible to AI.
- TDD (Test-Driven Development)
-
Test Driven Development (TDD) is a development practice in which tests are written before implementation, and the code is evolved by repeatedly making tests pass and refactoring.
- Activity
-
A concrete action or task performed within an Activity Space to move an Alpha to a more advanced state, typically producing or refining Work Products.
- bug
-
A colloquial term referring to software problems. It has no strict technical definition and is often used broadly to cover Defects, Faults, or Failures.
- UP (Unified Process)
-
A process model based on UML, characterized by iterative, use-case–driven, and architecture-centric development. It has derivatives such as the Rational Unified Process (RUP) and provides a foundation for practicing Component-Based Development (CBD).
- Component
-
A software construct that encapsulates well-defined responsibilities, contracts, and dependencies as a reusable and replaceable unit. In the logical model, it serves as an abstract structural unit; in the physical model, it corresponds to an implementation or deployment unit.
- verification
-
Verification is the activity of confirming that an implementation conforms to its specified design or requirements.
- CBD (Component-Based Development)
-
Component-Based Development (CBD) is a software development approach in which systems are constructed and reused through components that define clear responsibilities, contracts, and interfaces. Components are designed to be independent and replaceable, enabling loosely coupled architectures that improve maintainability and reusability. In the logical model, a component serves as an abstract structural unit defining functionality and contracts; in the physical model, it corresponds to implementation and deployment units.
- UML (Unified Modeling Language)
-
A standardized modeling language for object-oriented analysis and design. It represents system structures and behaviors through diagrams such as class, sequence, and use case diagrams. Serves as the foundational language for UP and CBD.
- validation
-
Validation is the activity of confirming that a system or product fulfills its intended use and stakeholder requirements.
- Literate Model-Driven Development (LMDD)
-
Literate Model–Driven Development (LMDD) is a software development methodology that integrates natural-language narrative and formal model structure within a unified text-based framework. It extends conventional Model–Driven Development (MDD) by treating documentation and models as a single, consistent source of truth. In LMDD, the descriptive and structural elements of development artifacts are expressed together using the SmartDox language. From this unified representation, ModelDox extracts structural data, CML (Cozy Modeling Language) defines domain-specific models, and Cozy generates executable code, documentation, and configuration artifacts. Artificial intelligence participates in the LMDD process by analyzing the narrative context, validating structural consistency, and supporting the refinement of models and generated artifacts. All artifacts are represented in text form, ensuring traceability, version control, and interoperability within standard development environments. By defining a formally connected and machine-interpretable relationship between documentation, design, and implementation, LMDD provides a foundation for AI-assisted model–driven engineering where human authorship and automated reasoning operate on the same representational layer.