
Master delivering software in complex enterprise environments through a practical, Java-based course that covers requirements to implementation in a simulated corporate scenario.
Outline the course agenda and conventions, introduce the Juggernaut project and Behemoth application, and present the Matryoshka model from business requirements to implementation.
Align on course conventions and the matryoshka model, a layered development approach from requirements engineering to algorithm definition, then Java implementation with a Spring Boot app.
Explore software development in big corporations via the Industrial Machines Corporation. Follow the sales and pricing division as it provides internal it services, discount recommendations, price calculations, and risk assessments.
Explore the Juggernaut project to integrate Unified Cranes into the behemoth system, balancing waterfall scope with agile practices and six phases of weekly test deployments.
Discover behemoth, a discount calculator using customer loyalty, credit rating, and order history. Inspect its architecture: relational database, Goliath components, data imports, and rest api plus admin interfaces.
Explore the four challenge categories—functional, technical, infrastructural, and organizational—facing development teams in big corporations, with real-world examples of miscommunication, monolithic systems, and slow approvals, and discover paths out.
Explore how the Matryoshka model frames Melissa's growth and onboarding and Michael's planning and team leadership on the Juggernaut project.
The matryoshka development approach reframes software development as layered, abstract-to-concrete work, guiding you from refined requirements to a released application with artifacts.
Understand the Matryoshka development approach, moving through six layers from requirement refinement to production-ready integration. Apply rapid iteration, backtracking, and test-driven development to refine artifacts and adapt to evolving requirements.
Identify actors, entities, and relations to build a functional data model from a business requirement, using a discount recommendation example with customers, products, orders, ratings, and countries.
Master a refresher on Java generics, collections, functional interfaces, and lambda expressions. Explore dependency injection, builders, and Lombok to simplify construction and promote separation of concerns in enterprise code.
Translate the abstract algorithm into a concrete Java implementation, wiring dependencies and unit tests to verify correctness while applying date checks, country-based adjustments, thresholds, and loyalty rules for big corporations.
Inspect the behemoth framework and its Goliath component, map your component’s data model to it, and prepare for integration tests with Spring Boot and an in-memory database.
Integrate the isolated component into the behemoth application by building data model mappings and adapters, translating between our model and the Goliath framework while validating with unit tests.
Apply test driven development to create a spring boot integration test validating the discount controller via an http call and json response, initially failing, then integrate.
Integrate the final adjustment component into the behemoth application by building adapters that translate external services into internal interfaces, register the modification in the rule engine, and verify with tests.
Handle specification changes by tracing from the abstract requirement to concrete implementation, updating data models, algorithms, tests, and adapters for multi-country scenarios.
Refactor your code to optimize structure without changing functionality, unifying data models and services, enforcing conventions, and adding logging and validation for a cleaner, more maintainable codebase.
Explore three avenues for performance optimization—optimizing algorithms, caching, and a preliminary calculation—demonstrated by decorating a country-based adjustment map with a cache to avoid repeated data retrieval.
Enterprise applications in big corporations pose a specific set of challenges that software developers do not encounter on smaller projects.
First, enterprise applications tend to be very complex. It is not an exception for an enterprise application to have dozens to hundreds interfaces, reports, processing rules, adapters etc. The sheer numbers of the system make it very difficult to grasp.
Second, the business logic in enterprise applications can be very complex. Such applications are usually huge back end systems that provide global services to all departments of the whole enterprise.
Third, enterprise applicationy are usually very long-living. As a result, they utilize outdated technologies and patterns. Heavy-weight, monolithic application servers with strictly defined layers of logic and hardwired dependencies are difficult to deploy and to adapt.
Fourth, the enterprise IT is often very business-centric. Your stakeholders, such as business colleagues, project managers and analysts have a deep knowledge about how their business works. As a developer, you often lack the specific knowledge and have to close this gap before you can successfully work in the given line of business.
Fifth, the development models in big organizations are often unflexible. Most enterprises still utilize the waterfall model which makes adaptations difficult.
And, finally, there are bureaucratic hurdles. You need a lot of access permissions, certificates, software licenses, tool installations and approvals before you can even start working. The setup of your working environment on a new project can literally take months.
All of this is disconcerting. But here is the good news: There is a way of mitigating all of the problems mentioned above. I will show you in this course how you can set up a working mode for yourself that enables high quality of your results and efficiency of your work, regardless of the complexity of the system and your familiarity with it.
The course is based on theoretical concepts, but I will not bore you with theory too much. Instead, we will have a practical tutorial. During the course, we will walk through a simulated scenario in a fictive enterprise corporation where we will receive a functional requirement and implement it. The scenario is kept close to the real-live work in an IT department of a complex enterprise. We will use Java as programming language and make our hands dirty by writing the code.
Let's also agree on what this course is not about.
This course is not a beginner programming tutorial. You will not learn the basics of Java here. To gain the most from the course, you should be already familiar with basic programming knowledge, especially with object-oriented programming languages, such as Java. You don't need industry experience, however, to understand the topics in this course. On the other hand, I am sure that you will profit from this course even if you are a seasoned software developer.
Thanks for your interest. Enjoy the course.