Greg Young speech at JDD 2011

Recently I was an attendee of JDD – very nice conference placed in Kraków, Poland.

One of the first speech was about some general ideas. Greg Young pointed some really important things about developers and development process.

1. We are solving problems that nobody has.

That’s general problem with developers. We are smart and we want to be challenged. We don’t want to write simple business class, that is solving one problem. We want to write general solution for whole bunch of problems. Usually it doesn’t work as we expected.

Some time ago I was working on part of our project. It is using Model View Presenter principle. I decided, that I will write reusable component for displaying list of elements and linking each element with some kind of content. It took me some time to write and test this thing. I think it was quite good, it was nicely decoupled, there were couple of interfaces and some implementations. And the beginning we used this component in few places. But after two weeks requirements had changed and it appeared that in some places we need to customize this component. And customize it again, and again. As I see now we are using this component only in two places and most of interfaces have only one implementation.

I agree with Greg, we are solving problems that doesn’t exists yet. I think we should work other way around. We should write simple components and use as few as possible interfaces and classes (of course keeping in mind SOLID). Then, when requirements change we are able to extract functionality and reuse code. Is replacing concrete class with interface really so hard?

2. We are using new tools and frameworks.

New tools are great. At the beginning we think that this new tools will solve all problems. Than we start implementing features and after couple of weeks we see that we need to customize something. At this is the point where funny things are taking place. Usually we have to choose between rewrite everything using another framework or we can spend many hours looking through source code (if we have it) and hacking internal classes to get things done.

Of course usually we want to use newest frameworks :) That means not proven to be working in each case or not being enterprise ready.