May 29, 2009, 12:29 pm
At work I intermittently talk about “complexity spirals”: the phenomenon where someone makes the wrong – usually over complicated – choice in software design, but for time constraints or some other reason the development group is unable to go back and make the right choice.
Sooner or later, users want a new feature. That feature is complicated to implement on top of the wrong solution. If you go ahead and implement it, you’ve now got two complicated bits of code instead of two simple ones. Soon you spiral out of control, as the complexity piles up and it becomes very time consuming to add functionality.
All this can be avoided if you recognise the original design was wrong. This article on Raymond’s Windows blog interested me today, as its a well known example of where the “wrong” decision (.lnk files instead of symbolic links as first-class members of the file system) are so incongruous with the rest of the operating system that implementing what seems like a simple behaviour that users will want, is essentially impossible.
May 29, 2009, 8:38 am
Back in 2005 I bought a large tower case and stuffed it full of hard drives to use as my home storage solution. I’ve been running Ubuntu 6.06 on it since it was released, but figure its time to upgrade to 8.04 so I can use some of the newer packages that have come out in the last few years.
Ubuntu have a page describing the procedure:
- Enable the “dapper-updates” repository.
- Install the new “update-manager-core” package – dependencies include python-apt, python-gnupginterface and python2.4-apt.
- Run “sudo do-release-upgrade” in a terminal window.
- Follow the steps on the terminal window.
And that’s pretty much it. The only real flaw in the system is that any software configuration files that you have changed and Ubuntu have also changed, result in a prompt being shown asking how to resolve the conflict. This works pretty well with two minor flaws:
- Compared to dealing with merges in say Subversion, its very basic since there’s no actual merge functionality at all. You are shown the differences between the two files, but aren’t offered the chance to accept all non-conflicting changes.
- The upgrader does packages in a semi-random order which can take an hour or more; since the installer prompts you to resolve configuration conflicts during the installation of each package this happens at basically random points through the process. It would be more user friendly if it could group all packages with configuration conflicts together in time.
Fortunately though the upgrade has gone without a hitch and I can now have some fun trying out iSCSI.