Why shared development environments are a bad idea

Advantages:

  • You only need to administrate a single box.
  • You can buy a big server, and users can take advantage of this for sporadic compute intensive jobs like compiling.

Disadvantages:

  • It introduces a single point of failure, if the server goes offline no one can work.
  • Users don’t have the freedom to use there own software. Users can’t always select the version of a tool they need.
  • It doesn’t scale. As more users are added you need a bigger and bigger server. Eventually you need to add more servers (so why not just give each developer a desktop?).
  • When a user deletes a file the whole server needs to be taken offline (yes this happened).
  • Users developing software that needs access to a system resource (e.g. a web server running on port 80) may not be able to get exclusive access to that resource.
  • Performance analysis becomes more problematic when other software is performing IO/memory access etc.. It’s not possible to isolate this on a shared system.
  • If you have a tool which requires root, it becomes a security risk to give users access to that tool.
  • If a user is taxing the system they can slow down other users tasks (particularly in the case of IO intensive work.