1. Introduction to Essential Skills for the Agile Developer.
- Present logistics of the course
- Present foundation for the course (Introduction to the UML, core code qualities)
2. Programming by Intention is a simple skill – a variation of top-down design. A cornerstone practice of eXtreme Programming, programming by intention is a powerful method of quickly achieving code that manifests strong cohesion, encapsulation of implementation and testability. It is one of the four “essential skills” taught in Net Objectives’ Design Patterns Explained class.
3. Consider Your Tests Before Writing Code is an easier to implement practice than test-driven development. Nevertheless, it results in much better code, in less time, than if this practice is not done. It is one of the four “essential skills” taught in Net Objectives’ Design Patterns Explained class.
4. Shalloway’s Law and Principle is a practical way to avoid duplication. While Kent Beck’s “once and only once” rule is a great goal, in practice, it cannot actually be achieved. Shalloway’s law is “when N things need to change and N>1, Shalloway will find at most N-1 of the things”. Shalloway’s principle is “avoid situations where Shalloway’s law applies.” Essentially, this mean use the compiler and linker to discover where changes need to take place. This avoids duplication that will cause problems later. It is one of the four “essential skills” taught in Net Objectives’ Design Patterns Explained class.
5. Encapsulate that is an attitude about how to handle uncertainty. Encapsulation is relatively easy to achieve in all languages (object-oriented as well as non-object oriented). The lack of proper encapsulation causes high technical debt. A case study where uncertainty is present is shown, illustrating encapsulation’s power. How multiple teams can use encapsulation via mocks is also presented – illustrating how n-tier architectures can be constructed even when dependencies between them are not well known. It is one of the four “essential skills” taught in Net Objectives’ Design Patterns Explained class.
6. Separate use from Construction is another simple method that creates cohesion and decoupling in your code. There are several ways to implement this. The session starts by considering the question: ”when adding new functionality to an existing code base, which takes more time, writing the code or integrating it in?” For most people, it is the integration part that takes the most time. The follow up question “why is this?” sets the stage for this session. The Singleton pattern is also introduced, but in a way that is more powerful than it’s normal description.
7. Commonality-Variability Analysis (CVA) is a simple method to do basic analysis of a design. Many technical Agile coaches have thrown the baby out with the bath water by espousing no or little design up-front. Design is not dead. Too much design is bad, but too little (or none at all) has significant negative consequences. CVA is a simple method to create a conceptual architecture for an application very quickly that provides both guidance to the team as well as eliminating problems that would otherwise surface. The Analysis Matrix is a tool that enhances CVA in complex situations.
8. Refactor to the Open Closed. Refactoring is rightly thought of as improving bad code without adding functionality. But this is only half of the story of refactoring. The other half is improving a quality design implemented with quality code that now needs to change due to a new requirement. Refactoring to the open closed is the cornerstone of emergent design.
9. Essence of Design Patterns. Design patterns, as presented by the Gang of Four’s seminal book Design Patterns: Elements of Re-usable Object-Oriented Software are a manifestation of 3 design practices:
- Design to interfaces
- Prefer delegation over inheritance
- Encapsulate the concept that varies
At this point, these practices will be well understood by the participants. This session presents these concepts as a way to tie together the lessons learned throughout the course
10. Course closeout. This session is a review of all of the earlier sessions. It provides a prolonged question and answer period as well as an opportunity for participants to bring the methods learned into their real-life problems.