A very simple representation of the procedure programmers follow when developing systems looks like this:

  1. The client (sometimes the programmer themselves) comes to the programmer with a problem which needs to be solved.
  2. The programmer comes up with a solution to the problem, this can range anywhere from simply saying “I can solve this!” to a fully designed project plan with pretty graphs, diagrams, and pseudo-code.
  3. The programmer spends a healthy amount of time writing code and building their solution
  4. The code is compiled.
  5. The code is tested.
  6. The compiled code is provided to the client who uses it to solve their problem.

It’s different for every project, and usually involves lots of loops and other such interactions, but I think we can agree the basic flow is: find problem, write solution, compile solution, test solution, and hand over solution.

Step #4, the compilation process, is different for every language and project. For scripting languages, such as PHP, this step is performed when the code is run, so there is no waiting around for code to compile. However, other languages, such as C++, need to be compiled into an executable before they can be run. For a large system, this can take hours/days to complete.

Step #5, the testing phase, is another fun process which can take some time. For example, running the test suite on one of my PHP projects takes 6 hours. Most tests can be automated, so after any code changes it’s usually a piece of cake to check that the system still functions as expected.

In summary, my personal experience with programming involves a compilation process which isn’t noticeable and a short testing phase which produces results before the final product is used.

This is not the case with my latest project!

I recently embarked on a new project a couple of months ago, which doesn’t meet any of the above conventions.It appears to be following this sort of plan:

  1. The clients decided it was time to start the project.
  2. The required steps were completed to start the project, and the system started compiling.
  3. The typical compilation window is 9 months!
  4. The system is then given to the clients who spend 18+ years working with it.
  5. Automated testing is impossible, with results shown at completely random times throughout the life cycle of the system.

Oh… and there’s no undo button!