If I had to find a movie title for a Drupal review of the past year, then I'd choose "2016 - the dawn of Drupal" because it was the first full year of Drupal 8, and D8 is really a game changer!
There is already a huge number of blog posts describing the improvements and new features in detail, so I'll only mention the most important ones that imho pushed the system to the next level. As we at agoradesign fully switched to D8 for new projects in autumn 2015, when rc1 got released, I'm already used to lots of smaller improvements that I may would forget them anyway, like Views, CKEditor and Migrate in core and many other things, as well as bigger improvements like full multilingual support in core.
Symfony and the Drupal community: the heart and brain of the revolution
The most important and fascinating change is of course the new fully OOP based architecture on top of Symfony. I'm using Drupal for about seven years now. Some reasons why I chose Drupal: the clean and homogeneous code base, the great flexibility and extendibility, the transparency and of course the great community, where people are actually working together to solve problems and code modules instead of having a horde of lonesome cowboys like many concurrent CMS have. Especially the last points are leading to an average high quality of the contributed modules, which is really an outstanding characteristic in comparison to other OOS. However, before D8, you had to have some self-discipline to structure your code base of more complex modules well. Now in D8, you are already guided automatically guided into the right direction to have a well structured, readable and testable code base. It has never been so easy to write unit tests!
And it has never been so easy to write your own entity types! That's so great and so cheap now. You can write custom classes with well named getters and setters and additional functions you need and get the all the stuff like administration UI, Field API, permissions and many things for free. We have used this a lot in the past projects - from event entities for an event/course calendar to custom price determination factors in an online shop.
My origin as developer is Java, a strictly typed OOP language. Coding PHP was sometimes very irritating at first, mainly because it is not strictly typed at all and tolerates different kinds of small mistakes and sloppy coding style. And I was missing frameworks like Spring framework at first, which is also in wide areas a kind of an educational book for software architecture. I was missing things like Dependency Injection containers especially when writing unit tests or very custom requirements needing exchanging core logic. But over the years PHP improved and matured a lot. And so did the frameworks. And finally so did Drupal. Therefore coding in 2016 changed for me personally to an old school style, in a positive - Java and Spring style - meaning ;)
Composer + CMI + Drush/Drupal Console = easy deployment and maintenance
The next big important changes are the full Composer support and the new configuration system (CMI) of Drupal 8. With Drush Make Drupal had its own simple dependency management tool long before Composer was born. But the Composer of course is far more powerful and it became industry standard over the last years. And supporting Composer was a must-have feature to stay competitive. And it's so great having this now. It makes managing projects so much easier.
And there's the new configuration system including the possibility to export and synchronize to whole site configuration between different environments (eg. development, staging, live). It was never so easy to extend and maintain a Drupal installation and keep different environments synchronous. In combination with the great DrupalVM project that means that there are absolute no obstacles in having an ideal development workflow that includes developing on a local environment and pushing changes to a staging and/or live environment on the server. And you have all the site's configuration versioned in your Git repository. If that isn't great news, I don't know.
No matter, if you want to update modules or add new features. After finishing the development on your local machine, you only have to upload the changed composer files and the changed configuration yml files and then only have type at max four CLI commands to push your changes to the live site within seconds:
composer install;cd web;drush updatedb --y;drush cim --y; Ok, maybe you need an additional "drush cr" to clean the caches, but that's it. Isn't that great?
Last but not least: the new Cache API and BigPipe
One last thing to mention is the new Cache API, which is really a masterpiece! Instead of fully caching pages and blocks, every render array, every entity, etc can has its own caching information (contexts, tags, max-age) and only the necessary pieces will be reloaded instead of flushing whole pages, etc. Even better, this is the perfect base for the next great feature, which is already in core - currently marked as experimental but will be marked as stable with the current code base in 8.3: BigPipe. BigPipe will make your sites fly. Shortly described: for authenticated users, it will deliver the cheap and highly cached parts of a page immediately with the response and use placeholders for more expensive, e.g. non-cacheable parts of the page, and reload these parts via Ajax. This results in a rapid response times, letting the user see almost the full page immediately, and only the "expensive" parts with some small, often not recognizable delay.
The next steps
In 2017, we will hopefully see soon the next important, currently missing things in Drupal core: a more sophisticated media management (there's already great work done on this), HTML email support in core. We'll also see more improvements towards integrating other systems and headless Drupal. We will see improvements regarding the editor experience. And towards performance I'm curious if we'll see RefreshLess in core soon, the next masterpiece of BigPipe's father Wim Leers. I'd also like to see Metatag and Redirect in core, although I don't think that this would happen before D9. And of course we'll see the continuing growth of third-party modules. And one very important thing we will see for sure in 2017 is a stable and full release of Drupal Commerce 2 and especially a huge growth in Commerce's ecosystem of third party modules. But this we'll be the topic of my next blog post coming up soon...