Drupal can be used for projects of any size -- you can use it to throw together a prototype of a small community site in a weekend, or follow community best practices to create an enterprise information system that serves 10,000+ users. The software make it possible to build almost any system you need, and the community-supported modules typically provide you with 60-80% of the features you need without having to write custom code. The Drupal community, and the community-driven development process, is one of the strongest open source communities you will ever find. The structure provides you with the information and support you need when you need it, while providing a way for you to contribute back whenever it is convenient for you. Often, when you have an issue, you can find a patch that others have contributed for you to get by while an official fix is prepared.
While Drupal can make hard things easy, it also has a tendency to make easy things hard. Community-provided Drupal modules often provide you with 60-80% of what you want, but in order to get your project working in a way that fits your requirements (or your customer's requirements), you have to write custom modules or patch bugs on your own. Sometimes to fix something that isn't working, you have to dig into parts of Drupal core or community modules that are terse and difficult to understand long sections of code that need refactoring. Often an issue you need fixed ends up being a known issue for which the community has been debating "the right fix" for several years. If you don't adopt best practices regarding source control, features, patch management, and staying up-to-date with new versions, you can end up creating a project with a lot of technical debt that is difficult to maintain without a large team.
Consider whether you just need a blog or single use-case system versus a full-blown information system. Drupal is not a good fit for single-user or single use-case sites because it requires a fair amount of time to setup to work the way you need. WordPress, Shopify, and Strikingly are all good platforms for smaller, simpler sites like those.
Conversely, if you do need a more custom or complex system, Drupal is a wonderful fit, if you're willing to put in the time to do things right. The more time you put in, the better the result. This includes:
- Taking the time to get to know the community.
- Adopting the recommended best practices for change management, and making extensive use of revision control.
- Whenever possible, keeping site structure and logic in code that you can commit to GIT rather than in the database. Content belongs in the database; structure belongs in code.
- Never hacking core code or module code, but being ready to adopt a patch management process when you do need to apply short-term patches until a full fix is ready for issues.
Drupal provides us with a way to build large, multi-user information systems without having to implement common functionality of user management, content management, or core architecture. It frees us to focus on the business problem at hand rather than on the low level architecture. It also provides well-defined interfaces between modules that ensure that most modules we find out in the community will work with other modules we use or write from scratch. Finally, Drupal provides a wealth of best practices and extension points to allow us to scale up what we build as our user bases scale.