Episode Number 116

CMS Upgrades & Migrations, Part 2

Jun 21, 2018 @ 11AM MT

No matter how many upgrades and CMS migrations you go through, there are always issues. In Part 2 of this series, we tackle the technical planning, gotchas and QA of CMS upgrades and migrations. We stress the importance of setting the right expectations with clients, not taking one-click upgrades for granted, and share our tips on how to tackle the often painful process of upgrading or migrating to a new CMS.

Tags:
upgrade
upgrading
migration
expressionengine
craft cms
statamic
maintenance
planning
budgets
qa
migrating
speed
securing sites
import
importing
export
exporting
documentation
documenting
efficiency
development

Episode Transcript

Download Transcript

CTRL+CLICK CAST is proud to provide transcripts for our audience members who prefer text-based content. However, our episodes are designed for an audio experience, which includes emotion and emphasis that don't always translate to our transcripts. Additionally, our transcripts are generated by human transcribers and may contain errors. If you require clarification, please listen to the audio.

Preview:

Lea Alcantara: Regardless of the CMS, we tend to focus on making sure all the plugins or add-ons are the latest versions before the CMS itself and then we upgrade one at a time using the CMS audit spreadsheet as a guide. Usually, like after I make that spreadsheet, I add another column where it’s just basically I check it off to make sure that that specific line item or that specific plugin has been dealt with, and if you remember from Part 1, that list includes the current versions, core software versions supporting other notes, and so we have that list ready for us. And as I mentioned, I add that column to check off if something goes well, but it also gives us a way to add notes if something goes wrong. So going down our audit list one by one, we can more easily identify if there’s specific plugin breaking things if something breaks.

[Music]

Emily Lewis: And if our listeners are like, “That seems tedious and like not efficient,” then don’t do it and eventually they’ll come bite you in the ass. [Laughs]

Lea Alcantara: [Laughs] Right, right.

Emily Lewis: The only reason we do this is eventually it got us.

Lea Alcantara: From Bright Umbrella, this is CTRL+CLICK CAST! We inspect the web for you! Today it’s Part 2 of CMS upgrades and migrations, the technical aspects of upgrading or moving away from your content management system. I’m your host, Lea Alcantara, and I’m joined by my fab co-host:

Emily Lewis: Emily Lewis!

Lea Alcantara: This episode is sponsored by Arcustech, who hosts this very show. Have Arcustech’s helpful support team manage servers for you so you can focus on designing and developing client sites instead of getting stuck with sysadmin work. As an official Craft CMS hosting partner, they have various plans optimized for Craft and you can pick between two US locations and the EU, too. Sound good? Take 15% off the first three months of your single or multi-server monthly plan with the discount code CTRLCLICK116. We’ll spell it out in the show notes. It’s valid until the next episode airs so sign up today at arcustech.com.

This episode is also brought to you by Vast Conference. With the integration of HD audio to web meeting, you can collaborate with clients using your laptop’s integrated mic and speaker. No software or hardware required. This means that no matter where you are in the world, you can connect with your clients or prospects easily without the need for dial-in numbers or per minute charges. Need to jump on a quick call with the colleague, Vast’s instant conference call feature allows you to do that as well. Build your business for anywhere knowing you always have a conferencing provider that has direct. Visit conferencecalling.com to start hosting conference calls and online meetings that are truly fast and easy for everyone. You can get a 30-day free trial by visiting conferencecalling.com/trial30 or by calling one of Vast’s sales reps and mentioning you heard of Vast Conference on CTRL+CLICK CAST.

[Music ends]

Emily Lewis: So we had planned to continue our conversation that we started a few episodes back with Timothy Bardlavens about diversity in the tech industry this morning, but we had to change direction due to a family emergency with our guest, Fabian Elliott. We’re definitely rescheduling with him. That’s still in our queue.

Lea Alcantara: So for today we’re going to continue a different conversation, tackling CMS upgrades and migrations.

Emily Lewis: [Agrees]

Lea Alcantara: In Part 1 earlier this year, we tackled the often confusing decision about whether to upgrade or migrate to a new CMS from a client perspective. But what happens after you make that decision, what are the technical considerations for an upgrade or migration?

Emily Lewis: There’s no easy button to just execute an upgrade or migration, which is why we’re doing this Part 2 because there are a lot of nuances that we’ve come across in the many, many, many years we’ve been doing CMS development.

Lea Alcantara: [Agrees]

Emily Lewis: But for the purposes of this episode, we’re going to focus first on what we call like a general upgrade next steps and technical considerations, and then we’ll tackle migrations. And when I’m saying like general upgrade, we’re sort of talking about a “typical” upgrade path.

Lea Alcantara: Yeah, yeah.

Emily Lewis: I don’t even know if there’s such a thing as typical.

Lea Alcantara: [Agrees]

Emily Lewis: But meaning like where we’re upgrading the CMS within the same brand and either within the same version or just moving by like maybe one version, not skipping multiple versions. So for example, upgrading EE 2.5 to EE 2.11 or even EE 2.5 to Version 3, but like an upgrade from EE 2 to EE 4, to us, for our clients, it’s a non-typical upgrade. Even though we’re still in brand, we’re still using ExpressionEngine, the version differences are so great that we have to do an export and import, maybe even some custom development.

Lea Alcantara: [Agrees]

Emily Lewis: And so for that we consider that a migration.

Lea Alcantara: [Agrees]

Emily Lewis: And so we’re sort of we’re lumping that scenario into the migrations discussion.

Lea Alcantara: Right, and basically, there’s going to be overlap.

Emily Lewis: [Agrees]

Lea Alcantara: But there are some nuances that’s more specific to upgrades than migration and vice versa, so let’s just get started.

Emily Lewis: Yeah.

Lea Alcantara: First things first, technical planning.

Emily Lewis: [Agrees]

Lea Alcantara: Planning for environment and content workloads.

Emily Lewis: Yeah. I think this is one of the things that we did not do so great in the beginning.

Lea Alcantara: Right.

Emily Lewis: You know, like the start of whatever 12 years ago when we started doing stuff like this. [Laughs]

Lea Alcantara: Right, right, right.

Emily Lewis: Because it’s only after like screwing things up a couple of times or encountering problems that you figure out how important the basics are. [Laughs]

Lea Alcantara: [Laughs]

Emily Lewis: And this is really important if it’s a brand new client or an old client who hasn’t been able to invest in their site or CMS in a while. So you have to make sure that those environments have version control in place, not just a repository for, let’s say you and me, Lea, to develop.

Lea Alcantara: Right.

Emily Lewis: But like establish workflows that the client understands, and by establish, I mean, documented workflows.

Lea Alcantara: Yeah, and if any of that isn’t in place, you just need to get it in place.

Emily Lewis: Yeah. And not just getting it into place, you’re probably going to need to educate your client.

Lea Alcantara: Yes.

Emily Lewis: In our experience, version control is still a new concept for a lot of clients, especially if they’re on a legacy CMS or legacy host or legacy protocols. You’ve got to take time to prep your clients so they understand these modern development practices. It will help you with your immediate upgrade, but it also ensures that your future upgrade, and well, I mean, even migrations will be easier because everything is on version control. And I mean, Lea, we’re literally in the middle of this process.

Lea Alcantara: Yeah. We’re moving a new client with no version control to our environment with version control.

Emily Lewis: [Agrees]

Lea Alcantara: And a big part of that is the training and client education. It was really interesting because when you and I, we are in the industry, and even when I’m talking to the client contact, she’s a designer and she’s the one handling the site, she got the importance of version control.

Emily Lewis: [Agrees]

Lea Alcantara: But we had to do extra work in finalizing the sale essentially with her upper…

Emily Lewis: Like convincing, yeah, the people above her.

Lea Alcantara: Right, exactly, and we had to very specifically bullet point explain how they’re actually losing money and wasting time without version control in place, and this was even true exactly because there was exactly an issue just last week where something broke and nobody knew what happened.

Emily Lewis: [Agrees]

Lea Alcantara: And there’s no way to understand when it would broke, who touched what, and it just wasted everybody’s time trying to figure all of that out.

Emily Lewis: [Agrees]

Lea Alcantara: And with all of that said, now we’re moving this client into a training plan for version control so that those types incidents no longer occur.

Emily Lewis: [Agrees]

Lea Alcantara: Or when they do occur, there are specific steps to rectify the issue before spending two hours just staring at something and nothing changes or works, right?

Emily Lewis: [Agrees]

Lea Alcantara: So the step really is just getting them to understand when they shouldn’t be on the site. [Laughs]

Emily Lewis: Yeah, but I think it’s worth mentioning, because there may be some listeners who are like, “Oh, how often is that going to happen? This is not some really old CMS this client is on. They’re on Craft.”

Lea Alcantara: Yeah. They’re on the latest version of Craft 2, yeah.

Emily Lewis: And we’re inheriting them from an agency that’s doing current work.

Lea Alcantara: Yeah.

Emily Lewis: This is not something that has been neglected.

Lea Alcantara: Right.

Emily Lewis: And so the fact that they didn’t have version control established, I think that’s more common than people realized that…

Lea Alcantara: Right.

Emily Lewis: And that when you’re dealing with CMSs, nine times out of ten, I think you anytime you’re dealing with flat file like Statamic, that’s sort of the exception that proves the rule.

Lea Alcantara: Right.

Emily Lewis: But if you’re dealing with the database, then this is something that has to be in place, not only between the developers, but with the client.

Lea Alcantara: Right.

Emily Lewis: It has to be there.

Timestamp: 00:09:56

Lea Alcantara: Yeah, absolutely, and I’d also want to state that the reason it’s common, but it’s fixable, like Emily and I years ago, especially when we were just independent, we didn’t have version control in place ourselves, right?

Emily Lewis: [Agrees]

Lea Alcantara: So like a lot of our clients over the years we’ve had to transition our own clients, too, to version control.

Emily Lewis: [Agrees]

Lea Alcantara: So this is not to say to like shame anyone for developing anything without version control, but it’s just it’s one of those things that, especially when budgets are a concern and then when you’re actually dealing with the realities of fixing these issues, version control is a must.

Emily Lewis: Yeah, and I think this isn’t just to ensure that technical implementation goes smoothly and that your client understands it, but you need to be aware of this so you are estimating properly.

Lea Alcantara: Yes.

Emily Lewis: Because version control isn’t hard to set up, especially the technical aspects, but educating a client, that can take longer, so make sure you’re factoring that in and pricing for it accordingly. That’s one of those things that can bite you later.

Lea Alcantara: Yeah, absolutely.

Emily Lewis: And then once you get the client to understand the version control concept, the protocol, then it’s really about having a conversation for planning how content is going to be handled during the upgrade.

Lea Alcantara: Right. So as Emily mentioned, Statamic is kind of the exception because it’s a flat file, but if you’re using a database-based CMS, there could be potential conflicts with the content clients are updating on their live site while you’re developing locally or on staging.

Emily Lewis: Yeah.

Lea Alcantara: So the first thing you need to do is coordinate how you want to handle content holds. You need to set expectations about content duplication, testing and how you’re going to handle that as well.

Emily Lewis: Yeah. And once again, we’re in the middle of doing this with this brand new client. We just addressed this particular conversation yesterday with the client. Lea, why don’t you share tips for how we’ve kind of developed an efficient approach to this?

Lea Alcantara: Right. So I kind of made a hint earlier, we document everything.

Emily Lewis: [Laughs]

Lea Alcantara: Yeah. And even if it is straightforward, because at the end of the day, content hold is don’t test this site when we are developing on the site, and if you do, make sure you make note of it, that’s it.

Emily Lewis: [Agrees]

Lea Alcantara: That’s it in a nutshell. However, in reality, clients don’t know actually what that truly means in terms of like step by step by step so in order to remove confusion and make communication much clearer, we created a documentation, and this is templatized so like the first time we document this for our one client, we make sure that that’s saved for like any future clients, and then we just go through a step-by-step process on letting them know, “Hey, from this day to this day and from this time to this time, we need to make sure you’re out of the system so we can make sure that our local systems or dev systems or staging systems are one to one with live.”

Emily Lewis: And additionally, like Lea hinted too, if they’re going to hold or track their content on live, and that’s how we refer to it to the client, we give them an option. They can hold and not enter any content in live while we’re doing development or they can enter content in live and just track it, and we recommend that they create some sort of internal spreadsheet where they can track what was added to live, the content, who when so that when this system is back and ready for them all upgraded, they have an easy reference to populate it so that live and development become one to one again.

Lea Alcantara: Yeah, absolutely.

Emily Lewis: Oh, and I think before we move on don’t forget server setup in your environment prep.

Lea Alcantara: [Agrees]

Emily Lewis: If an upgrade or migration demands PHP 7 the way Craft 3 now does, it could affect how you plan the upgrade and your client setup, so make sure you get as much of the final server details in place in your dev environment as possible so that you’re kind of again working with the one-to-one situation. Yeah, we’re okay with that, environment is good, check. Content planning is good, check. Next, planning and prep specifically for an upgrade.

Lea Alcantara: Right. So before we dive to the development side, I know we’re already a few minutes into this podcast, we haven’t even dived into the development side, and that’s on purpose because we need to make sure that everything is prepped properly, and with that in mind, two assets should be on hand.

Emily Lewis: Let me interrupt you, Lea, maybe we should say why they need to make sure things are prepped properly like, “Why is it important to like have this stuff in place?” I mean, I can think of times I’ve upgraded and didn’t have systems in place and the client called and said, “Well, we had a bunch of content on live that’s no longer there. What happened?”

Lea Alcantara: Oh, yeah, yeah, yeah.

Emily Lewis: And you’re like, “Oh, my God, I completely…”

Lea Alcantara: Yeah.

Emily Lewis: This was back in the day, but that’s what forms our best practices today.

Lea Alcantara: Right.

Emily Lewis: That’s not an incidental thing for a client. They have their own time frames and resources and they have to enter content twice, especially if it’s like in the middle of a campaign and it was a lot of content, you’re going to have a very upset client.

Lea Alcantara: Yeah, yeah, yeah, absolutely, and then so that’s an issue in the client side. The development side is just purely you don’t know what just happened. If something broke, it just takes so much more time to figure out like what did I do wrong, because there are so many moving parts, and as developers know, it could be a stupid as a typo, right?

Emily Lewis: Yeah.

Lea Alcantara: So if you have a process in place, you could systematically go step by step and figure out what the problem is or prevent the problem from happening in the first place.

Emily Lewis: And then, of course, for those of you who are already familiar with version control, you know that that gives you a really useful way to examine what some of those changes may have been.

Lea Alcantara: Exactly.

Emily Lewis: All right, so sorry for interrupting you.

Lea Alcantara: [Laughs]

Emily Lewis: You were going to get into the documents that we use to sort of guide the upgrade process.

Lea Alcantara: Right. So in Part 1, we talked about the CMS audit so that should always be in front of you when you’re prepping for the upgrade.

Emily Lewis: [Agrees]

Lea Alcantara: And the other thing that is in line with what we just talked about is a gotchas document.

Emily Lewis: [Agrees]

Lea Alcantara: We started creating this essentially because of all the things that happen during an upgrade, and so before I even begin a new upgrade, I always have a gotchas document open and during an upgrade, I always have that document open. It’s really the common useful tool to highlight what could be problematic with specific installs and we know that because CMSs can be extended and customized in so many different ways that you need to have a way to reference these nuances so you can deal with it sooner than later.

Emily Lewis: And like Lea was saying about the client’s version control content hold/tracking document that we have that’s like a template, that gotchas document has been a template that we start from, but recently, we started doing a client-specific gotchas document.

Lea Alcantara: [Agrees]

Emily Lewis: It’s sort of like our internal development notes for that client.

Lea Alcantara: Right.

Emily Lewis: So we’ve got the global one that’s relevant to ExpressionEngine or the global one that’s relevant to Craft or Statamic, but we’ve also been doing one that’s really, really specific to the client about their setup, that way you have an at-a-glance view to make sure you know what’s going on and can be a reference for yourself the next time.

Lea Alcantara: Yeah, exactly. So some examples from our gotchas doc includes bugs or a lot of times PHP deprecated methods, especially if they’re using older plugins, highlighting those specific plugins that’s no longer supported means outlining the hex that need to be in place in order for the upgrade to work and then referencing the link solution. So not just writing down what the problem is, usually, I try to link and figure out a way to reference back what the solution was in the first place, so if I have to refer back, I have context over why the fix was this fix.

Emily Lewis: [Agrees]

Lea Alcantara: And there are a lot of QA things in this document, too. So for example, in ExpressionEngine and Craft, to upgrade a plugin, it’s usually just replacing the plugin folder with a new plugin folder, but that might override custom configs, right?

Emily Lewis: [Agrees]

Lea Alcantara: Because some of these plugin folders have like a config.php that you point a different folder to or something like that, and you need to remember that custom styles or configs are backed up.

Emily Lewis: Yes, so eventually at the end of a project, we review what we learned, the gotchas, for that client and decide if anything needs to be added to our internal templates. Everything we do influences the future projects. It’s kind of core to our deep experience with CMSs, like we literally have a knowledge base from our 12-whatever years it is of building CMSs and we’re continually using them, we’re continually evolving them, and it makes us better each time. The project is faster, the upgrade is more efficient, and is more profitable for us.

Lea Alcantara: And I want to point out, even if you’ve done upgrades for a specific piece of software several times already, there’s always going to be some new gotcha.

Emily Lewis: [Agrees]

Lea Alcantara: And that’s why you always have to be mindful of nuances in between versions. For example, ExpressionEngine has version-specific notes that specify in that version if it needs a specific tweak, right?

Emily Lewis: [Agrees]

Timestamp: 00:19:58

Lea Alcantara: And while, for example, Craft is 99% one-click update. There have been a couple of instances because we’ve been working with Craft for years now that a manual upgrade is requested to get to the latest version.

Emily Lewis: You know, I feel like it’s worth emphasizing that this is even more true if you’re working with an inherited or a legacy system or like a CMS you built, but haven’t touched in years. Once again, don’t just assume that it’s an, “Oh, it’s a simple EE upgrade. I’ve done a dozen of those. I’ve done two dozens of those.” You could screw yourself in the build process by underestimating the potential conflicts that can happen.

Lea Alcantara: [Laughs] Exactly. So that’s a really good point. The gotchas document could be useful sales tool, too. If you know that a certain plugin has traditionally been a gotcha, that’s a major part of the prospect’s CMS, then you can factor the cost for replacing it, right?

Emily Lewis: [Agrees]

Lea Alcantara: And give the client explicit info, “You know, in our experience, this will take XYZ because we did just that for another client on the same upgrade path.

Emily Lewis: [Agrees]

Lea Alcantara: The main thing is you have to have some sort of reference or library of knowledge to pull from to make this usually gainful process of upgrading a little less painful.

Emily Lewis: Yes. So let’s get into the upgrades. We’re not going to go through every upgrade step.

Lea Alcantara: Yeah.

Emily Lewis: That’s up to you to review in your CMS’s documentation.

Lea Alcantara: Though we will include links in our show notes to the upgrade docs from our preferred CMSs, which are Craft, EE and Statamic.

Emily Lewis: Yeah, cool. So what we are going to share are some of those specific nuances to consider while you’re going through an upgrade, and once again, a reminder, the fundamentals, your first step, back up everything, and because you’ve got your version control in place, push that backup as a revision so you can easily roll it back and to be extra specific, that revision needs to include the database, an export of the database needs to be in that.

Lea Alcantara: And that’s easy to say and easy to forget.

Emily Lewis: Yes.

Lea Alcantara: So that’s why we’re saying it.

Emily Lewis: Yeah.

Lea Alcantara: In fact, Em, why don’t you share how we managed our databases for clients in our ideal version control setup?

Emily Lewis: Yeah, it’s super simple, I think, but we just have an established protocol for our development environments that Lea and I used when we’re working on development, so basically we have in the local site, the project, we have a directory that holds the databases and we have them divided by the different environments.

So for example, most of our clients have a production or a live environment or a staging or development environment, it sort of depends on what their internal naming is, and so in our local projects that Lea and I work on and have version control, our primary database that we work with just resides in a /db/ folder. But then within that folder, we have two subdirectories, one for the production backups and one for the development or staging backups.

Lea Alcantara: Yeah.

Emily Lewis: And we just always make sure that when we’re doing exports or a backup with any of these, we’re saving them to the correct directory and the database exports, the MySQL file exports, they’re also named one to one with either development or production or staging or live, whatever the internal naming for that client is, and it’s just really simple, but Lea, wasn’t it, like a year ago that I was like, “This is getting out of control. We need to establish some naming conventions for how we’re managing these databases.

Lea Alcantara: Yeah.

Emily Lewis: So even a year ago, we didn’t have this formally documented and nailed down, and it just got eventually to be a pain so it’s about forcing yourself to follow some sort of internal standards.

Lea Alcantara: Yeah, absolutely, and it seems so obvious when you say it, but I’m just looking at some of our like past sites. Well, there is…

Emily Lewis: [Agrees]

Lea Alcantara: And then some of them said like devBUP and then Prod and then one said live, and you know, some… [laughs] It’s just like, “Okay, let’s figure out what all of this actually means and have some sort of standards so that every project from moving forward will have that particular standard and there’s just less confusion.” And then on top of that, whenever we do push or do backups with the revisions we mentioned, whether the DB is required or if this was just a backup, it orients as well.

Emily Lewis: Right. Right. The notes to the commit explicitly say DB REQUIRED in all caps.

Lea Alcantara: Yeah.

Emily Lewis: And this reminds me, these are actually like specific tips and workflows that we learned from my former boss and current friend, Ian Pitts. We had him on the show forever ago to talk about version control, and we will link to that in our show notes, but we actually hired Ian to train us in version control.

Lea Alcantara: [Agrees]

Emily Lewis: And just share what his workflows and best practices were. We documented those and we’ve just sort of been evolving them since.

Lea Alcantara: Yeah, absolutely, so back to the actual upgrade. [Laughs] Regardless of the CMS, we tend to focus on making sure all the plugins or add-ons are the latest versions before the CMS itself.

Emily Lewis: [Agrees]

Lea Alcantara: And then we upgrade one at a time using the CMS audit spreadsheet as a guide.

Emily Lewis: [Agrees]

Lea Alcantara: Usually like after I make that spreadsheet, I add another column where it’s just basically I check it off to make sure that that specific line item or that specific plugin has been dealt with. And if you remember from Part 1, that list includes the current versions, core software versions supporting other notes, and so we have that list ready for us. And as I mentioned, I add that column to check off if something goes well, but it also gives us a way to add notes if something goes wrong. So going down our audit list one by one, we can more easily identify if there’s a specific plugin breaking things, if something breaks.

Emily Lewis: And if our listeners are like, “That seems tedious and like not efficient,” then don’t do it and eventually they’ll come bite you in the ass. [Laughs]

Lea Alcantara: [Laughs] Right, right.

Emily Lewis: The only reason we do this is eventually it got us.

Lea Alcantara: Right. And while I am doing that, going through that CMS audit like line by line, plugin by plugin, I’m referencing the gotchas document that I mentioned earlier and updating that gotchas document as I go when something does eventually happen because 100% of the time something always does. [Laughs]

Emily Lewis: Right. Right. A 100%, there has never been like “set it and forget it” upgrade from an old system. I think the only exception are systems with one-click updates like Craft or Statamic or maybe even newer versions of EE 4, but even then only when they’ve been regularly updated, meaning every time there has been a release that that’s been installed.

Lea Alcantara: Yeah, absolutely. And actually, as recently as this week, a one-click update that seemed to work for a Craft client broke the contact forms.

Emily Lewis: [Agrees]

Lea Alcantara: And strange as it sounds, it was hard to diagnose initially because the site still loaded, you could still add and edit entries and for all intents and purposes, everything should have worked version control showed that no other files have been edited but the Craft core due to the updates, and Craft was working and the rest of the site, too.

Emily Lewis: So what was the issue why did a simple upgrade break the site forms?

Lea Alcantara: Well, the funny thing was, it was a syntax error.

Emily Lewis: [Agrees]

Lea Alcantara: So as I mentioned earlier in the show, something as small as a typo could be an issue to break a site. [Laughs]

Emily Lewis: [Agrees]

Lea Alcantara: And in this case it was a forward slash. It was a forward slash that worked for over a year of Craft updates.

Emily Lewis: [Agrees]

Lea Alcantara: And like a lot of things on the web, even if a code is malformed, depending on what it is, the software will still try to guess the intent and render it, and in this case, the CMS upgrade became more strict about how plugin actions were called and this one forward slash had to be removed in several JavaScript controllers and then everything worked again.

Emily Lewis: Those are like edge case examples.

Lea Alcantara: [Laughs]

Emily Lewis: But that’s a perfect example of things to save time next time having it in our gotchas document.

Lea Alcantara: Yeah, absolutely.

Emily Lewis: Lea, can you share some other gotchas that we documented maybe in EE-specific one or Statamic. Do we even have any gotchas for Statamic even?

Lea Alcantara: None. Not quite yet, I think.

Emily Lewis: It’s a good sign.

Lea Alcantara: [Laughs]

Emily Lewis: [Laughs]

Lea Alcantara: But things that are coming to mind right now are a lot of EE sites are in legacy versions of EE.

Emily Lewis: [Agrees]

Lea Alcantara: And right now PHP 7 is becoming standard, rightfully so, in a lot of hosting setups, so you have to really keep that in mind when you’re upgrading ExpressionEngine. Regardless of what version of ExpressionEngine it is, make sure that the dbdriver is pointing to MySQL with the “I” at the end so mysqli.

Emily Lewis: [Agrees]

Lea Alcantara: We use Erik Reagan’s EE Master Config so whatever is in database.php or config.php is overridden and if you’re just doing a “regular” upgrade path where most of the files stay the same, except the core files, then of course, the config hasn’t been touched. If you forget to add that little “i,” the system won’t load.

Emily Lewis: [Agrees].

Timestamp: 00:30:00

Lea Alcantara: Yeah. So that’s like one little gotcha. Another weird gotcha, our own site, ctrlclickcast.com, is on an old version of EE 2, but it was in even older version of EE 2 a year or so ago before I tried to upgrade it to the latest version, and the thing is the older versions of EE 2 had limitations on the exp_channel_data table so that there was like a maximum character limit for the field.

Emily Lewis: Ah.

Lea Alcantara: And that’s an issue because we published our transcripts in one text field.

Emily Lewis: It’s super long.

Lea Alcantara: Yes. And so when you just do that particular upgrade, it actually broke our transcripts, and I remember I had to roll back… Ugh… roll back…

Emily Lewis: Thank goodness for version control.

Lea Alcantara: Right. Like I had to roll back and be like, “What the heck? What happened here? Why didn’t…” Like our transcripts are important to us, obviously. [Laughs] And then after digging into it, like I had to go into MySQL find the table and change the actual table configuration for that field to MEDIUMTEXT and then reimport that. So I actually had to export that one table, then reimport it when the long field turned into MEDIUMTEXT. Anyway, as you can see, [laughs] with the frustration in my voice, it’s one of those things where it’s just like how would you have known until you’re like, “Why is my data completely gone?”

Emily Lewis: [Agrees]

Lea Alcantara: And then after you troubleshoot, you find that other people have had similar issues.

Emily Lewis: [Agrees]

Lea Alcantara: So yeah.

Emily Lewis: Speaking of troubleshooting, what’s your go-to?

Lea Alcantara: What do you mean?

Emily Lewis: You know, if you have a question, are you going on Stack Overflow?

Lea Alcantara: Oh.

Emily Lewis: Are you going on Slack?

Lea Alcantara: Oh, Google.

Emily Lewis: [Agrees]

Lea Alcantara: It’s just always like here’s the problem or here’s the error, and then I append it with Craft CMS or ExpressionEngine, and that you usually try to find the most recent response, and it’s usually a Stack Exchange thing, because sometimes if you get a form one, those are really old. I just try to see what’s the most recent. If it says 2017, that’s usually the oldest I’d try to go to take a look at an issue.

Emily Lewis: Cool. I kind of think gotchas is a nice segue to what should be done to make sure an upgrade went well, how to do the QA, make sure everything is working.

Lea Alcantara: Right.

Emily Lewis: Even like those super small non-obvious things like that forward slash you described, it was only noticed when someone needed to fill out the form for that Craft client.

Lea Alcantara: Right, right. So I think if you’re going through a traditional upgrade then there’s an assumption, I’m just going to make this assumption that you haven’t done major changes to the structure of the site.

Emily Lewis: [Agrees]

Lea Alcantara: So the majority of the time, the QA should be making sure all critical pages work. Can you create entries? Can you edit entries?

Emily Lewis: [Agrees]

Lea Alcantara: And as you mentioned above, an upgrade broke forms, so call to action, make sure that you test all the call to action search forms and contact forms still work.

Emily Lewis: Yeah. Although we recently did an upgrade, we found a new thing for us to add to our QA workflow that we didn’t traditionally do with a traditional upgrade, so Lea mentioned reviewing the content entry and content rendering, but you should also check custom fields. One of the EE upgrades I’m talking about actually broke custom field edits, meaning I couldn’t create a new custom field for a channel, and it wasn’t immediately obvious because we don’t typically add new custom fields for projects, like the site stays…

Lea Alcantara: After it’s launched, yeah.

Emily Lewis: Right. The site is stable, but this client is an ongoing client and they had a new request that just happened to need some new fields, and it happened shortly after the EE upgrade.

Lea Alcantara: Yeah, and so all the fields were borked.

Emily Lewis: [Agrees]

Lea Alcantara: But it wasn’t an immediately obvious problem because content entry still worked.

Emily Lewis: [Agrees]

Lea Alcantara: It’s the development side that was broken.

Emily Lewis: Yeah. Our side.

Lea Alcantara: Yeah, exactly.

Emily Lewis: [Agrees]

Lea Alcantara: So in this case, it was mostly related to a PHP 7 compatibility issue since our EE upgrade coincided with a hosting upgrade.

Emily Lewis: Yeah. And in retrospect, it was sort of good fortune if the client didn’t have this new request right after the upgrade and the hosting migration, we might not have added new fields for – I don’t know, maybe at least a few months.

Lea Alcantara: Yeah.

Emily Lewis: And then by then, it might have taken us longer to narrow the problem down to the upgrade, wasting our time, so it’s kind of a lucky timing.

Lea Alcantara: Yeah, okay. So to sum up prepping an upgrade, make sure you have a checklist to review some common configurations and fields that you would edit as a developer.

Emily Lewis: [Agrees]

Lea Alcantara: Like our listener, Anthony Stoffer, tweeted, “Remember to test all used cases before declaring it finished.”

Emily Lewis: Yes.

Lea Alcantara: And I think that leads us to the end of our typical upgrade process in some considerations. Let’s dive into a migration.

Emily Lewis: Okay.

Lea Alcantara: And by migration, we kind of mentioned this earlier in the show, we don’t just mean moving to completely different system, but it’s the act of exporting or moving relevant content from your current system to a newer one.

Emily Lewis: [Agrees]

Lea Alcantara: So whether that’s it in the same brand of software or to a completely different system, it’s a similar process.

Emily Lewis: Yeah, so like for our clients, as I was describing earlier, migration can be from EE 2.5 to Version 4 or EE any version to Craft any version, and so on. And no different than an upgrade, you still have to prep your clients about content holds and development protocols, making sure version control is in place. But what’s different from an upgrade, a lot of migration prep is first identifying what needs to migrate in the first place.

Lea Alcantara: Yeah. So a common misconception for a lot of clients is they think that a migration is just a technical thing.

Emily Lewis: [Laughs] They think everything about the website is a technical thing.

Lea Alcantara: [Laughs] It’s technical. Yeah. Setting expectations as to how much they need to prepare is a big thing. The reason they’re migrating is because they want a site with less headaches, right?

Emily Lewis: Yeah.

Lea Alcantara: And one of the things that clients need to understand is they have to clean up their current CMS.

Emily Lewis: Yeah, and to borrow the ideas from our Demystifying series using like analogies that our clients can relate to, when you move to an new house, you’re not moving your garbage. [Laughs]

Lea Alcantara: [Laughs]

Emily Lewis: You’re moving the stuff you want to keep from your old place to your new place, and so the same is with the CMS. We want to make sure that we only move what’s needed, and we cannot do that without our client’s participation. The reality is they know their business best, so they are the ones who most clearly can explain what is necessary to migrate. Lea, this reminds me of the really big EE multisite to Craft migration we did last year.

Lea Alcantara: Yeah.

Emily Lewis: And that this cleanup step was really, really important to keep the migration efficient and keep us on budget. Can you share how you helped the client because am I remembering it right, they said they did some cleanup and then you even spotted some things they didn’t consider?

Lea Alcantara: Yeah, absolutely. I think the simplest thing is to get them to look and list all the channels and sections that they haven’t touched.

Emily Lewis: [Agrees]

Lea Alcantara: And it’s pretty easy because you could just get them to review content that’s been around for years.

Emily Lewis: [Agrees]

Lea Alcantara: So if they changed the listing view to show like the oldest entries and they’re like, “Heck, we haven’t looked at that page or that entire section in years. Do we need to move it to the new system?” Right?

Emily Lewis: [Agrees]

Lea Alcantara: Same thing with members, who are these people? Do they even work at this company in the first place? Right?

Emily Lewis: Right. You’re talking about admin users.

Lea Alcantara: Right. Admin users or it’s not even admin users, sometimes you just have editors or somebody that you just added to change one little thing.

Emily Lewis: [Agrees]

Lea Alcantara: Or previous vendors, right?

Emily Lewis: [Agrees]

Lea Alcantara: It’s just sitting there, which could be a security issue, too, so there’s just an ongoing amount of education to figure out what actually is a priority here.

Emily Lewis: [Agrees]

Lea Alcantara: It also gives them a chance to even explain certain functionality is no longer needed. There was one entire channel that was completely irrelevant for this because they were using a totally different service. Completely, if we didn’t have that conversation, we would have had to do custom PHP to duplicate that functionality, and they save money and time because we ask them simply, “Are you using this?”

Emily Lewis: Right.

Lea Alcantara: Yeah.

Emily Lewis: Yeah. And it even becomes a conversation where they have to then kind of speak inwardly when there are situations like with lots of staff turnover.

Lea Alcantara: Right.

Emily Lewis: This is an old system because things may have been built for staff that’s no longer there.

Lea Alcantara: Right.

Emily Lewis: If they say, “You know what, I have no idea what that’s used for,” that’s a good idea that it’s not needed to come over with the migration.

Lea Alcantara: Right. And whenever you do something like this, you’re always backing things up.

Emily Lewis: [Agrees]

Lea Alcantara: So it’s not like it will be deleted into the ether and gone forever.

Emily Lewis: Gone, right.

Lea Alcantara: But in purposes of prioritizing time and effort and development hours, we need to make sure that we clean everything up as much as possible before the migration and just having those particular conversations. The big thing, too, though is not to even take your client’s assumptions at face value either.

Timestamp: 00:40:09

Emily Lewis: [Agrees]

Lea Alcantara: Because they might be like, “Hey, we haven’t touched this in a while.” However, that stuff might still be used by other channels.

Emily Lewis: [Agrees]

Lea Alcantara: So it’s kind of like that trust…

Emily Lewis: Yeah, I remember.

Lea Alcantara: Yeah, trust but verify kind of situation. [Laughs] It’s like the sidebar widgets, right?

Emily Lewis: [Agrees]

Lea Alcantara: They just didn’t think about it. They haven’t updated it in a while, but it’s in every page, and I remember if it bit us in the butt because they didn’t bring it up and I just took it at face value they don’t use it, but then they’re like, “Hey, why is this not here?” Oh, okay, it hasn’t been updated in three years, but this was a major part of the design and they expect it to be there, right?

Emily Lewis: [Agrees]

Lea Alcantara: So when you’re thinking about what to clean up or not to export, we also have to identify what needs to be manually re-added.

Emily Lewis: Oh.

Lea Alcantara: Yeah, that’s a major part of the client participation, because this actually will be faster than cleaning up or exporting or importing.

Emily Lewis: Right. It’s kind of about trying not to over-engineer. It’s sort of like you were talking about with the members.

Lea Alcantara: Right.

Emily Lewis: Like do you need to do a member export and spend time massaging the file syntax, the setting of scripts for move when you really only have five client active members to migrate.

Lea Alcantara: [Laughs]

Emily Lewis: You know, it might take – what – ten minutes to enter those by hand and that’s something that can save everybody some time and the client some money.

Lea Alcantara: Right, exactly. Ask yourself if this is something you or your client could or should enter manually.

Emily Lewis: [Agrees]

Lea Alcantara: So a lot of prep is really content review, cleanup and then assigning what should be automated in the move and what should be manually completed.

Emily Lewis: So I mentioned the members, Lea, is there anything else that comes to mind from our recent migrations that has made sense for manual entry that may be our listeners can be on the lookout for?

Lea Alcantara: Yeah, absolutely. So I think a common one probably across the board, though I’m thinking about one particular client, is certain inline code that has to be removed, right?

Emily Lewis: [Agrees]

Lea Alcantara: So for like a lot of legacy systems, there’s just one giant text field that everybody just keeps adding things to, whether it’s an embed or an image or a text.

Emily Lewis: [Agrees]

Lea Alcantara: In more modern systems and newer versions of CMSs, you can extract specific content and have it in its own field, right?

Emily Lewis: [Agrees]

Lea Alcantara: So inline code like an embed or social sharing was shoved into a text field in some ways. If it was consistently done in this text field, you could just do a mass cleanup in your export file and just delete it.

Emily Lewis: [Agrees]

Lea Alcantara: But that’s, unfortunately not always the case, so you have to figure out, “Okay, which can we do automated and which does the client have to go into that entry and delete it or change it?” So like in Craft, we create Matrix fields.

Emily Lewis: [Agrees]

Lea Alcantara: And when you’re doing a mass export/import, you try to just put it all in one field, but it’s really best moving forward, especially for the layout and especially for consistency, if each piece of content was separated, right?

Emily Lewis: [Agrees]

Lea Alcantara: So some of that has to be done manually. It really all depends on what can be consistently taken out, right?

Emily Lewis: [Agrees]

Lea Alcantara: So if, for example, like a lot of that mixed content is only in one channel or in a couple of entries, that can be done manually. If we saw that certain pieces of code was consistently entered, then maybe we could extract that.

Emily Lewis: [Agrees]

Lea Alcantara: And then you just customize your export content so that it’s wrapped around the proper fields that can be associated to the proper Matrix block, but it’s not always the case.

Emily Lewis: Yeah. And I think these sort of situations that you are describing, they kind of really point back to your sales process, your scoping process.

Lea Alcantara: Right.

Emily Lewis: If you’ve agreed to give the client, let’s say, for example, greater flexibility with their pages where they can, like in Craft, do the drag and drop, reordering of different Matrix fields, they can pick and choose what types of content might be on the page. So that’s dramatically different from what you’re describing with maybe the legacy system, which is just one massive text field that has like mixed content in it.

Lea Alcantara: Yeah.

Emily Lewis: And so in that situation, that is a bigger scope.

Lea Alcantara: Yeah. [Laughs]

Emily Lewis: You know? [Laughs]

Lea Alcantara: Yeah, yeah.

Emily Lewis: If you’re getting a client migrating them to a new system and all functionality is about as one to one as you can get, then maybe you don’t need to go through that, and it can all get dumped into another big text field. That’s certainly an option if budget is limited or the client is used to that workflow and wants to keep it. Again, you want to make sure that you’ve defined your scope so that you’re not screwing yourself. Especially with this one, screwing the client with unexpected, “Oh, you’ve got to manually change all this stuff.”

Lea Alcantara: Right, exactly. Like just setting the right expectations over what customization actually means and what moving old content, the implications of that means.

Emily Lewis: Right. So for our migrations, Lea, you do a lot of that content prep work, the prep work for the export and import and the automation. Can you share some of your best practices when you’re preparing content to move out to export out of the system?

Lea Alcantara: So for me, in my opinion, before you even export anything, your new CMS install, its structure should be set.

Emily Lewis: [Agrees]

Lea Alcantara: Because you need to know where these buckets of info should go in the first place.

Emily Lewis: [Agrees]

Lea Alcantara: And when you have that info, then you can have a better idea of how your exported files should be structured, and I already mentioned, are we importing into one big text field or a Matrix or several Matrix blocks? But I’m thinking this is really very relevant if your content has a lot of relationships.

Emily Lewis: Oh, right.

Lea Alcantara: That’s where things get really tricky because different CMSs handle related entries differently, so you have to figure out how they handle it, how they identify what is attached to what, and this gets complicated between different brands of CMSs because what if the related entry is identified by an ID number.

Emily Lewis: [Agrees]

Lea Alcantara: So that ID number is completely irrelevant because Entry 1234 isn’t the same Entry 1234 in a new CMS.

Emily Lewis: [Agrees]

Lea Alcantara: And then on top of that, when there are related entries, you have to import in a certain order and then re-import something on top of that.

Emily Lewis: [Agrees]

Lea Alcantara: So for example, in terms of order, you probably should have all entry authors set up before importing entries because those authors are associated with an entry.

Emily Lewis: Right.

Lea Alcantara: If you don’t, which I’ve done, [laughs] you might have to re-import content.

Emily Lewis: So how were you able to handle this with that really big EE to Craft migration? Where did you begin to kind of map this out?

Lea Alcantara: This is why I love local development.

Emily Lewis: [Laughs]

Lea Alcantara: Because it isn’t messed up, it’s not a big deal and you just test the theory, but to handle the entry ID issue, I had to figure out if there was another way that the entry was associated. In this case, the related entry titles would suffice, so whew. So when I was setting up the export files, I made sure to note that the related entry field would reference the title, and then for the first import, when trying to figure out what order should I import these items, I just basically chose the one that most other sections referenced first. So I just kind of looked at all the export files and we’re like which ones seems to like want to pull from the most, right?

Emily Lewis: [Agrees]

Lea Alcantara: So that way, it was auto associated when the rest of the other sections and entries were imported, but there is an issue with associating a title instead of the unique ID because that means some related entry field had several versions of an entry associated.

Emily Lewis: Oh.

Lea Alcantara: Because they might have the same title like Sidebar Widget Y and then Sidebar Widget Y again. For whatever reason, they have the same title

Emily Lewis: Right, okay.

Lea Alcantara: Honestly, I wasn’t able to figure out an easy way to clean that up except manually. For this client, it was sufficient enough to do that, and it was like widgets that just had similar names.

Emily Lewis: [Agrees]

Lea Alcantara: And for some reason, because again it’s an old system, there was duplication anyway with those widgets, that’s why they have the same names, so just deleting a bunch of the related entries just made it easy. But I’m sure someone more clever than me would be able to add a unique identifier and then somehow associate that specific identifier with that title.

Emily Lewis: So when it comes to the importing, I know several types of file formats work like CSV, XML, JSON. Any reason why you would use one over the other?

Lea Alcantara: For me, I say use what your original CMS has exported naturally.

Emily Lewis: [Agrees]

Lea Alcantara: So if there’s like an export tool, use whatever that export tool is using, whether that’s a CSV or an XML file, I say it’s good to work with what it naturally understands.

Emily Lewis: [Agrees]

Lea Alcantara: So then that avoids a lot of issues, and from there, you can alter as needed. A lot of times certain CMSs will have a preference. In older versions of EE, I had to take a CSV and convert it to XML from a member imports work.

Emily Lewis: [Agrees]

Lea Alcantara: And there are usually tools for every CMS that gives you a way to create an ideal export and an ideal import. I suggest using the exact protocol their tutorial gives you because it gives you just the least amount of issues.

Emily Lewis: Right.

Timestamp: 00:50:00

Lea Alcantara: For EE to Craft, I used Verbb’s Feed Me plugin.

Emily Lewis: [Agrees]

Lea Alcantara: And there’s a JSON export tutorial. But I also like CSVs because it’s portable and easy.

Emily Lewis: [Agrees]

Lea Alcantara: The only thing is it gets confusing sometimes when you have comma-delimited files and then there’s HTML entities and you’re trying to figure out how to properly separate columns, but CSVs are just so easy to make and deal with.

Emily Lewis: And what happens when things do go wrong?

Lea Alcantara: So generally speaking, when there are errors, make sure that you use your CMS’s logs as a starting point.

Emily Lewis: [Agrees]

Lea Alcantara: So Craft has them, EE has them and make sure you turn on their versions of dev mode. That usually gives you an idea where things begin to fail. But we kind of mentioned this several times in this episode, the majority of the time, errors are syntax related.

Emily Lewis: [Agrees]

Lea Alcantara: That means something is off in your export or import file, a typo, a deleted slash, or semicolon. The worst one, here’s the worst one I found…

Emily Lewis: [Laughs]

Lea Alcantara: Wherever was exactly as it should be, except there was a secret Windows break space.

Emily Lewis: Oh, God. [Laughs]

Lea Alcantara: Like I mean, you literally could not see it until I viewed the export file using Terminal.

Emily Lewis: [Agrees]

Lea Alcantara: So normally, I use something like Sublime or Notepad or something like that on Mac or wherever and I use a Mac.

Emily Lewis: [Agrees]

Lea Alcantara: So I wasn’t able to see what this Windows break space was doing until I was on Terminal and suddenly I saw this weird hash and it also showed up on Notepad on Windows.

Emily Lewis: [Agrees]

Lea Alcantara: So because of this break space, it made the CSV think there was a new data row when there wasn’t.

Emily Lewis: [Agrees]

Lea Alcantara: And that really sucked [laughs] and it took a while to figure out, and the short story to fix that was when I was creating this export, I just recreated that in a Mac-specific suite like OpenOffice.

Emily Lewis: [Agrees]

Lea Alcantara: I was using Excel in the past and so when I did that and then created the CSV and all that fun stuff, the break space no longer was there because it was a Mac-specific piece of software. I don’t know why it added that break space, but it just did.

Emily Lewis: [Laughs]

Lea Alcantara: [Laughs]

Emily Lewis: So I think all of these little situations really underscore that QA needs to happen during the entire process, but I think even more so once the content has been migrated, once everything has been imported, because a lot of times there’s a change, at least for us.

Lea Alcantara: [Agrees]

Emily Lewis: When we do a migration, we’re also typically trying to improve the client’s content management workflows.

Lea Alcantara: Right.

Emily Lewis: And so we don’t typically want to keep them in that scenario where they’ve just got a big text field and everyone is shoving in HTML and embeds and all those other stuff.

Lea Alcantara: Right.

Emily Lewis: So for us, a lot of times, a migration means there’s a change in how the site is structured or there are newer fields or an improved control panel, and so because of these nuances, when there’s a migration project, we really plan, and I emphasize that it needs to be considered in the sales cycle, too, for a longer QA process. We just have more to test so that means we could be taking a full week for QA instead of maybe a day or two with a straightforward update.

Lea Alcantara: Right. And you mentioned the structure changes, something really important to know is that a lot of migrations are tied with major redesigns.

Emily Lewis: [Agrees]

Lea Alcantara: So QA also means checking how the front end renders, okay?

Emily Lewis: Yes.

Lea Alcantara: And not just that the page loads, okay? So when Emily hands me the front-end templates, obviously, I plug in the CMS code and move things around, cut things into its own modules, but in that process, I might accidentally delete an opening or closing tag, which breaks the page, and it could be a silent error that doesn’t show up except for specific browsers, but it could have been prevented or identified sooner if I validated the rendered page’s HTML.

Emily Lewis: Yeah. And I feel like this is something that should be really emphasized if there’s like a discreet role between the front-end developer, and the front-end dev and the CMS dev are two different people.

Lea Alcantara: Yeah.

Emily Lewis: Because validating your templates is really important for that general compatibility across browsers, but also if the project is requiring accessibility compliance, invalid pages breaks that.

Lea Alcantara: Yeah.

Emily Lewis: And that’s a huge problem if your contract has accessibility built in. So the CMS developer needs to respect that the HTML needs to be in the same condition it was handed over to them.

Lea Alcantara: Yeah, absolutely. And the reality, you can’t test every page on the site.

Emily Lewis: [Agrees]

Lea Alcantara: But we do have a spreadsheet listing tested pages and what templates are affected so we can reference what’s been affected.

Emily Lewis: [Agrees]

Lea Alcantara: This is usually a page, a spreadsheet that’s started off from the content audit we talked about in Part 1 and then you organize by a general grouping.

Emily Lewis: Like for example…

Lea Alcantara: The group of them really is that each grouping is based on a section and layout. Is it on a different section? Does it have a different layout? So if it’s a news page, there’s no need to check every article, right?

Emily Lewis: Right.

Lea Alcantara: But you should check the news landing page, at least one article, one paginated page, one category, et cetera, et cetera, et cetera, and once you have that, you essentially have a matrix for testing and you just click through all these pages and validate.

Emily Lewis: Yeah. And you know, that big EE to Craft migration last year reminds me that when you’re dealing with that sort of new design, but with old content, you have to be careful and check that all content for the page renders. This bit us in the ass as well.

Lea Alcantara: Right.

Emily Lewis: So meaning, have the old page open side by side with the new page.

Lea Alcantara: [Agrees]

Emily Lewis: Again, use that testing matrix. Have a before URL and an after URL. Because sometimes like maybe a little widget that no longer exist, maybe it was cleaned up or it was somehow imported differently and nothing is breaking on the page, but that little widget isn’t showing up.

Lea Alcantara: Right.

Emily Lewis: And it may not be obvious to you unless you’re looking at the original page and you’re seeing the content and you’re looking at the new page and you’re not seeing the content. [Laughs]

Lea Alcantara: Yeah, exactly. You know, with redesigns, that content was redesigned.

Emily Lewis: Right.

Lea Alcantara: So it’s just not obvious. It’s just not something obvious sometimes, but I know what exactly situation you’re talking about. It was already imported, I just didn’t load it. [Laughs]

Emily Lewis: It’s simple, the solution is simple.

Lea Alcantara: Right.

Emily Lewis: But if you’re not going through a really detailed, well-documented process for your QA, you might not find this out until like the day you’re supposed to hand it over to the client.

Lea Alcantara: Yeah.

Emily Lewis: And then it becomes an emergency and panic. [Laughs]

Lea Alcantara: Right.

Emily Lewis: And that’s just not cool. It doesn’t feel good.

Lea Alcantara: Right.

Emily Lewis: So if we can avoid that in the future, that’s the kind of stuff that we’re constantly sort of adding to our templated processes.

Lea Alcantara: Yeah.

Emily Lewis: So I think we covered a lot.

Lea Alcantara: Yeah. [Laughs]

Emily Lewis: I mean, we’re past the hour mark at this point of what we do when it comes to the technical aspects of migrations and upgrades.

Lea Alcantara: Yeah.

Emily Lewis: Hopefully, we’ve given you some practical tips to help your clients’ upgrades and migrations go more smoothly. Let’s just finish up with some final tips and thoughts. So Lea…

Lea Alcantara: Just because it’s a one-click upgrade, it doesn’t mean it wouldn’t accidentally destroy things.

Emily Lewis: [Laughs]

Lea Alcantara: WordPress users know this. Make sure you have backups and don’t skip on your QA after.

Emily Lewis: Yeah, good one. I think making sure your client understands their role in an upgrade or migration, and make sure you understand your client’s role so you can communicate how much feedback they need to give, how much QA they should do, all that content cleanup, and how long you should plan and schedule for it. The gotchas aren’t just for technical implementation, but planning for that implementation.

Lea Alcantara: Yeah. Prep and plan as much as possible, period. It will save time in the long run. All right, so now we’ve reached the end. Before we finish up, we’ve got our rapid fire ten questions, and it’s Emily’s turn.

Emily Lewis: Hu-hu… [Laughs]

Lea Alcantara: Are you ready, Em?

Emily Lewis: Yeah.

Lea Alcantara: Okay, first question, what’s your go-to karaoke song?

Emily Lewis: I do not have one. I do not do karaoke, but I did, once upon a time, embarrass myself in front of Stephanie Sullivan Rewis and Greg Rewis and Jeff Croft by singing Ziggy Stardust at a karaoke bar.

Lea Alcantara: [Laughs]

Emily Lewis: And then learning that there’s actually a certain type of song you should pick for this kind of things. [Laughs]

Lea Alcantara: [Laughs]

Emily Lewis: Not stuff with long non-singing parts. [Laughs]

Lea Alcantara: Ah, there are no rules in karaoke. Second question, what advice would you give your younger self?

Emily Lewis: Oh, I really should have thought of this stuff. Probably something like there’s nothing wrong with you. You’re cool, you’re fine. You know, you’re good the way you are.

Lea Alcantara: What’s your favorite PG-rated curse word?

Emily Lewis: Balls.

Lea Alcantara: [Laughs] I love it.

Emily Lewis: Or some kind of like, “Jesus balls or F-balls.”

Lea Alcantara: [Laughs]

Emily Lewis: Or some kind of combination.

Lea Alcantara: Who is your favorite superhero?

Emily Lewis: Oh yeah, Wonder Woman all the way, always been. I still wish I had been allowed to have Wonder Woman underoos as I grew up.

Lea Alcantara: Oh, I love it. What is your favorite time of the year?

Emily Lewis: Fall.

Lea Alcantara: If you can change one thing about the web, what would it be?

Emily Lewis: You know, nasty people.

Lea Alcantara: Yeah.

Emily Lewis: Like not be allowed on or something.

Lea Alcantara: Yeah.

Emily Lewis: Or something like that, like a license you’ve got to apply.

Lea Alcantara: [Laughs]

Emily Lewis: [Laughs]

Lea Alcantara: What are three words that describe you?

Emily Lewis: Loyal. Gosh, I should have thought of this. Organized, kind of goofy.

Lea Alcantara: [Laughs] What are three words that describe your work?

Emily Lewis: Detail-oriented, standards, thoughtful.

Lea Alcantara: What’s your favorite meal of the day?

Emily Lewis: Breakfast.

[Music starts]

Lea Alcantara: Finally, coffee or tea?

Emily Lewis: Coffee.

Lea Alcantara: Very cool

Emily Lewis: All right, so that brings us to the end of today’s episode. Be sure to check our show notes for all the resources we mentioned today.

Lea Alcantara: CTRL+CLICK is produced by Bright Umbrella, a web services agency invested in education and social good. Today’s podcast would not be possible without the support of this episode’s sponsors!


Emily Lewis:  Many thanks to our sponsor and hosting partner, Arcustech and our sponsor, Vast Conference!


Lea Alcantara: And thanks to our listeners for tuning in! If you want to know more about CTRL+CLICK, make sure you follow us on Twitter @ctrlclickcast or visit our website, ctrlclickcast.com. And if you liked this episode, please give us a review on Stitcher or Apple Podcasts or both! Links are in our show notes and on our site!

Emily Lewis: Don’t forget to tune in to our next episode when we hope we can get Fabian rescheduled to chat about his organization, Black Tech Mecca, and how to democratize tech in local communities. Be sure to check out ctrlclickcast.com/schedule for more upcoming topics.

Lea Alcantara: This is Lea Alcantara …

Emily Lewis: And Emily Lewis …

Lea Alcantara: Signing off for CTRL+CLICK CAST. See you next time!

Emily Lewis: Cheers!

[Music stops]

Timestamp: 01:01:25