Archive for March, 2010
Delusion: A firm belief despite contradiction in the face of reality
DevDays 2010 in Cape Town was slick. Very slick. You guys really know how to put an a good show.
Most of the speakers were good. Most demos were good. Most jokes were funny. The food was mostly good. The mood was mostly good too. And the fan club was mostly impressed. And most noobs were converted forever. And the new features were mostly so good, apparently, you won’t have to write so much code anymore. And the most underused word was design. Most absent words were TDD, refactoring, quality, and clean!!
I understand that DevDays is a product showcase but, come on, MS South Africa, at least cater for the entire spectrum of developers, just a little bit, and in a responsible manner. How about pitching content that shows that you do care about design, about clean code and quality. How pitching the new features in a way that shows a trend towards agility, to being able to refactor code continuously, to test first and other vital aspects of professional software development.
Let me give you just an example to illustrate what I mean. The EF4 code first demo was explained completely as if the classes in the model are no different from entities in a table. Even the language used was “entities” and “keys”. I don’t think I heard the word “class” or “object” once! You may have slides with the words “Code First Model”, but if you don’t actually do it for real, then you’re just leading dataset-happy developers that are marginally object-oriented further away from good code and good architecture. You need to explain why it’s better: that it promotes better object orientation, that POCO models disconnected from an ORM can be done test-first, and you can evolve your model, instead of designing up-front, blah, blah, blah.
Another time there was a ping-pong table with a developer at one end and tester at another with a bug being batted between them. That pulled quite a laugh from just about everyone. While that is reality in many organisations, there are many of us that test our own code and deal with our own bugs. The tester that we toss our code to is our automated continuous integration server. Tossing code downstream when it’s too late for reprise is not very professional. How about focusing on the testing tool, as opposed to pitching it in a manner that makes everyone believe that dealing with the bug downstream is just the way its meant to be.
Sure, I know that you need to show off the latest cool things and evangelise your products, but there is a sector of developers that you are blatantly ignoring. It is the sector that is, perhaps, the most influential amongst other developers. We are those developers that value our craft of software development. We evangelise the craft and the value that it brings to our lives, our teams, our projects, our clients and our organisations.
Perhaps I am just delusional.
Oh well, so long and thanks for the fish.
Beware the Big Industry Specification Up Front
If you have done any development in Java-land, then surely you came across the dreaded three letter word EJB. And you were most likely duped into thinking it was great. I did! Then I realised it was just a specification. It was a great big, furry, non-executable PDF. A specification for managing objects but the creating of these objects were just horrid. EJB3 was a clean-up exercise, but still far from nice.
A couple of months ago I ran into OSGi again, but with SCA on top of it. Horrid! SCA is yet another warm and huggable specification. But it’s so ugly to work with. Everything feels so over the top complicated and restrictive in expression. And the tools that I saw built on this SCA implementation were just awful. Beyond being buggy, the enforced paradigm was just counter-productive. When will tool vendors realise that talented developers do not want a diagramming interface to write code? But the root cause is that the SCA specification describes the diagramming notation. Yuck! Same reason that I do UML sketches with a lot of bastardisations with no tie-in with my code.
And let me not go into domain specific big vendor specs, designs, blue prints, etc. like IBM’s Insurance Application Architecture (IAA). Nasty stuff.
More commonly, I see so many self-confessed agile teams fearing the dreaded big design up front, and the big requirements up front document thrown over the wall. If there is such a fear for big-x-up-front, why is there no fear for big-industry-and-vendor-specs-up-front like EJB, SCA, IAA, etc?
Why?
There are deep lessons and principles lurking beneath this surface. Agile demands you to be a lot more aware of actions, decisions and consequences.
So why do you choose not to be agile when you are trying so hard to be agile?
The Last Sprint Challenge
In agile economics we often talk about stopping the project before it 100% complete; when you reach a point of diminishing returns; i.e. that agile fail-safe point when the cost of producing software is greater than the value of the software itself. Kind of.
So let’s try a weird-ish thought experiment. You’re in such a project and you’ve reached this point. You are about to start the dead last sprint and then it’s over. The team will be disbanded, but the software will live on.
You have just one more opportunity to work on this product, with this code base, with the people on this team. Your legacy is in this software. Every decision you made is sitting in a vast time line of deltas in your version control repository, all the way back to day 0.
What do you choose to do in this last sprint?
