2004 in review: upgrading software by applying patches by hand
I started my own company this year, which makes 2004 the formal start of everything the rest of this blog is about. It did not feel like a milestone at the time. It felt like paperwork attached to work I was already doing.
Most of my year went into an X-Cart webshop, and a surprising amount of that time disappeared into
one directory: upgrade/, holding hundreds of .diff files organised into folders named for
version pairs.
3.5.9-3.5.10. 3.5.10-3.5.11.
That is how you updated purchased PHP software in 2004. The vendor shipped you the differences, and you applied them.
The upgrade folder
Each release came as a set of patches per file. You worked through them in order, and where you had customised a file, the patch would not apply cleanly and you got to reconcile it yourself, by reading both versions and deciding what the merged result should be.
Every conflict was a customisation I had made. The system was punishing me, correctly, for editing files I did not own. That is the lesson, and it arrived years before I had the words for it: the cost of a modification is not writing it, it is carrying it through every future update.
The reason composer update feels like magic to me is that I did the manual version for a living.
Deployment was an FTP client
There is a WS_FTP.LOG in half the 2004 folders. That was the deploy pipeline: open the FTP
client, select the changed files, drag them to the right pane, watch the log.
Which means the state of the live site was whatever I remembered uploading. There was no inventory, no diff against production, no way to answer "is the server running the same code as my machine" except by checking file dates by eye. When something broke at 23:00 the first question was always whether I had uploaded everything, and the honest answer was usually "probably".
Templates everywhere
Nineteen hundred .tpl files this year, against 690 PHP files. Smarty had taken over,
and it enforced a discipline I had not chosen but came to value: the markup file cannot contain
database queries, because the template language simply does not have them.
That constraint is the same one I would meet again in every framework since, and it is why I never found "logic in templates" a tempting shortcut. I learned the separation from a tool that refused to let me break it.
In short
Started my own company. Spent the year on a licensed webshop platform, upgrading it by applying vendor patches by hand, and deploying everything over FTP.