Agile athletes

August 28th, 2007

I just came across this post from Michael Hugos. He compares the adoption of agile practices to the training of athletes. I quote:

“Agility makes you sore at first too. But it gets a lot better if you resolve to stick with it; after a while you don’t get sore at all - quite the opposite”

Further down he then makes the point that agile is not easy and that it comes with a lot of constraints:

“People want to be agile but they don’t like the tight constraints that come with being agile. They offer all sorts of reasons and excuses; they want more time to create quality software; they want more time to do system testing; or they want more time to investigate system requirements.”

Every serious athlete will work out in the most efficient way. I have never heard anyone saying that he/she wouldn’t train in a clearly more productive way just because “that’s not how things are done around here” or they “always worked out this way”. These people tend to move on an amateur level or are literally left behind - and that is also true in the business world.

Yes, when starting out you might feel sore or bruises - but if you never get out of your comfort zone then you will never improve!

Myths I - Change is expensive

August 20th, 2007

One of the common myths I keep hearing is about the cost of change. It is an interesting topic because there is no doubt about that there is a cost of change. The more important question however is just how much cost are we talking about? Does it justify the attempts to mitigate this cost by spending on more detailed up-front analysis and design? Is it even possible to mitigate this cost?

Let’s look into these questions one by one. Keep in mind that the obvious answer to all these question could be “It depends”! I am however sick of that - I want answers (even if they are only rule-of-thumb answers):

Just how much cost are we talking about?

The costs are most likely to be directly proportional to the level of skills involved. So if an organization is looking for the cheapest development partner there is a good change that the cost of change will be high. However if an organization chooses to engage a professional development partner the costs will be reasonably low. A professional partner will use best practices like Refactoring, Unit Testing and Continuous Integration from the get-go to ensure the quality and maintainability of the code. They will use standard architecture blocks (Software Factories, IoC/AOP containers, UI abstraction patterns like MVC/MVP, Logging frameworks etc) designed for flexibility and maintainability (unless your #1 priority is performance in which case they might choose not to use blocks). A professional partner will have an efficient change control process in place to minimize bureaucracy and documentation.If they don’t then you are overpaying them (regardless of brand recognition) - full stop!

Does it justify the additional investment in analysis/design?

To answer this question we must understand the cause and likelihood of change:

Legislation: Government agencies and regulated businesses are the most likely ones impacted by legislation changes. However it typically only happens a few times per year and is discussed in advance. This type of change is usually mandatory.

Market: Movement in the market place can force change - for example a competitor can introduce a new product/feature/service. Quite often Time to Market and First to Market are strong drivers on a project so even rumors about competitors working on similar products/features/services can cause change.

User Experience: Once your consumers (also called “users”) are able to use the development output there is a good chance for the well-known change requests. The reason for that is so obvious that it’s hard to understand why we sometimes think there won’t be change in a project: The fundamental justification for any project is that it changes the status-quo. So even if it is about the re-development of existing functionality it will include new or modfied workflows/UIs/features. Only with the end product the abstract analysis deliverables (use cases, wireframes, stories etc) come to life and can be validated. On any project of reasonable size changes are inevitable.

Is it possible to mitigate this cost?

So where does that leave us? In my opinion additional efforts in analysis can mostly mitigate legislative changes in a short project (< 3-4 months) and reduce user experience changes somewhat. I can’t see how you can ever mitigate market inflicted change. And I would strongly suggest that early and frequent exposure of your product to its consumers is less expensive and more effective in managing user-experience-invoked change.

Conclusion

There is a cost to change - no doubt about that. The most sensible thing to do however seems to be to accept that fact and plan for it - rather than trying to over-analyze in a desperate attempt to avoid the inevitable. Choose your investment wisely and spend just enough time and money to have a fair understanding of what you want to achieve (and why)! Keep requirements at a business level (i.e relevance of a particular requirement to a particular business benefit) rather than implementation details (“user clicks button xyz and that opens window abc”) to avoid high document maintenance costs!

Are we thought leaders?

August 17th, 2007

After yet another unimpressive Agile-vs-Waterfall debate I can’t help but think to myself that we frequently end up in this dead end street. We keep bringing up the same arguments over and over again - citing our experience with processes and techniques like Scrum, Refactoring, Continuous Integration and Unit Testing. Makes me start thinking about our claim at thought leadership.

So I did the fashionable first step - and looked up the definition of thought leadership at Wikipedia! There are a bunch of definitions but I liked this one the most (at least the most applicable):

“A distinguishing characteristic of a thought leader is the recognition from the outside world that the company deeply understands its business, the needs of its customers, and the broader marketplace in which it operates.”

Sounds reasonable. However just above I find the following paragraph:

“At professional services firms, such as consultancies and accounting firms, thought leadership has gone from the quest to discover new innovative ideas to engage in a discussion with clients, to the repackaging and publishing of old ideas. As a result, the term has been diluted.”

Can anybody else hear the alarm bells ringing? Are we not just repackaging old ideas? Let’s have a look shall we?A quick research provides the following timeline:

1986 Scrum I: Takeuchi and Nonaka first describe (and even mention “Scrum”) in their publication “The New Product Development Game” (Harvard Business Review, Jan-Feb 1986).Also, a high-spec IBM PC featured an Intel 80286 processor running at 8MHz, 640KB RAM and a gigantic 20MB hard drive.
1988 Barry Boehm introduced the Spiral model in which he described an iterative and incremental approach to software development. This model was not the first model to discuss iterative development, but it was the first model to explain why the iteration matters.
1995 The first version of DSDM was completed in January 1995 and was published in February 1995. The current version in use as of April 2006 is Version 4.2: Framework for Business Centered Development released in May 2003.In related news Windows 95 and the very first version of Internet Explorer were released.
1996 Ken Schwaber talked about Scrum (as we know it) in public for the first time. Kent Beck joined the famous C3 project at Chrysler.
1999 Based on his experience at Chrysler Beck published the book “Extreme Programming Explained” - XP was born.Intel released the Pentium III chipset.
2001 The Agile Manifesto was signed and Apple unleashed the iPod mania on us.

So not so new ideas after all. But what should we talk about instead? Well, agile is a state of mind. So instead of talking about processes and development basics maybe we should emphasize people and teams more.

  • Talk about how we achieve self-organized teams (rather than that we want to have them).
  • Talk about how more traditional roles (Business Analysts, Testers, Developers, Project Managers) change but still exist - “Same role - different responsibilities”.
  • Talk about some of the myths of software development and how they are no longer true - Cost of Change, databases, prototypes just to name a few. I will expand on them in another post …

We are doing a great job talking about Agile Project Management - and I think we really are thought leaders in this space. I believe we need to step up to the same level in the area of Agile Software Development!

The agile mindset

August 12th, 2007

Lots of things have been said about agile software development. What startles me is that even almost a decade after its “official” introduction people still talk about the “processes” and “techniques” being agile development. Unit-testing, Refactoring and Continuous Integration amongst others are cited when asked what makes the development agile.

Hang on a minute … shouldn’t these techniques be considered software development best practices regardless of your development model? I have seen more than enough developers applying them in waterfall projects - and so they should! Improving code quality has nothing to do with being agile - it’s due diligence at the bare minimum! True, properly applied these practices make code changes less painful but who are we kidding - even if you change-control the hell out of your client changes still will happen and the logical choice is to minimize potential impact and cost of change. Again, nothing agile about that!

What makes your project truly “agile” is the mindset of people involved. Too many forget about the agile manifesto and the core principles outlined in it. We value people over processes!!! And every agile evangelist will tell you that no matter what you do you’re screwed if you don’t have good people.

No Design up-front

August 11th, 2007

Being an agile evangelist I keep pushing the “no design up-front” message constantly in my daily working life. Before you totally freak out on me let me just explain what I mean with “no design up-front”:

I am referring to the lack of effort put into “traditional” architecture exercises like component and class diagrams, collaboration or sequence diagrams etc - and particularly ER diagrams. Yes that’s right - no database design!

Having said that there are of course some fundamental decisions to be made before you start out: platform, frameworks, data access strategy etc. Do you have to put some thought into it to make these decisions? Absolutely! But with experience you will already know your options and be able to map them to the high-level architectural requirements.

To avoid a theoretical discussion let’s look at a real-life web application. When smartbeanz started out we did not have a full set of requirements - we just had a vision and a core road map. We also knew that the solution has to be modular as there will be continuous enhancements and additional features coming up. They had to be testable in isolation and of course we expected the database schema to change frequently.

With that in mind we made the following fundamental decisions:

  • We use .NET 2.0 as a platform - it’s our area of expertise so there was never really a question
  • We use the Web Client Software Factory (WCSF) as the application framework - we favored WCSF over frameworks like MonoRail because of our familiarity with other versions of the Composite UI Application Block (CAB) like Mobile Client Software Factory and Smart Client Software Factory
  • We use NHibernate 1.2 as our database access strategy - ORM allows us to focus on domain objects with the ORM tool managing the database and schema

That’s it. Based on past experiences the main components were identified quickly and we could start addressing the actual business features.