Unit testing is design, test suites that we get at the end is a by-product. A useful one of course.
Being an agile developer, we don't worry about BUFD instead we focus on "the simplest thing that could possibly work" so that we can evolve a simple design for our application. But the most argued and debated aspect of the above statement is simple design. How can we determine that a design is simple?
Here is my take..
Evolutionary design means that your design is going to grow as your application grows. We all know that decisions we made today might prove to be wrong tomorrow. How will I know that my application design is simple? A Simple design enables us to quickly respond to the change and as our design deteriorates, so does the ability to change effectively. A simple design will have a reversibility property to it and it is a key, if you can change your decisions quickly it is not a big deal to get them right (we are wrong most of the time anyway). So how can we keep delivering business value and keep our design simple? Testability
Testability is an characteristics of an software application that provides an ability to developers to write tests for the software application. I say this all the time and I will say it again, if it is hard to write test, most of the developers will not write them, especially new agile developers. It is very easy to get back to "hack and fix" mode under agile practices radar, because to outsiders and newcomers agile development looks very unconventional. So if we could improve the testability of an application, we could easily write tests to evolve our design to simplicity(Design for testability).
What I am looking for in this conference...
Sometimes, something that is simple to you might not be simple to me. How to make sure that future reader of my code will understand the code? Maybe It is very contextual. Sometimes "the simplest thing that could possibly work" turns into "first thing I could possibly think of", how simple is to simple?
We cannot take the ""the simplest thing that could possibly work" idea and design a programming language or could you?.