Wednesday, October 04, 2006

Bridging the gap - Enterprise application deployment from development environment to production environment

After application is declared "Development Compete", it is introduced in enterprise environments. Typically applications are deployed in one or more controlled pre-production environments before it's production deployment. Post development phases of the project have it's own set of challenges due to huge gap between development and production environments.

Enterprise or production environment differs from development environment in following key areas.

- Applications are deployed in clustered environment.
- Application deployed in zoned architecture with additional infrastructure - web servers, proxy servers, firewalls, load balancer, DNS etc.
- Controlled, repeatable and manageable deployment processes are needed.
- Application integrates with other live applications and legacy systems.
- Secured deployment is top most priority - Restricted access to application admin tools, encrypted credentials.
- Application is exposed to larger set of the production data in comparison of the development/test data.
- Out of box performance parameters need to be tuned as per application's performance requirements.

It is very common that due to delayed development activities, activities needed to bridge above gap takes back seats. It results in crippled production deployment with following characteristics.

o Unexpected production outages.
o Under utilized infrastructure capacity.
o Poorly performing applications
o Inefficient operations and repetitive human errors.
o Holes in application and environment's security.

Frequent SLA violations due to poorly performing deployments sparks endless blame games between and application and infrastructure teams which results in strained relationships. Successful execution in following key area can help to create robust deployments and can take enterprise application's performance to the next level.

Architecture review -- Understanding of the system architecture can help application architect to leverage infrastructure features in application architecture. For infrastructure team it is opportunity to learn application specific operational/deployment requirements.

Capacity planning -- Methodical capacity planning can prevent over investment in infrastructure or shortage of server(CPU, Memory) resources. Capacity planning becomes more important when application is deployed in shared enterprise environment.

Performance tuning -- It is very important that application goes through iterative performance tuning process. BEA documents that if server is not tuned , It will cause 33% decrease in performance. Performance tuning/testing can detect inherent application bottlenecks and improve CPU/memory utilization. Performance tuning can also prevent unexpected production outages.

Automated deployment process--- Application deployment process needs to be a repeatable , fault proof and should cause minimum disruption in service. It is always a good idea minimize manual steps.

Change management process --- A good process should freeze application code/configuration well ahead of production deployment date. Any change in configuration or production environment should happen through strict change management process after careful review of the each change. If you see development staff working in pre production environment a week before go live date, it is a sign that process is broken.

Proactive monitoring --- Proactive monitoring and notification will allow to take preventive actions and will give visibility in application's behavior in production environment.

Expert Root Cause Analysis -- Repetitive failures can be prevented with live production applications with accurate troubleshooting.

It needs detailed planning, well defined processes, tools and expert resources to take "Development Complete" application into live production environments.