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 in C++, Java, and Python
- 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, including guidelines, templates, examples, and case studies, to support the learning and practical application of software architecture design.
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.
Why AI Software Engineering?
AI systems draw on a rapidly expanding range of technologies, including machine learning, deep learning, foundation models, LLMs, generative AI, multimodal AI, and agentic AI, each with different data, computational, lifecycle, and runtime characteristics. Developing and operating them introduces challenges beyond conventional software development: data quality, model selection and validation, nondeterministic behavior, drift and retraining, and, for generative and agentic systems, prompt, agent, and governance concerns. Addressing these challenges systematically is the 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.
About the Book
The forthcoming book AI Software Engineering: Principles, Methods, and Practices (2027) presents a unified approach to engineering AI-based software systems throughout their lifecycle, covering machine-learning systems as well as systems built on foundation models, generative AI, and agentic AI. It spans process models, model engineering, software development, project management, and supporting activities.
This website will provide supplementary resources, including examples, templates, checklists, and case-study materials, to support 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 Bernardino, 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.
