Monday, February 21, 2005

Welcome

I've dedicated this small corner of the web to spew forth my random thoughts on my chosen profession: Software Development.

First a little background:
I own a small consulting company, Agillence Software Inc, that specializes in helping companies utilize Agile Software development techniques and philosophies. I started in the field in this field right out of college with a degree in Computer Science. My studies were very much bits and bytes, which laid a nice foundation for a career in software development. Some years out of college I decided to round out my education and got an MBA. I will talk more about each of these experiences some other day, but for now I will stick with the introduction.

My consulting focuses on helping organizations embrace Agile Software development. Its an uphill battle, since companies seem to be wired to work against any progress. From budget battles, to timeliness, to corporate momentum, there are many factors that make this extremely difficult.

OK, now that you know a little reason why I'm spending time doing this, I'll answer a question some of you may have: What is agile software development? Well, to start go here http://agilemanifesto.org/

It outlines what the general philosophy of agile is, but I like think of it on even more abstract terms:

In its barest sense, Agile Development manages uncertainty. Software development projects are ripe with uncertainty. It is not like building a bridge. The laws of physics won't change at the end of quarter 2 where an alternate universe just released a new set of physical laws that give them a huge competitive advantage.

The change and uncertainty can be managed in a variety of ways, the simplest being to pretend the uncertainties do not exist. You can spend a lot of time planning the work, making very precise (but wildly inaccurate) estimates as to the level of effort needed. Once the plan is agreed to, make every effort to prevent change to the plan. Unfortunately, the uncertainty really isn't managed, it is ignored.

Agile development focuses efforts on the most certain component at any given time. Let the customers drive what they feel is the most valuable component of the project. Put off decisions that do not have to be made now, and make them when we have more information about the problem. When the decision is made with better information, it increases the value of the decision. That does not mean, in retrospect, that every decision will be the best, but taken as a whole, the system will run better.

"Managing uncertainty" That doesn't sound like the typical explanation of Agile Software Development. That doesn't sound like Software at all. In sounds like something more suited to the insurance or financial industry. Well, truth be told, when I went back to school for the MBA, I studied finance. But, like a moth to a light, I was drawn back to Software Development. Despite being drawn back into Software, Finance and economics are very interesting subjects that apply to a variety of fields because under all the math and theory, they are social sciences.

Which leads me to my first 'law' of software development:
Gillespie Fundamental Law #1 - "Its not the technology, silly."
Under all the bits and bytes, software development is a social activity. Ironically, an industry with the reputation of employing some of the most socially limited individuals (present company included), the primary success factor of any project is the ability to work together. Nearly all major problems I've seen an any given project can be traced back to people. Sure, a server may meltdown, or perfomance may be poor, but most of those problems are relatively easy to fix. The harder problems to fix are when are company cannot even get to the point of installing working software on a server. In the current business environment, if a company cannot utilize a software infrastructure, it will fail.
Corollary 1a - People are not interchangable parts. The output of a developer can vary my more than 10x between people of similar experience. If you get quality people on a project, the chances of success go up exponentially.
Corollary 1b - You cannot use process as a substitute for talent.

Gillespie Fundamental Law #2 - "There is always uncertainty."
You cannot plan away uncertainty. You can hedge against most of the types of uncertainty on software projects. The best you can do is accept it and manage your project accordingly.

Gillespie Fundamental Law #3 - "Everything comes at a cost."
Every activity comes at the cost of doing something else.
Corollary 3a - The value of every activity must be justifiable. Every action must generate value for the company. Creating volumes of documentation no one will ever read creates no value.

That's enough for now. There are more laws, but I will let you chew on those for a while.

-Mike

0 Comments:

Post a Comment

<< Home