This is a transcript of the Introduction to the Step-by-Step Guide for Migrating Data from Drupal 7 to Drupal 10. Click here to return to Introduction to the Step-by-Step Guide for Migrating Data from Drupal 7 to Drupal 10


[00:00:00] Michael Meyers: Hello and welcome to Tag1 Team Talks, the podcast and blog of Tag1 Consulting. I'm really excited to announce that we're publishing an in depth step by step 30 part blog post series. It's going to guide you through the entire process of migrating your data from Drupal 7 to Drupal 10. And it comes complete with a local DDEV environment, including a D7 source site with data and a D10 target site that you can migrate your data to.

[00:00:30] Joining me on the show today is Tag1 Team member, Mauricio Dinarte, a well known Drupal migration expert and the author of this series. We're building a guide that's going to help everyone who needs to transition from Drupal 7 to the latest version of Drupal, whether you're a developer looking to learn hands on how to upgrade your site or a site owner embarking on a large scale migration with an agency partner, and you want to better understand the most complex and costly aspect of the migration process.

[00:00:58] This series is going to cover [00:01:00] everything that you need to know about data migrations. I'm Michael Meyers, the Managing Director of Tag1. We build large scale applications in Drupal, as well as many other technologies for global 500s and leading organizations in every sector, including Google, Sumitomo, Al Jazeera, the White House, and the AFL CIO, just to name a few.

[00:01:19] We're the largest concentration of top Drupal contributors and security team members at any organization. And we're responsible for a lot of the innovations that have helped make Drupal the success that it is, including the creators and maintainers of Drupal's Migrate API, which is the tool that's used to migrate your data in Drupal.

[00:01:37] If you need help with your large scale migration or large scale application. Please email us at info at tag1. com. My guest Mauricio is a software engineer with an MBA, a master's in business administration who loves teaching, public speaking and writing. He's worked on a lot of large scale, dribble migration projects and is recognized expert when it comes to the Migrate API, he's done [00:02:00] numerous conference presentations, workshops.

[00:02:03] and more. And he's published many articles as well as another 30 part migration series back in 2019. Mauricio, thank you so much for joining me and welcome back to the show.

[00:02:14] Mauricio Dinarte: Thanks for having me.

[00:02:15] Michael Meyers: Before we get started, I just want to say thank you so much for doing this. Um, when I read your, your first post, and I think people are going to think this when they do as well.

[00:02:24] It was amazing. It was super detailed. Um, yet at the same time, it was like really easy to read. Uh, there was an insane amount of links to other resources. You clearly put a lot of time and effort into not just writing it, but linking to resources, including, uh, alternatives to migration and say, Hey, have you considered other options and things that you might do, uh, or other approaches that, you know, might be less popular, but are still viable.

[00:02:48] So, uh, for example, I think, you know, one of the things that, uh, surprised me is that the Feeds module is something that people use, uh, to do migrations instead of the Migrate API. I've been doing Drupal for 20 [00:03:00] years. I've done a lot of complex migrations and I didn't know that that was a thing. So I'm really confident that whoever is going to be using your series, you know, developers, business folks, uh, you know, it's going to be an amazing resource to help them plan and work on their migration.

[00:03:17] At a high level, you know, just in your own words, can you just summarize, uh, you know, the, the series, tell us what it's about and what you're going to cover?

[00:03:25] Mauricio Dinarte: Uh, sure. Uh, the series is what I like to call a very opinionated guide. And by that, I mean, um, there are multiple ways in which you can tackle a migration, but I will show one very specific way.

[00:03:40] And this is coming from, as you said, like a lot of projects that I have been involved and experienced. So this is, um, my current preferred way of working with migrations. The series starts covering some theory. Um, both from Drupal 7, like how to audit a [00:04:00] Drupal 7 site, and then Drupal 10, like how to prepare for the upgrade and evaluating what is the best, uh, approach to follow, as I said, the Migrate API is one of many approaches and it is my preferred one, but by no means the only one.

[00:04:16] So I try to give you as much information. So you will make an informed decision and hopefully you are convinced to use the Migrate API. And when you do so. Then we go into the example, which, uh, includes migrating configuration and migrating content, multiple entities of each type and general, uh, like gotchas that you might, um, encounter.

[00:04:39] One of the things that we dedicate a full article is how to avoid conflicts when you migrate data. You might have a Drupal 7 site, uh, that has, you know, real data and you are developing in Drupal 10. But while developing in Drupal 10, the Drupal 7 site continues to get updates and new content. [00:05:00] So at some point there might be overlap between Entity IDs and we go over like different approaches to, that you can follow to, to avoid conflicts.

[00:05:11] In addition to that, we go through different examples, not only About how to migrate the data itself, but how to accommodate content model changes. Let's say that you had something that used to be a node, but now you want to, uh, use user entities or you want to leverage layout builder that was not being used before.

[00:05:32] Or you want to change from, uh, a paragraph implementation to a regular node. So if, if you need to make any type of content model change. We're also going to talk about that. Um, if you have content that you no longer need in the new site, like filtering out content, if you need to somehow change, um, let's say from media, from, from regular files in Drupal 7 to using [00:06:00] Media Entities in Drupal 10.

[00:06:02] Um, how to create custom source or process plugins to you know, accommodate different transformations that may be needed. And at the end, we're going to talk about events and hooks and how to, um, debug migrations, which is something that I do every day. Uh, every time that I work with a migration, there will be something that doesn't work as expected.

[00:06:26] So we're going to show you how to debug a migration when something doesn't go, you know, as you wish.

[00:06:35] Michael Meyers: Yeah. You really do cover a lot of bases, you know, even within a single aspect, you know, I mentioned Feeds earlier. Uh, another thing that I didn't think about is manual migrations, right? For a small site, it may not make sense to use any API or, uh, or Feeds module, or maybe for even a small aspect of really large sites.

[00:06:55] You, you, you know, you present people with a lot of great ideas and [00:07:00] options. Um, all the way through to debugging, you know, really complex aspects of migrations and you think you're, you know, debugging and migration aren't like two words, you know, uh, you, you, you might think go together, but the reality is, you know, with data transformations and all these things that are happening as part of a migration, the data migration is very complex and, and, It totally makes sense when you think about it, but it does require, uh, migrations.

[00:07:26] Um, at the top of the show, I mentioned that I think everybody can learn something from this series, uh, but it is without a doubt, you know, a step by step guide to how to, so the primary audience is developers. Um, what level of expertise do I, if I want to follow this along hands on. And use this to, you know, really learn how to do a migration.

[00:07:46] What level of expertise do I need?

[00:07:49] Mauricio Dinarte: Um, ideally you have some familiarity with the Migrate API. I would like to clarify that this series is focused on Migrating from Drupal 7 to [00:08:00] Drupal 10. But this is just one use case of the Migrate API, as I covered in my 2019 series, you can use, um, you know, the same core API to migrate from, um, like hard coded data or Excel or Google Sheet or JSON or XML.

[00:08:18] Or many other different type of sources and many of the things like if you understand the syntax of the API, like of how to write a YAML file, which I'm going to cover briefly, but otherwise explained more in depth in the original series. If you get a sense of what is a source or process of destination.

[00:08:37] Again, I'm going to mention it, but it's not going to be the primary focus of this. This is going to be. Um, you know, as much as possible hands on example of going from going from Drupal 7 to Drupal 10. So as long as you are familiar with that, uh, you should be good to go. And one of the things that I find really empowering about a Migrate API in Drupal 10 is that you need very little [00:09:00] programming knowledge.

[00:09:00] Um, for one, it is written in YAML. So not even PHP is a high requirement. In that original series, I show a little bit of PHP for completeness, but most of the series doesn't involve writing a single line of code. Um, so this one, again, like at least half of it, you can follow even if you don't have, uh, You know, experience with PHP itself and again, we're going to be showing how to write PHP, especially when we talk about custom source and process plugins.

[00:09:33] And when we talk about debugging, but most of the series, you will be able to follow along. And yes, it is, uh, you know, written with developers in mind. But I want to point out a few things. One, I really like to distill content so that anybody can follow it. And by that, I mean, literally anybody, um, if you are a business owner, if you are a small shop, if you are a one person organization that [00:10:00] is doing this type of work, um, there will be something for you.

[00:10:03] And what are you, what I usually do is that. Um, I write for the broadest audience and then I have like technical notes, if, you know, some for, for developers, um, I have just like site notes for, you know, marketers or business owners, there will be, um, you know, information for, Some personas that I would like to highlight throughout the series.

[00:10:28] But, um, in general, if you are curious about migrations, if you want to learn how to do it, um, as long as some familiarity of site building concepts and the Migrate API, uh, that suffices to follow along.

[00:10:42] Michael Meyers: We'll, uh, we'll put a link in the show notes to your original series. Great reminder to check it out.

[00:10:46] There's some awesome background material, uh, that can really help people get the most out of this guide. So if you're going to follow this guide, please make sure to check that out as well.

[00:10:57] So if I am going to follow along and, [00:11:00] uh, do the data migration hands on as a developer, what do I need? Are there, are there prerequisites? You know, do I need to have my own site? Um, a sample site, you know, how do I do this?

[00:11:12] Mauricio Dinarte: Um, we are going to provide, uh, an example Drupal 7 site, uh, and this comes with a DDEV, uh, installation.

[00:11:20] So if you want to follow with the example, you need to have DDEV installed, which, and you will also need Docker. Uh, but other than that, clone the repository, ddev start, and you should be ready to go. Uh, we provide examples, both from Drupal 7, including like all the code, all the files, and all the database that you need.

[00:11:42] And we also provide a Drupal 10 environment. Uh, we did it and this one we divide, we have like the final version with the full complete example that you can use as a reference, but using Git and Git branches, we also like have [00:12:00] like, uh, checkpoints that, you know, if you are starting from scratch and you follow the series, uh, like one article at a time, you can use this branch to like, start from scratch.

[00:12:09] If you want to start midway through the series. Uh, we we're going to make, uh, like a stop. Uh, when we go from configuration migrations to content migrations again, there will be a branch for that, and you can start from there. And at the end you have like the, the complete, um, example and running a couple of commands.

[00:12:29] You, you get the full, the full thing ready.

[00:12:32] Michael Meyers: So in, you know, we, we just talked about the, uh, the previous series that you did in 2019. Uh, it was called 31 Days of Drupal Migrations and you posted one post a day for 30 days, which honestly is just crazy. Um, are you crazy enough to do that again? What's your plan for publishing this new series for the D7 to D10 edition?

[00:12:56] Mauricio Dinarte: Yes. Well, that, that was too much and I learned my lessons. [00:13:00] So, um, you know, back then I basically have full sponsorship for a month. To work only on the series. And even with that, it was tough. So the plan now is to write two articles per week. I think there's going to be a varied cadence in my case to make it sustainable, but also for the reader to be able to follow along.

[00:13:24] Michael Meyers: Yeah. You put out too much, too fast. People aren't gonna be able to keep up. So, um, two weeks, uh, two posts a week sounds like a great cadence. Now, we don't have time to go through everything. You know, you mentioned a lot of things that are gonna be covered in this series, but I think it would be great to give people a sneak preview and dive a little deeper into some of the key topics that you're going to cover. Um, before we do that, I want to talk a little bit more about the DDEV environment. You know, you can provide a local environment with a Drupal 7 site, sample data, the D10 install, which is the migration target. We covered DDEV in a [00:14:00] recent Tag1 Team Talk with Randy Fay.

[00:14:02] It is shockingly easy to use. Um, is the assumption, you know, because it's so easy that anybody can just get up and running with it. Um, you know, are you going to provide step by step setup, installation instructions, you know, what comes along with this environment?

[00:14:18] Mauricio Dinarte: Um, yes, we're going to provide, uh, a Readme and in the Readme, there will be.

[00:14:26] Like for each Drupal 7 and then for Drupal 10, about 10 commands that you should run. And with that, you get everything. I really enjoy DDEV. I've been using DDEV exclusively for the last like three years at least, and it makes developing and debugging and performance testing for Drupal and for other projects for that matter, uh, very easily.

[00:14:47] So, And we have other team members like proofreading and reviewing the work that we've been putting into this. And, you know, we, we found that just like by putting the commands that you need to execute, uh, [00:15:00] assuming that you have DDEV installed, uh, that that's enough. Um, something that I want to clarify is that even though we are providing all of this, Um, you are free to use either not DDEV, uh, you still have access to the Drupal 7 database and file.

[00:15:16] So if you have a different local environment of choice, you can import that into your environment and follow along, or if you want to just like practice this on your own website, you can follow the same techniques, uh, and do it with your, with your real project. Uh, but ultimately you are going to have all the tools and all the resources.

[00:15:37] So that you can have a full example with a repository that we're going to provide.

[00:15:43] Michael Meyers: Dive in and migrate your site with the series. Love it. In the introduction post that I mentioned that I really loved, you take a step back and you discuss, you know, the different components, what makes up a migration, how they factor into it.

[00:15:59] [00:16:00] And the second topic that you cover is a site audit. What is a site audit in the context of a migration? And why is that the first topic after the general intro?

[00:16:14] Mauricio Dinarte: Um, there is a saying that I really like in English. It says, uh, measure twice, cut once. When I present on migrations, I usually say measure twice, cut once.

[00:16:24] Um, and this comes both from my own experience and from seeing other people, um, specifically other people asking for help in Drupal Slack. Sometimes people, you know, come to Drupal Slack and they have a very, very specific question. And they want an answer to that, but they don't take the time either to understand what is going on or to understand, like, if there is a better alternative.

[00:16:52] Uh, so with that in mind, um, I, you know, I take a step back and review the Drupal 7 site [00:17:00] is from a content model perspective. Uh, that includes reviewing all the Content types, how many. Um, Nodes for content types there are? How many of those are published or not. Uh, we have seen sites that, you know, there are 10 years old and a lot of growth has accumulated that people are not interested in moving over.

[00:17:24] So you need to have a clear idea of, you know, what is going to be moved over. Um, and a good indicator of things that are not necessarily are unpublished nodes, but in some cases, uh, especially if you have like publication workflows, you might have a high percentage of nodes that are not published, but are still necessary to be carried over.

[00:17:45] So again, like this is more like an x ray kind of thing. Uh, you review the data and make, uh, you know, some analysis on top of that. In addition to the Nodes, we also review Field types, like what field types [00:18:00] are in use. Uh, we review Vocabularies, we review Files, file types, um, if you're going to be using media, uh, we, we consider like local files, remote files, uh, we review, um, if you're using Paragraph, if you're using organic groups, if you're using rules, basically, um, anything that has the possibility to impact the content model.

[00:18:24] Or some, like, very large code bases that, um, might, um, require some refactoring in, in the new site. Uh, we, we take all of that into account. And even other things that sometimes are overlooked, like, uh, image styles or text formats, um, some of those might have even security implications. So we, we review all of that, and we are actually going to provide A template, uh, like a Google spreadsheet that you can use to fill out and, uh, with some recommendations, uh, of what things to look for.

[00:18:59] [00:19:00] And in one of the articles, we're actually going to use the Drupal 7 site that we have and give you the SQL queries that you can run against the database to fill out, uh, the template.

[00:19:14] Michael Meyers: There's a lot of things that changed from Drupal 7 to Drupal 10. Um, You need to factor a lot of considerations. Um, migrations touch on so many different aspects of the site, handling users and permissions, files, configuration data.

[00:19:31] And your series dives into these, uh, but I want to talk a little bit more about the configuration and data part, because, you know, when you think about D7 to D10, and how much changes, like, I wonder, like, is it really worthwhile or possible to migrate configuration from 7 to 10? Um, can you talk a little bit more about, you know, what you have lined up on that front?

[00:19:54] Mauricio Dinarte: Yes, so the Migrate API in Drupal core supports [00:20:00] two things. Uh, migration of configurations and content from Drupal 6 and Drupal 7. The part related to configuration, this is very tied to the previous questions about, um, you know, what do we want to make an audit with, uh, from Drupal 7. Because you might want to leverage new things that became available in Drupal 8.

[00:20:21] For example, Media in core became available in Drupal 8 and by extension it is also available in Drupal 10. It hasn't been moved out of core yet. Layout builder didn't exist before. You might want to use layout builder. So for one, Um, if you're going to migrate the configuration, which includes content types, uh, which includes, uh, media entities, which includes, uh, vocabularies, uh, organic groups and commerce stores, a lot of other things, if you're going to make a one to one copy, uh, the Migrate API will, for the most part, work out of the [00:21:00] box.

[00:21:00] But if at any point you need to make transformations, as I said before, if you want to go from files to media entities. Or if, if you want to go from one entity to another and to give concrete examples. Uh, in, I, I work on a site sometime ago that was using organic groups in Drupal 7, and it was using the groups module in Drupal 10.

[00:21:20] So even though they are very similar in name. The underlying structure of the entities and the tables is totally different. So you need to be able to accommodate, uh, you know, the data transformations to, uh, from, from one version to another. Um, but, but again, like in our example, we're going to show how to automatically migrate the content types and fields, uh, view modes.

[00:21:44] Um, vocabularies, uh, media, and a few more things. But, uh, one, one thing that we're going to show, but with a catch, uh, is Views because views is [00:22:00] a very, very big topic. There are a lot of things that, um, modules that extend views. And officially, um, in Core or by the Migrate API maintainers, there is no support for Views migrations, but the community has stepped up and there are a couple of modules that provide support and one of them is very complete.

[00:22:22] Um, I have used it to automate, you know, Views migrations and even though it may not get you all the way there, it is a good starting point. So, you know, Views is also part of configuration that we're going to be demonstrating how to migrate.

[00:22:38] Michael Meyers: There are so many different things to cover,

[00:22:41] So migrations involve a lot of complex transformations, potentially, you know, the How-to guide that you're writing is based on the Migrate API, which is by far the most popular approach to doing data migrations. And it's a super powerful and flexible tool that enables you to do all of these things, right?

[00:22:59] [00:23:00] It's the engine that drives data migration. So it's safe to assume that you're going to cover a lot about the Migrate API. Can you give us a sneak preview, you know, with some of the things you are going to touch on?

[00:23:11] Mauricio Dinarte: Yes, as you said, the Migrate API is very big and it will be unfeasible to write everything in 31 days.

[00:23:20] So I will be focusing on the things that I find most useful or more common. The first one would be writing process plugins. And the example about this will be how to merge two fields from Drupal 7 into a single field in Drupal 10. Uh, process plugin is the most common, uh, customization that you need to make.

[00:23:39] So there will be at least one throughout the, throughout the example. Uh, we're also going to go over hooks and events, um, how you can react when these are fired as part of the migration process and the different phases of the migration process, so that you can either alter the data, [00:24:00] or Or like that you are receiving from, um, Drupal 7 or alter the data right before it is being sent to Drupal 10 for storage.

[00:24:10] One thing that I want to highlight here is that the Migrate API is interact with other APIs in Drupal. So, um, you are not writing to SQL tables directly. What you do is you prepare, uh, data that is being passed on to the Entity API. For example, if you are creating nodes. And when you do so, everything that the Entity API does, um, you can have access to that.

[00:24:37] And one of those things, if you wanted, is, uh, enable validation. So, um, validations are sometimes tricky when it comes to migrations. They are very important to, um, to catch, uh, potential data inconsistencies. Uh, but sometimes you get a very obscure error and you just like don't know what to [00:25:00] do about it. So again, like we're going to be distilling some of the knowledge that we have gained over the years.

[00:25:05] So when you see this weird error, oh, this is the reason why it happens. I remember that one of those like things related to validation that was hard for me to. understand was, um, when you have migrations of files and a follow up migration of media, media triggers an error if the file is not, um, stored as permanent.

[00:25:34] And that is a flag in the, in the file entity. So even though I was migrating media entities at this point, my error originated from a previous migration in file. So that, that's not very common that you. have, uh, like validation programs in two different migrations. Usually it will be on only on the one that you're working on.

[00:25:54] But again, like it's that kind of thing that, you know, why is this happening? You need to like research [00:26:00] a little bit and then it makes sense. But other than that, um, as we're going to talk about in this series, the Migrate API is an implementation of an ETL pattern, and we have talked about ETL in depth, uh, in the TTT (Tag1 TeamTalks) talks.

[00:26:15] So, um, again, not to go too deep into that now, but, uh, we're going to show how to write custom source plugins. Uh, we're going to show how to write custom process plugins. And in the case of the destination plugins, it's very rare that you need to write one. Um, so we're just going to mention it. But the example itself is not going to include one destination plugin.

[00:26:39] But yeah, like all of that, how to fetch the data, how to filter out the data, how to process the data, do the transformation that you need for going from um, You know, one potential entity to a different one in Drupal 10. All of that is going to be covered

[00:26:55] Michael Meyers: As well as how to debug and, you know, look into challenges that might arise [00:27:00] from doing all of that.

[00:27:01] Um, so is there a subject matter that you feel is, you know, too often overlooked or something that people don't talk about enough that you're going to shine a light on?

[00:27:13] Mauricio Dinarte: Um, yeah, I would say that debugging, um, debugging, some people think it's complicated. Uh, some people just don't want to try it. And to be honest, after using a proper debugger, I cannot go back, like you get access to everything, like you can access, um, the state of the application, like what variables are available at this stage of the migration and what comes later, like how the transformations go, even if you want, like one line at a time, what is happening under the hood.

[00:27:48] So, um, I, I think that that's one of the best investment that you can do is like, how learn how to debug. And with DDEV, it's literally like one [00:28:00] command in, you know, in the terminal, set up a breakpoint and for the most part it does it for you, kind of magical. So other than that, um, I would say like invest the time and in the series, um, like there will be like articles specific about migration and debugging.

[00:28:20] And other topics will also be included like tips and how-tos some, you know, even performance considerations. So if you are in the. articles of migrating files. There will be considerations about debugging, about performance that pertain to files migrations.

[00:28:37] I, as I talk about nodes, there will be that, yes, there will be some articles that will expand on the topic, but you can expect some, um, you know, part of that, like debugging performance and just like tips, uh, in general, in each of the articles, uh, as they are pertinent[00:29:00]

[00:29:00] Michael Meyers: In you know, 30 plus posts, you're going to cover a lot of topics, pretty much everything that the average site owner means and more, uh, but obviously you can't cover everything, right? You mentioned, you're going to go into views and limited depth and detail. Uh, the migrant API is so massive. You could write a book on it.

[00:29:18] Um, can you give a sense, you know, what won't you be covering in this series and, and perhaps this is where we should have just started. ?

[00:29:27] Mauricio Dinarte: Yes. Um, I will cover most of what Drupal Core provides and a handful of contributed models. That being said, things that I will not be covering are organic growth migrations.

[00:29:41] Um, and mostly because the common operate path is. Going from Drupal 7 organic groups to Drupal 10 groups, and that is going to be very dependent on your use case. So we have done that in the past for multiple organizations and every instance is like [00:30:00] very, uh, like personalized.

[00:30:02] So there is not an easy way to abstract that, um, at least in the context of the example that we are providing. So, uh, organic groups to groups that is not being covered. Something else is rules, uh, rules, and there are Module and that you can get similar functionality. EECA is a very common detailed alternative, but it's the, there is no automatic upgrade path in between the two.

[00:30:27] So, um, for one, no, um, we were not going to cover that. But also, uh, and this is again like mentioned in the articles sometimes even though there might be a module that does something similar. Maybe a different approach altogether, um, suffices. uh, in many cases, when we have rules, uh, in Drupal 7, we review what they are doing and you can accomplish the same thing by writing custom code.

[00:30:55] Um, sometimes they use rules to automatically publish or [00:31:00] unpublish content. There are models that can do that without using rules. There are rules for sending an email. You can do that again, either via models or via custom code. So. That's why an audit is very important because it, it gives you like a better idea of, um, do I need to keep this module?

[00:31:17] Can I use a, an alternative module? Should I write custom code? Like should I follow a different approach altogether? Um, so going back to the things that we are not covering, uh, multilingual content, again, we are going to discuss it. And even some of the examples for nodes, uh, we're going to use what is called a complete migration and the complete migration, uh, moves over the current revision, all the previous revisions and all the translations.

[00:31:48] So even though the site is not multilingual in itself, um, the same procedure will apply if that, if the nodes were multilingual in Drupal 7, they will, like the [00:32:00] translations will also be ported over. But for the context of the example, we will not be covering multilingual migrations.

[00:32:10] Michael Meyers: I would think that, you know, if you follow this series hands on, You're going to have, you know, the ability to tackle a lot of the things that you don't cover as well.

[00:32:21] So I think folks will learn a lot from this series that they could apply to, uh, things that aren't necessarily covered and it would be impossible to cover everything. I keep saying that I think everybody can learn something from this series. Um, so I'm curious, did you learn something from this series, you know, in, in doing this?

[00:32:42] Mauricio Dinarte: For sure. Um, when I wrote the original series. I had an idea in mind, a list of topics, and then literally turn on my debugger and start stripping through the code because most of it I didn't understand. And when you write something, it forces [00:33:00] you to have a deeper understanding, for one, because you want to make sure it is accurate.

[00:33:04] But also because you want to translate that, you know, sometimes very technical, uh, knowledge into something that can be easily digestible, but, you know, by, by anyone. Um, and in general, that, um, there is, uh, a book called, uh, CSS Secrets. The author is Lea Verou and in the preface, she has a quote that I really like.

[00:33:30] _Understanding the process. Of finding a solution is far more valuable than the solution itself. _And that is my ultimate goal with the book. Like, yes, you're going to have a very opinionated example. We are going to write migration files. Literally when you have all the repository and example code in less than 15 commands, you have a full Drupal 7 site, a full Drupal 10 site and all the configuration and the data migrated.

[00:33:59] Yes. [00:34:00] But ultimately my goal is to teach you how to do it, to teach you how to approach a problem that I might not be covering, to teach you how to debug, to give you an idea of, Oh, I need to use a process plugin for this, or maybe this is better suited with a source plugin or, um, Oh, yes, I didn't cover this specific entity type, but I get a sense of how I can go about understanding how it worked in Drupal 7 and I want, what I want to do in the data with Drupal 10.

[00:34:28] So. Yes, my, my goal is more than just copy these commands blindly. It's like, make you think and understand, um, how your Drupal 7 site works, how Drupal 10, uh, you know, could work in your case and basically connect the two points.

[00:34:47] Michael Meyers: I think you do an awesome job of doing that. Every post I've read has said it's, it, you know, it's, it's really technical and in depth, but it's interesting and easy to read.

[00:34:57] Uh, I think that people will get a tremendous amount out [00:35:00] of, uh, reading and following this, even if you're not doing it for the hands on component. Um, data migrations are one of the most complex and costly aspects of any migration project. And so, it's something that I think everyone would benefit from understanding better.

[00:35:15] To ensure that they're, you know, budgeting, scheduling, executing against this component. Mauricio, thank you so much for taking the time to put together this series. I know how busy you are on projects and how much effort it takes to write content of that quality. Uh, really appreciate you taking your time out of your day to join us today.

[00:35:35] Uh, all the links that we mentioned, we'll put them in the, uh, show notes for the talk. Uh, if you like this talk, please remember to upvote, subscribe, and share it with everyone you know. Uh, you can check out our past Tag1 TeamTalks at tag1.com/ttt. That's three T's for Tag1 TeamTalks. As always, we'd love your feedback and input, you know, any topic suggestions you can write to us at [00:36:00] ttt@tag1.com. And again, Mauricio, thank you so much for joining us and everybody who tuned in. Thank you as well. See you next time.

[00:36:08] Mauricio Dinarte: Thank you. See you.