blog

Adapting agile software methodologies

May 7th, 2010

I’m a big believer in incremental development using agile methodologies.  The results are a better product with fewer surprises.  But lately I’ve seen some cases where folks have become zealots for specific agile methodologies, like scrum.  But in my experience, that simply doesn’t work.  Every methodology has its strengths and weaknesses, so there are going to be cases where some adaptations are going to have to be made.

Let’s take scrum as an example.  In a complex environment where there are several development teams, it can be really difficult to manage dependencies between the teams, especially if some teams are using agile methods and others aren’t.  If one team should miss a dependency milestone, there could be serious consequences for the other teams.  But scrum really has no formal mechanism to deal with dependencies.  A purist might say that the scrum of scrums is the way it should be done, but when only some of the teams are using scrum, that really doesn’t work.

So my advice is to keep the big-picture goals in mind about what the goals are for using agile development, but to adapt as needed.  As long as you don’t go overboard and stifle the agile method with too much process, the agile benefits will still pay off.

Posted in Software Development | No Comments »

Using High-Performancel Infrastructure for Private Cloud Computing

April 22nd, 2010

Can traditional IT infrastructure (high-performance firewalls, load balancers, and switches) be married to a server cloud?  Based on my experience, the answer is “yes” but it ain’t easy.

You might ask why someone would want to do that when there are cheap public alternatives like Amazon AWS or RackspaceCloud.  There are a couple of good reasons.  First, there can be legal or privacy reasons why a company would want to carefully control where servers and data reside.  Second, you can get more robust performance by using hardware firewalls and load balancers.

One way to implement a private cloud like this would be to use the Eucalyptus open source code, which allows you to build a private cloud that mimics Amazon EC2.  That’s not a bad approach for some types of applications.  But it doesn’t leverage those high-performance firewalls and load balancers.

So what are the requirements for creating a private cloud that can be married to IT infrastructure?  Here are the functions that need to happen:

  • If it’s a new pool of servers, set up the firewall, load balancer, and switches for the new pool.
  • Spawn or destroy virtual servers.
  • Add the IP addresses for those virtual servers to a switch.
  • Add the IP addresses to a load balancer pool and apply the proper health monitors.
  • Add the IP addresses to monitoring software (e.g. nagios, SiteScope, etc.) to get alerts if something should go wrong.
  • If you need elasticity, be able to monitor pertinent metrics such as CPU load or disk usage, and then use control system theory to increase or decrease the number of virtual servers over time.
  • This all has to be under software control, so everything that needs to happen automatically needs some sort of API to make it happen.

As far as I know, there are no commercial solutions that handle all of these things today, so that means you’d have to roll your own software to do it.  It’s certainly all quite possible to do, but it ain’t easy.

Posted in Cloud Computing | No Comments »

Definition of Cloud Computing

April 21st, 2010

There seems to be a lot of confusion about what the term “cloud computing” really means.  Someone recently told me that “what goes around, comes around” because they thought that cloud computing was the same as timesharing from the old days of minicomputers and mainframes.  Other folks think that hosting a SaaS application automatically implies cloud computing.  I’m much more in favor of defining it the same way that Amazon Web Services defines it with their cloud computing attributes…

  • Abstract Resources – Focus on your needs, not on hardware specs.
  • On-demand Provisioning – Get what you need, exactly when you need it.
  • Elastic Scale – Cloud is conceptually made of infinite capacity. Scale up and down as needed.
  • No Up-front Hardware Investment – Costs are in direct proportion to actual usage.
  • Loosely Coupled – Pick and choose the components you need. One does not require others.
  • Software Agnostic/Web Services API – Linux, Windows, Database, App Server, Security, etc.
  • Utility Consumption and Pricing – Only pay for what you use. Pay by the hour or month. No Contracts.

I recently attended a breakfast featuring a panel of venture capitalists talking about cloud computing, and they mostly agree with this definition as well.  (Although they did also say that they were looking for good ideas to fund no matter what label someone put on it.)

So going back to some of the other mis-definitions, you can see that timesharing really has nothing to do with cloud computing.  Sure, you’re sharing compute power in both cases.  But it’s missing some of the other attributes such as “on-demand provisioning” and “no up-front hardware investment” and “software agnostic/web services API.”  And SaaS applications can be hosted on traditional servers as well as using cloud computing.

Posted in Cloud Computing | No Comments »

Newer Entries »