(Firstly, I apologize if your feedreader is now full my old blog entries, as I've just upgraded my site and all the guids will have changed.)
I spent the weekend converting madbean.com to WordPress. Previous to that, it used to run on my own home-brew site/blog generation system.
I've always thought that CityDesk was an extremely elegant solution to a problem: how to generate a complex, but essentially static, site. But why spend a few dollars buying a tool when you can spend years of your life scripting up a pale imitation. So I created a program called Site OBjects (SOB for short). Conceptually, it worked similarly to CityDesk; except each page was stored in an xml file on the disk, and FreeMarker was used as the templating language, and it was all held together by a Java program (and later, Jython and Java).
Plus I threw in an Open Source page-commenting CGI script, just to ensure it truly deserved the name SOB.
The first version of SOB was very declarative. Anything you wanted to appear as a .html page had to have a corresponding .sob file in the filesystem. This was very annoying for things like by-year archive summaries: I had near-identical pages called 2003.sob, 2004.sob, etc.
The second version of SOB was instead very imperative. It could pick up all your "declared" .sob files, these were used to initialize the big soup of SOB objects. You could then write a script (Jython), to manipulate the soup, including adding more SOB objects. Creating by-year summary pages was then a simple for-loop.
But, at the end of the day, I couldn't be bothered maintaining it anymore. So I upgraded to WordPress.
Enter madbean 3.0. I had always dreaded the idea of trying to import all my existing data into another blog/CMS system. The converstion from SOB1 to SOB2 was hard enough. But in a way, I had already done most of the hard work already. At the end of processing, the SOB soup had all the data of my site in memory. An extra 90 lines of Jython at the end of my main SOB script generated a file full of SQL insert statements for injection into WordPress. This included the code required to import all the existing comments on the site, which were stored in tab-delimited text files.
There is definitely something to be said for storing data in an easy-to-access format (e.g. text/xml/sql/etc).
So I probably spent half a day fine-tuning the import, and another day creating a WordPress theme similar to the existing madbean.com style. The theme still needs a bit of tweaking, but it is good enough for now.
Oh, and no site upgrade would be complete without heavy use of mod_rewrite. I don't know where I'd be without it. All the permalinks for the SOB1 and SOB2 blog entries now 301 to the new WordPress permalinks, as do the RSS feed urls (and a couple of other popular pages, such as my animations).
I didn't want to spend forever evaluating different blog systems. I liked the depth of documentation with WordPress, and my decision was pretty-much sealed after working out how easy it would be to import my existing data. It also supported "free standing" pages in a way I liked, and was very flexible about the URL structure for permalinks.