I’ve always amazed by the first mission to the moon. Tons of simulations had to be done carefully and a lot of theoretical assumptions had to be made. In the course of the mission itself, a lot of feedback data needed to be collected for future improvement. A trip to the moon was expensive, time-consuming, and life critical, so the amount of energy and minds put in the mission was understandably tremendous.
I did have those days where a simple code editor wasn’t even available and compiling was so expensive that it was justifiable for me to write code on paper, debug it as much as I could, before even try to type it carefully, line by line, into a terminal. On my paper there were areas for code, registers, flags, and memory maps. When things didn’t go as expected, the first thing to do was actually going through the whole paper debugging again.
I thought those days were gone.
Not quite.
Recently I have been working on a project that involves security patch, feature test, and load testing. The platform on which I develop the application is different from the production platform or the test platform. Usually this won’t be a problem if the application stays purely in the application layer. Unfortunately, the security problem is OS dependent and I have no access to the test nor production server. All I can do is rely on documents and information given by system admins on those servers. The development cycle is like this:
- I write code according to the information I am given and imagine they will run well on the test server.
- I pack the code, email the code to the system admins of the test server.
- When the system admins get the code, they deploy it, run the code, and
tell me the symptoms. I can also run it remotely. However, some
symptoms don’t appear via web so I have to rely on the system admins to
email me back some error messages. - Judging form the error messages (or lack thereof), I need to guess what’s going on, and fix them. And jump back to step 1.
- Sometimes I can’t figure out what’s wrong, so I have to write extra
debug code that outputs explicit error messages. Jump to step 1. - Sometimes the debug code is not simple and there may be bugs in the debug code. So I debug the debug code them by staring at it really hard. And jump to step 5.
To be fair, the system admins are very knowledgeable, responsive, and helpful. I think they provide me the best support they can, under the restriction that I cannot have access to the testing environment.
Does the cycle have to be this time-consuming and painful? I certainly hope not. Before it can be improved, I use nostalgia to keep my spirit up.