The Dangers of Extreme Programming

There many articles and posts claim that XP does not work and is all about crap and hacking. It is funny in fact that many arguments are just wrong. Recently I found The Danger of Extremism article. It is very, very bad. On my opinion the author don’t understand XP, don’t understand agile software development and did one or two failed XP projects for sure.

Cite: XP is synergistic because the practices all support each other. But the reverse is also true: if one practice fails, the other ones are quick to follow. I’ve seen it happen, particularly with test-driven development. If someone stops writing the tests before the code, it becomes very difficult to refactor the code. So code ends up being hacked.

Yes, XP is synergistic, but if one practice fails the other may survive and play they role. The example is just bad, if you do TDD, you write tests and refactor code. If you stop doing any of these 2 practices, you stop doing TDD. This is the same as you say “programming consists of thinking and typing code”. What happen if you stop thinking? You’ll write a crap. What happen if you stop typing? You’ll not create anything. Unit Tests + Refactoring is one practice in fact – TDD. What about the other practices? Let’s check

– Pair programming. Ok, it is definitely possible to write code alone with good results.
– Iterative development. On of the key of XP and just a common sense. Could not be skipped on my opinion.
– Small releases. It depends. For large project releases could be made once each 3 months. It’s ok.
– System Metaphor. Does anybody know a good one? I never used it. Skip.
– Simple Design. A common sense as well.
– Collective Code Ownership. Good, but may be skipped.
– Continuous integration. Good, but may be skipped.
– 40 Hour Work Week. Common sense. Proved in many sources.
– On Site Customer. Very nice to have, but workaround could be applied.
– Coding Standards. Common sense and should be in each development process.

So, what is the must-have set of XP-specific practices?
– TDD
– Iterative development

By doing just these two you will imrove your old waterfall process and will produce better software for sure. Is XP synergistic? Yes. Is it work and help with just several practices? Yes. This is not a monolithic synergy, but very flexible in fact. Learn how it should be adapted for your specific situation and it shows its strength. All criticism is all about fear and adaptability. People read the book, try to install almost all practice at once, fail and claim that XP does not work for them.

Agile Development Reduces Testing Time

Nice article about testing effort estimation. Nothing new in fact, but very good summary that helps bind all details together. One of the important thing in it is that testing time could be reduced by several practices:

  • Code review
  • Acceptance testing
  • Unit testing
  • Integration testing
  • Early fixes
  • Nightly builds (continuous integration)

So agile development reduces testing time.

Ajax – New Way to Web Applications?

New way of web applications development has been introduced during the last year. It is called AJAX (Asynchronous JavaScript and XML). The core of AJAX is JavaScript and XMLHttpRequest and the main purpose is that browser may exchange information with server without page reloads. It looks like rich-client application and looks really cool.

The idea is great, but I see some difficulties:
– JavaScript is a core element of AJAX and it will be complex for sure. It is hard to debug and maintain, so development will take more time
– There are no tools on the market and development will take more time
– Presentation will be mixed with markup. Sometimes this is not a big deal, but potential problems are there and maintenance may take more time
– The Ajax technology by itself is new, team will have to invent new ways designing application and this bleeding edge activity will definitely take more time.

So I don’t think many companies will adopt Ajax during the next few years. Time to market is critical and choosing Ajax putting any project under the serious risk. However, when the approach matures and some development tools appear – the technology has a chance to become a mainstream. We will se.

Very good link re: Ajax – examples, frameworks and articles

Inversion of Control in C# World

Inversion of Control becoming very popular pattern and in Java community there are may frameworks that provide IoC implementations. In .NET world situation is worse. In fact, there are almost no production-ready frameworks and most of them in Beta. Ok, let’s check what we have.

Spring.NET is a clone of popular Java based Spring framework. Spring.NET provides various implementations of IoC, but nothing more for now. However, development is going on and in v.0.7 support of AOP and MVC extensions for ASP.NET announced (In fact, developers claim that AOP is already there, but just don’t documented).

Castle is another implementation of IoC in C#. There is very good intoductory article that covers the main ideas of IoC as well (I think the article is really great and much more simpe to get that famous M.Fowlers article). Castle framework provides some more interesting stuff:

  • ActiveRecord pattern implementation integrated with NHibernate.
  • Set of facilities that integrates container with many third-party frameworks (Aspect#, iBatisNet, NHibernate and some other)

Both frameworks are promising and under active development. Documentation is not comprehensive and I don’t think you may completely safely use them for production development heavily, but you may start with IoC in your C# projects slowly (let’s say, in one of the new modules).

Using Blog for Project Management

During the last time a have constantly feeling that awareness about projects state is poor. Top management often doesn’t know project status and weekly reports don’t help. Yes, maybe project manager articulates some problems, but when discussion turns into details, there is a lack of information. This problem especially important for remote teams.

One of the solution is blog. Project manager or team lead may post all interesting events in project flow on a daily basis. Solved problems with brief solution description, new problems, feelings about progress and possible risks, personal thoughts about overall project status and so on.

Blog is informal, and I like it. This is a project diary with comments that holds all project’s history. During a “lessons learned” phase blog will help a lot.

Such blog definitely should have RSS feed and comments as a minimum. Sometimes RSS feed is even more usable than email notifications (depends on personality). The other useful feature might be an integration with project management system to insert direct links on user stories, bugs or documents.

As you maybe know, I am a lead of TargetProcess project – project management tool for agile teams. And the next release (v.1.3) will include TargetProcess:Blogger. Blogs are close to agile development.

The Commentator – Powerful automatic code documentation

One of the greatest 1st April’s jokes I’ve ever seen. “The Commentator uses revolutionary real-time language processing to actually grok your code and add the necessary comments on the fly.”

One of the example that Commentator may do 🙂

//okey dokey, lets sum the elements of a
  int sum = 0; // the sum of all fears
  for (int i= 0; i < a.length; i++) {
      sum += a[i]; // all your a[i] are belong to us
  }