Wednesday, June 8, 2005

Work Environments - and the web developer's problems

Originally posted on: http://geekswithblogs.net/meshel/archive/2005/06/08/42564.aspx

We all work in an environment, and I don't mean the office environment, but what we call the development environment. Meaning the work methods and project structure in which we develop our software.

I'm not very happy with my current work environment. And I would like to improve it, but I have two issues.

1. I have no idea how to make this one better
2. I don't work by myself, there are other people who use this environment and have to convert to it, and also some major release/build actions are dependant on this environment - and we can't just go ahead and change it. It would break other things.

Developers who develop stand-alone applications, have in my opinion, less trouble. basically they have one application to deal with and maybe integration with the OS. They might have to integrate with some server (this is not a standalone utility anymore - but still, the developer does not deal with the server on a DEV level but as a user).

We in the Web development area have a little more trouble. First this is a do it all team - we do not specialize in any specific area, we are expected to be many things at once - which can be a lot of fun, but can cause problems - since we are not experts in any of the areas. The problem is there is no single platform - we develop in paralel for IIS (Web Site) SQL Server (DataStore), Windows (Services, Filesystem and Utilities), Install (for all these componenets) - and all these interact with each other in a way that it is almost impossible to develop and test without the entire system set up. This is not even mentioning (but I am now), other systems in to which we integrate - our internal servers and clients which is a little easier since we have someone to ask and complain to... :-)

This poses several setup questions

1. Do we work on a shared/private environment (is all development done a single server or on the developer computer) - when more than one developer is concerned this question becomes more critical. (we work in private mode)
2. Web applications usualy support multiple/remote servers (Web server and SQL on same or seperate machines, multiple SQL (cluster), multiple web servers etc...) how do you build the corret environment for developing and testing. (unless specificaly tested we work in single machine mode - or seperate web from SQL)
3. Multiple Browser development - this is becoming less of a problem, but is still a serious one. (we mostly check for IE)
4. How do you synchronize your private (assuming each is working on his own) environment with the code base - since code is not just DLLs and files, but also database state and scripts which need to be applied to each DB in use. (we have a custom tool written for this - which is not as good as we want).
5. Moving between versions - when we fix bugs in older versions, how do you revert from and to a different version of the product (not to forget this requires a different database state beside the files).
6. Debugging - this is a real nightmare. These different work envs (DB, IIS, etc...) are not integrated, no single editor supports the full chain of events (this supposedly becomes better with the new VS - but I doubt that all problems are solved). We currently have to debug each component by it's own, with a lot of printing to file and generaly a lot of heart-ache.
7. Patches to production systems - there are a lot of scripts/files to apply on patches, currently we use a home built tool to apply patches (not to forget: patches need to support all environments) to existing installations. This is another overhead we have when developing a patch. The same problems apply to installations and major upgrades.

These are just some of the problems, and I'm contantly looking for solutions to them. maybe some day. One thing I realize by now, is that a lot depends on the original designer of the system. The build system, the directory structure - for example: in our system, due to some design decision, in order to have a full development environment we have to install the application (server application) on the machine, it is not enough to just download the lates code and start - since some actions and configurations are only done by the install program. This is a major problem when attempting to start a new developer or an old developer on a new computer - it can take hours or up to a couple of days. 

Tell me about your environments or if you have tool, process, or  ideas and suggestions I'll be more than glad to hear.


No comments: