When I tried to learn object-oriented design, I read the classics. At least I tried to read the classics. It didn’t go that well. It wasn’t until I began practising test-driven development that I began to truly understand the principles of object-oriented design, including how to use them effectively to drive down the cost of adding features. After a while, I recognised that I had really learned the principles of modular design in general, and not just of object-oriented design in particular. Since I learned those principles this way, I also teach them this way.
This is not a class in test-driven development, although we will review the fundamentals of test-driven development. Instead, in this class we focus on how to use a small number of simple rules to generate truly flexible designs: that is, designs that actually flex as you add more features.
If you’d like to reduce the cost of adding features and fixing defects, and build designs that respond easily to change, then this course is for you. You have probably tried test-driven development before, but even if you haven’t, we’ll review the basics and help you get started.
What you’ll learn
- How test-driven development can help you become an expert designer.
- How flexible design, and even architectures, emerge from a set of simple design guidelines.
- How to combine intuition with discipline to design with excellence.
- How you can justify your design practices to your colleagues, including project managers, product owners, and especially executives.
What you’ll do
- Ship several features of a system with the aid of an on-site customer.
- Apply simple design guidelines with discipline and diligence. I will make sure of that.
- Classify design approaches as “intuitive” and “mechanical” to see how these approaches support each other in helping you craft excellent designs.
- Ask plenty of questions and get plenty of answers.
What you’ll need to bring with you
- A computer, with a working software development environment.
- Something to write with, and something to write on. I suggest index cards and a notebook.