This morning I attended a Thoughtworks seminar in Stockholm. The venue was piperska muren - a really nice conference centre at Kungsholmen. The founder of the company opened up with a short introduction of the agenda, the company and the speakers.
Second - Martin Fowler
. A great speaker to say the least. He held 3 different short talks. (1) First he talked about the value of software design. He made a lot of good and well known points. Software design is not visible to the users and customer of a system so it is not easy to make them pay for good software design. The way to go about it is to introduce the concept of technical debt (coined by Ward Cunningham) to the customer. Whenever there is a technical debt the customer can either decide to pay the debt up front (refactor the system) or pay interest on future investments (added functionality needs to live with and work around limitations introduced earlier). And as interest builds up new functionality gets more and more expensive. He also did not agree on the difference between technical debt and mess as described in a blog post by Uncle Bob
but rather thought of it in matters of whether the debt was deliberately created or not. Fowlers nondeliberate debt probably equals Uncle Bobs mess. A debt is always created in any software project since we can not know the design until after we are done. Software development is exploratory in its nature and it is natural that knowledge about the system comes to us progressively throughout a project. A comforting thought indeed. (2) The second talk was a proposal to use the pattern called "event sourcing"
more in business applications. He argued that this concept - that developers use everyday while using version control systems makes a lot of sense in many business situations too. It solves the problems of history and alternative reality (branching) for us. Interesting but not applicable right now.... (3) In the third talk he took a step back and pondered on the nature of software projects and related it to the work of thoughtworks. There is a scale of software efforts from pure infrastructure of no competitive business value to core business software that may be the edge between a business and its competitors. A competitive and therefore expensive software consultancy like thoughtworks should look for the latter kind of projects - strategic projects where the payback is far higher then the increased cost of skilled developers. In these kind of projects there is a real point in using expensive and great developers. He finished of with a bit of self criticism wanting his company to work less with "crappy financial software" and more with stuff that makes the world a better place.
Third and last - Vivek Prahlad
- one of the men behind Twist
- thoughtworks automatic gui tester that also comes bundled with the continours integration tool Cruise (a commercial continuation of CruiseControl) and collaboration thing Mingle. He started with laying the theoretical foundation for this kind of testing. This includes the case against manual testing due to its inability to repeat the same test twice and that test is an issue for the entire team - not only for the testers. All this seems so nice and good but is seldom implemented for real. He then went on and demonstrated Twist and I must say that I was truly impressed. Too bad it ain't free - I want to implement it right away in my current project. At $3000 a year for 5 users it is still not expensive but harder to just slip into an organization where the procurement process is sacred. I will certainly recommend it to any future customer. Twist runs on top of selenium (and other test automation frameworks as well I think) and enables test cases that actually are readable by normal users. Built in the eclipse framework it features refactoring of test cases among other things. The generated code is easily accessible so that code generated by the recorder can be made tidy.
All in all - a nice couple of hours listening to people that knows software development.