Welcome to
Hands-on Software Engineering Resources
Hands-on Software Engineering provides practical resources for learning and applying modern software engineering principles, methods, and best practices. The site emphasizes systematic processes, clear guidelines, concrete examples, and reusable resources that help students, practitioners, educators, and researchers apply software engineering concepts to real-world systems.
The contents are organized around our published and forthcoming books and currently focus on three major areas:
- Hands-on Software Architecture: Unified Architecture Process
- AI-Assisted Object-Oriented Programming: Generation, Review, and Refactoring
- AI Software Engineering: Principles, Methods, and Practices
These resources are primarily designed to support the development of large-scale conventional and AI-based software systems, where systematic engineering processes, sound design principles, and disciplined practices are particularly important. Each area combines conceptual foundations with hands-on methods, examples, templates, case studies, and supporting materials for practical application.
Hands-on Software Architecture: Unified Architecture Process
What is Software Architecture?
Software architecture is a critical design activity in modern software development, providing the structural foundation for building reliable, scalable, maintainable, and evolvable software systems. Its importance becomes even greater in large-scale, industrial-strength applications, where complexity, performance requirements, integration demands, and quality attributes introduce significant design challenges.
Software architecture addresses the organization of a system into major elements, their responsibilities and interactions, architectural views, and design decisions that influence both functional and non-functional requirements. A well-designed architecture provides a stable foundation for subsequent design, implementation, integration, deployment, and evolution.
Why a Systematic Architecture Methodology?
Designing software architecture is a complex activity that requires more than individual experience or ad hoc design decisions. A systematic architectural methodology provides the structure needed to guide architects from requirements understanding through architectural formulation, refinement, and evaluation.
Such a methodology defines clear activities, work products, decision points, and architectural views. It also provides systematic ways to address architectural styles and patterns, quality attributes, design rationale, and scenario-based evaluation. This disciplined approach improves consistency, traceability, repeatability, and justification of architectural decisions, while helping ensure that the resulting architecture remains aligned with system objectives.
Unified Architecture Process (UAP)
The Unified Architecture Process (UAP) provides a comprehensive methodology for applying this systematic approach in practice. UAP organizes software architecture design into well-defined activities, work products, and architectural views that progressively transform requirements into a coherent architectural solution.
UAP integrates requirements refinement, system context analysis, schematic architecture design, architecture views, design for non-functional requirements, and architecture evaluation within an iterative and disciplined workflow. It also incorporates architectural styles and patterns, quality-related design strategies, rationale documentation, and scenario-based evaluation to support systematic architectural decision-making.
By providing a structured and repeatable process, UAP helps architects develop architectures that are traceable, justifiable, adaptable, robust, and aligned with both functional and non-functional system requirements.

The Unified Architecture Process (UAP) is presented in detail in the following book:
Soo Dong Kim and Mira Kim, Hands-on Software Architecture: Unified Architecture Process, Springer, 2025. 517 pp. ISBN 978-3-032-01183-1
This website provides supplementary UAP resources, guidelines, templates, examples, and case studies for learning and applying software architecture design in practice.
AI-Assisted OOP: Generation, Review, and Refactoring
Why Programming In the AI Era?
As AI copilots increasingly generate code from natural-language prompts, it may seem that traditional programming skills are becoming less important. In reality, programming knowledge is more important than ever. AI can rapidly produce candidate solutions, but it cannot reliably determine whether the resulting code is correct, well designed, secure, maintainable, or appropriate for a particular system context. Developers must still understand the problem, express design intent and constraints, evaluate alternatives, identify weaknesses, and validate that the software satisfies its requirements.
Programming knowledge therefore provides the foundation for using AI effectively. Skilled developers know what to ask for, how to assess generated code, and how to refine it when necessary. Programming also develops disciplined problem-solving skills, including decomposition, abstraction, logical reasoning, and systematic design. In the AI era, the programmer’s role is evolving from writing every line of code manually to guiding, evaluating, and improving AI-generated solutions through effective human–AI collaboration.
Why OOP Constructs Matter
A sound understanding of object-oriented programming constructs is essential because they provide the foundation for designing, analyzing, and implementing object-oriented software. Constructs such as objects, classes, inheritance, polymorphism, dynamic binding, abstract classes, interfaces, generic classes, and reflection enable developers to realize abstraction, encapsulation, reuse, extensibility, and flexible software structures. This understanding is even more important in AI-assisted programming, where developers must be able to judge whether AI-generated code applies OOP mechanisms correctly, assigns responsibilities appropriately, and produces maintainable and extensible designs. Without a solid grasp of these constructs, developers cannot reliably evaluate, refine, or validate AI-generated object-oriented code.
AI-Assisted OOP Practices
AI copilots can significantly enhance object-oriented programming by supporting three major activities: code generation, code review, and code refactoring. However, effective AI assistance requires developers to provide clear programming intent, design constraints, and evaluation criteria rather than relying on unconstrained code generation.
Structured copilot prompt templates help make these interactions more precise, systematic, and repeatable. Through this human–AI collaboration, developers remain responsible for guiding the copilot, evaluating its outputs, refining the generated solutions, and validating that the final code satisfies both functional requirements and sound OOP principles.

The AI-Assisted Object-Oriented Programming approach is presented in detail in the following forthcoming book, scheduled for publication in late 2026:
Soo Dong Kim, Jennifer Jin, and Mira Kim, AI-Assisted Object-Oriented Programming: Generation, Review, and Refactoring in C++, Java, and Python.
This website provides supplementary resources on essential OOP concepts, AI-assisted OOP practices, structured copilot prompt templates, and practical examples for learning and applying object-oriented programming in the AI era.
AI Software Engineering: Principles, Methods, and Practices
What are AI Systems?
AI systems are software systems whose behavior is shaped not only by explicitly programmed logic, but also by data, learning processes, trained models, probabilistic outputs, prompts, agents, and runtime feedback. Unlike conventional software systems, whose behavior is largely determined by predefined rules and algorithms, AI systems often derive significant portions of their behavior from models learned from data.
AI capabilities may appear in diverse forms within a software system. They may be embedded as machine-learning models that perform prediction, classification, recommendation, or perception; realized as intelligent computing components that support generation, reasoning, and decision-making; or manifested through adaptive, autonomous, and agentic runtime behavior.
Modern AI systems therefore extend well beyond isolated models. They commonly integrate data pipelines, trained models, inference services, application logic, user interfaces, external services, operational infrastructure, monitoring mechanisms, and governance processes into complete software systems.
Diversity of AI Technologies and Engineering Frameworks
The technology landscape for developing AI systems is rapidly expanding. Modern systems may incorporate machine learning, deep learning, foundation models, large language models (LLMs), generative AI, multimodal AI, and agentic AI. These technologies support different forms of intelligence, including perception, prediction, generation, reasoning, planning, decision support, and autonomous action.
AI system development also depends on a growing collection of engineering frameworks, platforms, tools, and lifecycle approaches. These include data engineering platforms, model-training frameworks, experiment-management tools, model-serving infrastructures, monitoring platforms, AI lifecycle frameworks, MLOps, and hybrid software–AI development processes.
These technologies are not interchangeable. They differ substantially in their:
- data requirements,
- computational demands,
- development and experimentation processes,
- model and artifact lifecycles,
- runtime characteristics,
- deployment architectures,
- quality concerns, and
- operational management requirements.
Consequently, engineers must not only understand individual AI technologies, but also determine how to select, combine, integrate, operate, and evolve them within complete software systems.
Challenges in Developing and Operating AI Systems
Developing and operating AI systems introduces challenges beyond conventional software development because system behavior depends on data, trained models, probabilistic inference, and changing environments.
Major development challenges include:
- obtaining sufficient, representative, and high-quality data,
- preparing and managing datasets,
- selecting and validating appropriate models,
- managing experimentation and reproducibility,
- integrating AI models with conventional software components,
- specifying measurable model-performance requirements,
- addressing uncertainty and nondeterministic behavior,
- ensuring robustness, explainability, fairness, and safety, and
- managing computational resources and infrastructure.
After deployment, additional challenges arise from data and model drift, performance degradation, runtime monitoring, retraining, model replacement, rollback, version management, and continuous validation. Generative and agentic AI systems further introduce concerns such as prompt and context management, agent orchestration, memory and state management, tool interaction, runtime control, human oversight, and governance.
These challenges are intensified by the rapid evolution of AI technologies and frameworks. Addressing them systematically is a central motivation for AI Software Engineering.
What is AI Software Engineering?
AI Software Engineering applies and extends systematic engineering principles, methods, processes, and practices to the development, deployment, operation, maintenance, and evolution of AI-based software systems.
AI Software Engineering treats AI systems as complete software systems rather than isolated models, algorithms, or data-science experiments. It provides an engineering foundation for managing the full system context in which AI capabilities operate, including data pipelines, trained models, inference services, application logic, user interaction mechanisms, monitoring processes, operational infrastructure, and governance mechanisms.
Conventional software engineering remains foundational for AI systems, but its principles and practices must be extended to address several characteristics that are distinctive to AI-based software systems, including:
- Data Dependency
- Learning-Based Behavior
- Model Uncertainty
- Probabilistic Outputs
- Experimentation
- Runtime Drift
- Explainability
- Fairness
- Robustness
- Autonomous Behavior
- Agentic Behavior
- Responsible Governance
AI Software Engineering therefore provides the systematic discipline required to transform AI capabilities into software systems that are reliable, maintainable, transparent, accountable, governable, and sustainable over time.
About the Book
Building on this engineering perspective, the forthcoming book AI Software Engineering: Principles, Methods, and Practices, scheduled for publication in 2027, presents a unified approach to engineering AI-based software systems throughout their lifecycle. Its scope includes traditional machine-learning-based systems as well as modern systems based on foundation models, generative AI, and agentic AI.
The book is not primarily a machine-learning textbook. Rather than focusing principally on the mathematics of algorithms or model training in isolation, it emphasizes the principles, methods, processes, artifacts, and best practices needed to engineer complete AI software systems. The book organizes AI Software Engineering around five major engineering tracks:
- AI Software Process Models — lifecycle frameworks for structuring and coordinating AI system development, including AI lifecycle frameworks, MLOps, hybrid development processes, and process tailoring.
- AI Model Engineering Activities — systematic engineering of data, models, prompts, and agent configurations, including preparation, training, validation, optimization, fine-tuning, versioning, monitoring, and evolution.
- AI Software Development Activities — requirements specification, system analysis, data engineering, architecture and design, model integration, implementation, testing, deployment, and maintenance for AI-based systems.
- AI Project Management Activities — project planning, effort and cost estimation, risk management, team management, and progress monitoring and control for AI projects.
- AI Supporting Activities — quality assurance, configuration management, metrics and measurement, process assessment and improvement, and documentation and communication for AI systems.
The book is organized into six major parts.
Part I — Foundations of AI Software Engineering
Introduces conventional software engineering foundations, AI systems and machine learning, and the principles, scope, challenges, and benefits of AI Software Engineering.
Part II — AI Software Process Models
Presents lifecycle frameworks for AI system development, including MLOps, hybrid development processes, and process tailoring.
Part III — AI Model Engineering Activities
Addresses the engineering of AI models and related artifacts, including development, validation, optimization, versioning, monitoring, and evolution.
Part IV — AI Software Development Activities
Covers requirements specification, system analysis, data engineering, AI system architecture and design, model integration, implementation, testing, deployment, and maintenance.
Part V — AI Project Management Activities
Addresses project planning, effort and cost estimation, risk management, team management, and progress monitoring and control.
Part VI — AI Supporting Activities
Covers quality assurance, configuration management, metrics and measurement, process assessment and improvement, and documentation and communication for AI systems.
The book is intended for senior undergraduate and graduate students, software engineers, AI and ML engineers, data engineers, software and system architects, project managers, technical leaders, educators, and researchers who need a systematic engineering foundation for AI system development.
Supplementary materials will be provided through this website, including practical examples, engineering artifacts, templates, checklists, case-study materials, additional references, updates, and errata. These resources are intended to support university courses, self-study, and professional practice.
Meet Our Team
We are a team of researchers and practitioners with extensive research, development, and industry experience. Our expertise spans both computer science and application domains, enabling us to address AI and software engineering problems from both technical and domain perspectives.
Key members of the team include the following experts:
- Soo Dong Kim, Ph.D. (Software Architecture, Agentic AI Systems, AI in Healthcare)
Founder/CEO, PrimeAI Labs LLC, CA, USA
Emeritus Professor, School of Software, Soongsil University, Seoul, Korea - Jennifer Jin, Ph.D. (Software Engineering, Machine Learning)
Associate Professor, School of Computer Science and Engineering, California State University, San Bernadino, CA, USA - Mira Kim, Ph.D. (Software Engineering, AI Systems Design)
Assistant Professor, Department of Computer Science, California State University, Fullerton, CA, USA - Daniel Jin, M.D. (AI Systems for Medical Diagnosis)
Assistant Professor, Vascular & Interventional Radiology, Loma Linda University Medical Center, CA, USA - Myong Ho Song, Ph.D. (Software Engineering, Industrial AI Systems)
Project Manager, Division of Industrial AI, DeltaX Corporation, Seoul, Korea - Additional contributors specialize in UX design, software development, quality assurance, and back-end engineering.
