Sector(s)
Visit the site
Visit the siteOrganizations Involved
Community contributions
Drupal core assets optimization: https://www.drupal.org/project/drupal/issues/2407187
Private message scalable database model: https://www.drupal.org/project/private_message/issues/3095101
Migration from private massage: https://www.drupal.org/project/private_message/issues/2948843
Private message autocomplete: https://www.drupal.org/project/private_message/issues/3142633
JsonAPI: Views, allow arguments: https://www.drupal.org/project/jsonapi_views/issues/3115484
JsonAPI: Views pagination: https://www.drupal.org/project/jsonapi_views/issues/3158566
Table field migration: https://www.drupal.org/project/tablefield/issues/3024040
Paragraphs migration: https://www.drupal.org/project/paragraphs/issues/2911244#comment-135686โฆ
Votingapi Widgets: https://www.drupal.org/project/votingapi_widgets/issues/3033770
https://www.drupal.org/project/search_api_solr/issues/2906905
SearchAPI highlight processor: https://www.drupal.org/project/search_api/issues/3110652
Contrib modules: 150
Custom modules: 93 modules of 80K+ lines of custom code.
Users: 600K+
Nodes: 250K+
Comments: 2M+
Private message threads: 6M+
Userpoints records: 6M+
Database size: 50GB
Goals:
- to improve performance;
- to be ready for the end-of-life (EOL) of the outdated major Drupal versions (7, 8, and 9);
- to switch to the latest versions and secure the database / PHP / Apache Solr servers
Steps we went through during the migrations:
1. The first migration was a must: D7 EOL was coming.
It was harder to find developers to maintain D7 version.
There was a lack of modules for the new functionalities, and as a result, the maintenance cost was increasing.
2. Migration plan: analyzed the used contrib modules, checked if the migration path existed, searched for the alternatives for those modules that didn't exist in D8.
3. Custom code migration plan: decided what could be dropped and which architecture changes we could make alongside the switch.
To estimate the approximate timelines of the custom code migration, we decided to migrate one of the biggest custom modules and interpolate the result to the remaining modules.
4. Content migration.
Investigated the amount of data we needed to migrate and the ways it would be migrated.
Forecasted migration scenario: content migration could have lasted for weeks, so we had to be sure that we would not need to re-run it from scratch.
The final migration was about to take less than an hour.
5. Planned server updates.
Weโve got a new, faster server that had everything we needed in D8.
6. Created new testing instances and planned incremental migrations to be able to test migration results on the go.
7. Did the actual migration. A 4-member team finished the project in 9 months.
8. Taught managers to work with the new system.
9. Deployed changes live: disabled the old website access, ran the last chunk of the data migration, configured the new server, switched DNS records, dealt with the names of the cookies.
10. Bugfixes and monitoring
11. Further migrations from Drupal 8 and Drupal 9 were way easier, of course, due to the overall D8+ architecture.
About the project
The site was launched in 2006 and migrated to Drupal 5.2 in 2007. The first mention on Drupal.org was on November 9, 2007 (https://www.drupal.org/node/190567#comment-624803).
In 2009, it was migrated to Drupal 6 and got a D7 version in 2015. However, the biggest and most challenging upgrade was the D7 => D8 migration in 2020. Starting in 2024, the site was migrated to Drupal 10.
When we started the migration to Drupal 8+ architecture, the website was using around 150 Contrib modules and had 93 custom modules (with around 80k lines of the custom code).
At the moment of migration, the site had around 600k+ users, 250k nodes, 2M comments, 6M private message threads, over 6M userpoints records, and a huge amount of data from different other custom and contrib modules.
The total database size was around 50 GB.

A part of the critical modules didn't have the migration path (like privatemsg or userpoints) or had to be completely replaced (Rules).
We had to perform the upgrade keeping all the old functionality with the minimum possible downtime. We needed to rewrite existing custom modules using D8 APIs, find replacements or create them for those D7 modules that didn't have versions in D8.
Write custom migrations for the modules that didn't provide built-in ones. The D8 version had to be able to handle the same load (up to 60k users daily) with the same speed. We achieved all the above goals, even on the release time we didn't have all the functionality migrated.
It took 2 months to settle down all migration issues, but as a result, with the help of the Drupal 8 caching mechanisms, we reduced the server load and improved site speed.

Why Drupal was chosen
Drupal was chosen by Patrick Curtis (the site owner) in 2006 for reasons he mentions here
https://www.wallstreetoasis.com/blog/my-first-blog-post-december-24-2007
Technical Specifications
Drupal version:
Key modules/theme/distribution used:
The core of the site is a forum. Selected modules enhance the forum functionality