Things I Wish I Had Known About Drupal When I Started

A no-nonsense, battle-tested list for new (and not-so-new) Drupal developers in 2025. These are the lessons that would have saved me hundreds of hours of pain.


1. Drupal is a Content Modeling Tool First, a CMS Second

Most people treat Drupal like WordPress. That’s the fastest way to hate it.

Key mindset shift: You are building a data model (entities, fields, bundles, paragraphs, layouts) and then letting Drupal render it. The sooner you embrace “configuration over code” for content structure, the happier you’ll be.

2. Never, Ever Hack Core or Contrib Modules

I did this in 2012. I still have nightmares.

Rule #1 of Drupal: If you find yourself editing files in /core or /modules/contrib, stop immediately. Use a patch, a hook, a plugin, or a custom module instead.

3. Learn the Configuration Management Workflow Early (Drupal 8+)

# Export
drush config:export

# Import on another environment
drush config:import

# See differences
drush config:status

Doing this from day 1 saves you from the infamous “it works on my machine” hell.

4. Use Composer Properly – Not Just for Installing Drupal

Bad (what most beginners do):

composer create-project drupal/recommended-project

Good (what you should actually do):

composer create-project drupal/recommended-project my-site --no-interaction
cd my-site
composer require drupal/ctools drupal/token drupal/pathauto

Never download modules from drupal.org as zip files ever again.

5. Entities > Nodes

Stop thinking everything has to be a “node.” Use custom entities (or even config entities) when appropriate.

6. Paragraphs vs. Layout Builder vs. Blocks – Know When to Use What

FeatureParagraphsLayout BuilderCustom Blocks
Reusable across contentYesNo (per entity)Yes
Per-node/section layout controlNoYesLimited
PerformanceMediumLowerBest
Editor experienceGreatExcellentBasic

My rule of thumb in 2025: Use Paragraphs for reusable components, Layout Builder only when clients demand per-page freedom (and you have cache aggregation).

7. Cache Tags, Cache Contexts, and Render Arrays Are Your Friends

If your page is slow and you’re not using cache tags, you’re doing it wrong.

$build = [
  '#markup' => $text,
  '#cache' => [
    'tags' => ['node:123'],
    'contexts' => ['url'],
    'max-age' => Cache::PERMANENT,
  ],
];
return $build;

8. Drush and Drupal Console Are Still Essential in 2025

# Clear cache
drush cr

# Update database after code changes
drush updatedb -y

# Enable a module
drush en module_name -y

# Generate a custom module (Drupal Console)
drupal generate:module

9. Use Modern Tools – Forget FTP

10. The Single Most Underrated Module: Admin Toolbar

Install Admin Toolbar on every site. It turns the default admin menu from unusable to bearable.

11. Twig Is Amazing – Stop Using PHP in Templates When Possible

Bad (Drupal 7 style):

<?php print $some_variable; ?>

Good:

{{ some_variable }}

Also: learn without, filter, Twig Tweak module, and drush twig:debug.

12. You Don’t Need Views for Everything

Views is incredibly powerful, but sometimes a simple EntityQuery or a custom controller is faster and cleaner.

13. Always Use Strict Types and Modern PHP

In every custom module’s .services.yml and classes:

declare(strict_types=1);

Drupal 10+ runs beautifully on PHP 8.2 with attributes, enums, and readonly classes.

14. The Community Is Still the Best Part of Drupal

15. Adopt the latest techniques

(Contributed by u/Stunning_Divide4298)

Do not resort to just what you know. It makes your life easier in the future. Example: Building a new theme today? Learn and use single directory components.

Final Thought

Drupal is not hard. It’s just different. Once you accept its philosophy (entities, dependency injection, configuration management, hooks/plugins/services), it becomes one of the most powerful and flexible systems on the planet.


Written by a Drupal developer who’s been burned by every mistake above — so you don’t have to be.