Posts Tagged ‘Agile’

YAGNI–Whose Definition of Simple?

I have read a lot about YAGNI lately, especially regarding TDD. The thing that keeps bugging me is the definition of “simple.” Who defines simple? For instance, wouldn’t static methods be simpler than building objects? You could then write more functionally. Or is that not simpler to you? If you follow command-query separation, wouldn’t building everything as either pure functions or commands be simplest? JB and I have found this set of patterns immensely easy to create and test of late, especially in comparison to the ever-increasing-in-complexity procedural/OO code in place before.

So I guess my question is this: Is it really so bad to start with some basic patterns that will let you refactor more easily? I think the desire to make things as simple as possible–especially when you know you will need it–can be a waste of time and a good way of getting bad code into your source.

I know I will hear it from the Agile community that I just don’t get it, but I think I do. I really like starting simple and keeping things in nice, bite-sized testable chunks. And yes, I’m still learning. However, without a consistent and meaningful definition of “simple,” we’re likely to end up with a follow-up movement of making things complex for the sake of extensibility again.

So what do you think: is CQS too complex a starting point, or is it a nice, “simple,” and testable approach for YAGNI?

The Manifesto for Software Craftsmanship

I was reading Faculty of the Mind in Google Reader this morning and saw a link to the Manifesto for Software Craftsmanship. JB and I have been following some of the craftsmanship discussions, also nicely summarized on Faculty of the Mind. I read over the manifesto, agreed with it, and as I went to the bottom to sign it, I saw JB’s name. Looks like we’re both on board. How about you?