Building anything on the web more than a static HTML page, introduces a lot of technical challenges from the novice to the expert software developer. There are many reasons for that, but there is one particular field that most people get very much frustrated – Deployment.
Most software developers are unaware of architectural and operational issues that a real life production system usually has. Developers can be really good at using AJAX, jQuery, MVC or whatever you name it, but if they to deploy the solution for themselves, they will most probably fail to do that in a reasonable time.
Why is that? Is it that Deployment process is much more complicated than writing software? Or is it because Deployment should be done only by IT Operations team, not the Developers? I would say – definitely it is not! Try to give the developer the most hardest algorithm to implement or cutting edge technology to use and he will do that. And try to give the IT Op team a WCF or ASP.NET configuration file to configure for production – they will most probably fail. My point here is that deploying for real production applications requires different skill set – the one of Software Engineer.
Software Engineers are the guys that know how software applications work, they can write and debug code, most often even in production installation. They are not afraid of digging into server performance or misconfiguration problems. On the other side they know what network load balancing, web farm installation, DNS server, and static route configuration are.
The major reason Deployment is so complicated is… dependencies… and configuration of dependencies. When developer work in their company environment many of the things he is using are already preconfigured for him. He doesn’t have to think about configuring Active Directory, Mail server, Database server, user access rights or even IIS. Most of these things have been pre-configured for him by the his technical lead and he is not aware of how to do that himself.
In my next post we are going to explore one of the deployment dependencies – the file system.