Big Scary ExpressionEngine 4 Upgrade: Songwriters Hall of Fame
Songwriter's Hall of Fame is a subscription driven membership website. Songwriters from all over the place join the organization in order to have access to workshops, events and networking opportunities. Many of your most favorite singer-songwriters are members.
The website's pretty old. It's been running on ExpressionEngine for at least 10 years. As with a lot of sites like this, there's never really a big massive budget for periodic overhauls. Instead, when issues arise or serious problems pop up, you triage and try to maintain things as much as budgets permit. This story is quite common and there's nothing wrong with it. Everyone has a budget and no one ever really likes their website for long.
So the site was running on an old version of ExpressionEngine 2.x. The EE 2 branch reached end of life in early 2017. Songhall.org and other sites like it needed to upgrade in order to have access to security patches and maintenance releases. It was time to bite the bullet and get the upgrade done otherwise bigger problems were around the corner.
The site uses quite a few third party addons. They provide essential functionality, but many are not supported on versions of EE later than EE 2.x, so we had to really get into this problem and determine how bad things would be. In comes Discovery.
Whenever a client brings a pear shaped problem to Solspace, we start with a paid Discovery. In this process we do several things. First, we all say out loud, "We don't know what's going on and we don't know where all of the dead bodies are buried." This happens both on the client side and on our side. It's liberating. It helps cut the tension and anxiety quite a bit when you just come out and say, "I don't know what I don't know." Smooshy, poorly defined spaces are where we tend to excel.
So we dive into Discovery and we meet April. April is our lead on the client side. We hit it off immediately. Even though I am a Californian, I love New Yorkers. I love when people just tell it like it is right away with no sugar coating. That's April. So April gives it to us straight. There are a bunch of pain points for her in her daily, weekly and monthly business processes. The site takes up too much of her time and it's overly complex. I point out that it sounds like it has grown cruft and tentacles over the years. It needs a proper de-barnacling.
We get into Discovery and start building up a working relationship. Right away it seems clear that this will be a productive one. We can tell one another the truth and get straight to the point. When taking on complex and ill-defined problems, this tends to be key. The interpersonal relationships are the secret sauce of taming complicated and tangly systems.
Toward the end of Discovery it becomes clear to me that a progressive upgrade might be the best approach. The site has some template cruft and makes use of some add-ons that are no longer available past EE2 which need to be pared down or eliminated. So we propose a progressive upgrade. We will upgrade the live site in chunks over the course of a couple of months. With each release we will get real user feedback and verify that we have not destroyed something key. This idea puts our Songhall friends at ease and we march forward with a complete and reliable proposal for budget and timeline, the kind that only comes from a good, solid Discovery exercise.
Now, what follows is a pretty detailed look at the technical parts of the upgrade. If that bores you, you're not alone. You can stop here and know that the progressive upgrade approach worked very well. We got to a launchable EE 4 site in about 6 weeks time. That site is live now and off we go into summertime!
Our first upgrade step was to rename unused templates so that we could mark them for later deletion without completely demolishing them. This paid off in short order because, on a site as old as Songhall, some urls and site sections are still used, but largely forgotten about by the admins of the site. We removed a few templates that were actually needed for obscure sections of the site. Restoring these was quick and easy. The rest were deleted a month or so later.
With template cruft handled we then moved to converting third party functionality over to native functionality where possible. This included migrating the Matrix field type to native EE Grid, and the Playa field type to native EE Relationships. This could be done on the EE 2 version of the site once we upgraded it to EE 2.11.x. Of course we used a Docker image of the site to rehearse this part of the upgrade a few times before we got the steps right. Then we took a fresh, clean clone of the live site, Dockerized it and then performed the final migration for our Matrix and Playa fields. We then took the resulting database and template files and loaded them up to the live site. We let this version of the site sit for a week or so to shake out any issues, of which there were a couple — again, taking a nice steady progressive approach to the upgrade. Honestly this basically slow, steady, progressive approach eliminated the upgrade anxiety which was psychologically a primary barrier for the client.
Once the scariest custom fields were dealt with we moved on to converting old third party add-ons. Some were essential but were no longer available for versions of EE after EE 2.x. So we converted these on behalf of the client. After this we switched to working on the most fun part of the project, member management.
Songhall is a member subscription website. On a yearly basis members take part in an election. The voting is restricted to specific member groups. At this time of year, the Songhall team needs to be able to manage members in bulk. They need to be able to add blocks of new members all at once since some music industry companies register their employees in bulk and pay directly for all instead of entering them separately in the database. Or some members may have some sort of customer service issue where they need a staff member to just correct their records quickly. We built a new EE module for the purpose of managing members in batches. It allows Songhall staff to upload a CSV file of members and have those converted into proper ExpressionEngine member entries as well as channel entries. The resulting members can later run the forgot password routine and login as needed.
Once all of the above steps were completed, we launched the new site on ArcusTech servers. Previously the site had been hosted on an Amazon EC2 instance. This proved costly. ArcusTech provided much better performance at a much cheaper price point, all with 24/7 support included. As well, at ArcusTech's recommendation we ran the DNS records through CloudFlare. This made it possible for us to launch the new site with the simple change of an A record pointing to the server IP address. This was further reassuring to the client because if we discovered a major error, we could just flip the IP address back to the EC2 instance in seconds.
Fortunately the site launch went very smoothly. Thanks to a solid QA effort and excellent support from ArcusTech we had a nice smooth transition to ExpressionEngine 4.
Holler at us is you also have a big, fat, scary upgrade you need help with.