Selecting Symfony (https://symfony.com/) as your web app framework is like deciding the orchestration for a major musical composition that you’re about to commission. The orchestration – the set of musical instruments – determines the composition of your orchestra. Given the orchestra, composers know the musical opportunities that are available for them, the same way as developers understand what to expect after the Symfony framework decision has been made. The differences between orchestrations are more about _how_ things are done than about _what_ can be done. For example, all kinds of orchestras can play both softly and loud although the scores would look very different. Correspondingly, all major application development frameworks can generally implement the same features with only code-level and architectural differences.
Selecting Symfony as your application framework
What a Symfony project entails is clear to experienced Symfony developers but not so obvious to the project owners and other non-developer stakeholders. Going through the major points will also serve as a reminder for those developers who are considering other frameworks, not as a sales pitch but as points of comparison.
Active development implies support for the latest technology and protocols without a long delay. For example, support for the new PHP version (PHP 8) has been included in Symfony releases months before the official release of PHP 8 which was 26 Nov 2020. It also means that new minor versions are released frequently, which might add some maintenance overhead to the developers. But as a fair argument, we can state that the maintenance of a web app should be considered equally important to the actual development of the app.
Documentation on every version of Symfony has grown to extensive amounts, thanks to the active developer community. Both official and unofficial websites contain documentation about the technical features and APIs, complete examples of features as they should be implemented, sometimes including educational material that goes far beyond the Symfony code. Not only does well-documented technology speed up the development, but it also makes it faster for the developers to learn.
The official documentation is available at : https://symfony.com/doc/current/index.html
15 years of experience
Maturity is sometimes under-rated in favor of directing new projects towards fresher and more modern options but there are days when the real value of a mature technology materializes. Version upgrades are good examples. Code migration from a version 1 to version 2 is sometimes similar to migrating to a whole different development framework, which is why AngularJS developers dread the end of 2021: it is the end of long-term support for AngularJS version 1 and the due date of the inevitable choice between a comprehensive code migration and outdated software. Looking back, Symfony 2 was also a complete rewrite of Symfony 1. As the version numbers increase, the changes between versions gradually get smaller and the migrations become smoother. The current Symfony version, Symfony 5, has evolved a lot from the first major versions but is still quite similar to Symfony 4. It is safe to assume that the major architectural overhauls are behind and that maturity also spells out as reliability in that the code written today will not be broken by the next few version upgrades.
One of the largest developer communities
A large developer base serves as a promise for the future of the framework. University students typically have a short period of time to learn as much about PHP as they can, which translates into learning a single development framework, at most. If given a choice, they have a reason to select a popular one in order to improve their chances in the job market, but it might as well be the choice of the lecturer who understands the high demand of Symfony developers. Being a widely-used framework also comes with other benefits. Bugs and shortcomings in the code are noticed and fixed, which is good for code quality, whereas support is provided by the online community as numerous Symfony experts frequent QA forums and discuss issues related to Symfony.
Almost needless to mention, but along with Symfony comes PHP. Having a 25-year history and a fresh major version recently published, all the points above also apply to PHP which is the actual programming language of Symfony.
Thousands of Symfony libraries
Packagist (The PHP Package Repository) lists thousands of Symfony packages (called “bundles” in the Symfony world) available for you to download and use. All of these are open source and each answer a specific concern, most can easily be added to any project to immediately include new features to a project. Examples of libraries we use on many of our projects include :
- Sylius: An open source eCommerce platform based on Symfony
- Api Platform: a library to generate REST and GraphQL APIs automatically from database entities
- Alice: a fixtures generator to automatically create fake data to use during development
- Vichuploaderbundle: A simple Symfony bundle to ease file uploads to the server.
- Liipimaginebundle: a Symfony Bundle to assist in imagine manipulation using the imagine library
- and so many more…
Hiring the right developers for your Symfony project
What is true about a good orchestra is often true about a good team of developers: both consist of team players with the right kind of skill sets and experience. Whether you outsource the development to freelancers or web agencies or hire your own in-house developers, the challenge is the same: how to identify the right people? Assuming that we have a pool of decent programmers and IT professionals, what are we looking for in order to pick the most suitable ones?
Overall understanding of web application projects
Symfony skills and experience are always important but they should not be the only criteria in candidate selection. As Symfony is a framework for the backend of a web application, skills in database design and data modelling are at least equally important. If you plan to have your app used by thousands of registered users, the basic database design has a major effect on the development cost and lifecycle of the app. Getting the entities and relationships right so that the data model corresponds to the data flow of your business application is just as important as the implementation environment on top of them. Anecdotally, poor database design manifests as an app that looks like a hack over another hack, fixed by a third hack, in a serious need of so many more fixes that eventually more developers need to be hired. If the new developers are Symfony experts, they will face a nightmare trying to build something functional on a weak foundation. The best solution would be a thorough refactoring of the data model which is a costly operation and only makes sense with an experienced database engineer. It is therefore critical to have the right people making good decisions right from the start of the project.
Full-stack development capabilities
Front-end skills are useful but not necessary. Of course, we want our website to look nice and we might even care about the quality of the user experience, but the lack of any front-end skills should not be a reason to dismiss any good developer. A learn-as-you-go attitude is often enough. A solid Symfony back-end makes the front-end development straightforward whereas the quality of the front-end implementation has little effect on the back-end code. Also, a remake of the front-end of a Symfony app does not require a refactoring of the Symfony back-end so it is not uncommon to hire front-end specialists for the task.
As far as Symfony experience goes, there are different kinds that represent different levels of expertise. For the most, it only means the development of web apps on top of the framework, but some have taken the next step and made contributions to the Symfony code itself. This is not to say that Symfony contributors inherently write better code than other experienced Symfony developers but they might ask for and deserve a higher pay for their higher ambitions and a deeper understanding of the Symfony internals.
Now that we are ready to make the decision to have a Symfony app satisfy our development needs, what kind of an orchestration are we choosing? In other words, which type of orchestra corresponds to the Symfony framework? Given that Symfony follows the classic web design pattern called Model-View-Controller (MVC), we will narrow our choices down to classical music orchestras. Then, considering other factors such as scope, potential, and capabilities, our obvious choice is the namesake: a classical symphony orchestra.