The Decline and Fall of Agile

A good writeup by James Shore on The Decline and Fall of Agile (James Shore blog).

Software development projects are a hard thing; not necessarily because of the software, but because people are involved.

I’ve worked on the most mature (and rigid) software development process in the world, the Space Shuttle on-board software (SEI 5), and on places where no process existed (startups). And I can safely say that because not all teams and projects are created equal, not all process should be equal. I’m not religious about any specific type of process. The best process is the one that is/can be followed. The best process is the one that works for your team/people. Processes can’t be forced-fed onto developers, Agile or not. Changing or implementing development processes can kill a project, especially if it impacts the existing “culture”. It is smart to consider a phased approach to this, for example, start by exploring/adapting some of the new concepts to current projects, vs. totally diving into it and potentially putting the project in jeopardy. Know to be flexible when implementing projects and when to stop pushing for (defer) something; developers (and anyone) can easily get distracted with process-things vs. delivering a product. Time is of essence, go-to-market your first priority. Processes are overhead.

Regardless of the process used, it is about minimizing the unknowns, and this is accomplished via proper planning (as needed for the phase of the project) and visibility, and execution and control, from charter to go-to-market.

Processes are at times, OK, most of the times, rejected by developers, mainly if forced, and especially if forced at the wrong time; note: developers are not stupid and what they want is to be given clear and achievable instructions (requirements) and to build and deliver it on a reasonable time-frame. Realize that process-wise sometimes most of the times “good enough” is OK, as long as things are delivered on time and with good quality. Be flexible and use what works for you; processes like Scrum or other are really guidelines.

I like to have initial efforts at front. I like to have initial planning that allows for “good enough estimates” on time-frames and budgets early on, and then I like to go iterative with cycles or sprints that allows for quick visibility and adjustments as needed, adapting in length based on where we are in the project, and team’s needs. Same on the design, I like to have an initial take at the architecture and design that will help with planning and projections and that provides a foundation for what is to come. Then we go iterative, incremental on lower design and implementation cycles that can be revisited, adapted, delivered, better understood.

The role of the product manager who owns/defines the product, manages priorities and the expectations and communication, who keeps the work plan up to date and manages scope, change, and risk at all times (control and execution) and who works well with the development team is key to the success of any software project. Then there is the development team, who are the stars who actually make things happen. Everyone must be accountable for deliverables and quality. And it does help to have smart, passionate and capable team and developers with code good coding practices and who understand what (good) software engineering, design and development is all about, and a management team who understands that writing software is a dynamic endeavor.

ceo

Java is the top programming language

According to the Tiobe Programming Community Index, Java is the top/dominant programming language (Aug 2008):


Tiobe Programming Community Index, August 2008 (Credit: Tiobe)

The same reports indicates that COBOL scores a new all time low (at position 19), yet it still is above Objective-C (at position 42)!

Top 10 programming languages:

1.    Java
2.    C
3.    (Visual) Basic
4.    C++
5.    PHP
6.    Python
7.    Perl
8.    C#
9.    Ruby
10.    JavaScript
:
19.    COBOL
:
23.    Fortran
:
37.    Smalltalk
:
42.    Objective-C
:
50.    Caml

ceo

[Via c/net Java still top programming language)

Twitter as a Case Study

Twitter logo

So Twitter is down, again.

Twitter, a great idea, but terribly designed and implemented…

Twitter is a great case study:

  • for what a badly designed piece of software is all about,
  • for what not do, or what to avoid, or how NOT to architect and deploy software (i.e. by avoiding everything they have done so far),
  • for how to NOT design and deploy your SaaS system.

But not everything is negative here; there are a lot of lessons learned, I am sure… I wouldn’t mind taking a look at what they have done, again, as a case study…

And maybe the folks at Twitter should write a book (or set of articles) on the things to avoid / not to do, when designing networked, high-availability web-based, messaging SaaS-based systems…

Update (June 8): Bad design, but perhaps, bad capacity planning….

ceo

Refactoring automation is like a spreadsheet



Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure.” — MartinFowler in RefactoringImprovingTheDesignOfExistingCode.

Refactoring automation is to S/W developers what spreadsheets are to financial planners…

In the past, when doing financial planning, you will do it on paper, and changing a variable/factor meant either re-writing or starting all again; and that took weeks. In the past, when doing code development, improving the code such as changing the name or signature of a function meant re-writing a lot, and that can take weeks (of coding and re-testing).

Spreadsheets removed the above pain and improved a whole industry; by just changing the value of a cell, the whole financial plan is automatically/instantly recalculated. Same with improving code quality; thanks to refactoring automation, just apply the refactoring technique using your favorite IDE, and all is instantly recalculated.

Refactoring automation, together with real-time errors highlighting (live parsing) probably are the two most important tools for code writers…

ceo

Better development tools for growing projects

Atlassian

As our project needs grow, it was clear that it was time for eZee to invest some dough into better, integrated tools for issue tracking, change management, and knowledge sharing. For this we acquired Atlassian’s Jira, FishEye (w/ Subversion which we already were using), and Confluence (Enterprise Wiki), respectively. While not free tools, it’s worth the investment, and having the integrated environment/tools really kicks ass, and makes my life much easier, with better project visibility for everyone…

ceo

Bray on “Why is Ruby on Rails so darn slow?”

Tim Bray said at his Ruby Conference keynote speech last week:

Rails is “a big deal, a hot deal”,

:
:

“Let’s face the facts: Ruby is too slow,” Bray told delegates. He says Ruby 1.8.6 – which dominates the enterprise landscape – is up to 20 times slower than Java.

:
:

“When you start to run Rails, you get wildly non-linear performance. Rails has worked well on Ruby 1.8.6… everything else is a work in progress. It’s weird and it’s hard to understand,” Bray said.

…at the end, it is about time to market vs. performance.

Read the rest at Why is Ruby on Rails so darn slow? (Reg Developer).

ceo

Using Static Analysis For Software Defect Detection

A very good presentation Using Static Analysis For Software Defect Detection; William Pugh, Google TechTalks, July 6, 2006:

William Pugh — I’ll talk about some of my experience in using and expanding static analysis tools for defect detection. The FindBugs tool developed at the Univ. of Maryland is now being widely used, including inside Google. I’ll give an overview of FindBugs, show some of the kinds of errors we routinely find in production code, discuss the methodology we use for enhancing and expanding FindBugs and some of the recent additions to it, discuss ways of incorporating FindBugs into your development process (such as being able to get a report of all the warnings introduced since the last release of your software), and talk about the future of static analysis, including things such as a new Java JSR to provide standard annotations for things such as @NonNull and @Tainted.«

ceo