Working with the symfony Community
by Stefan Koopmanschap
There are many reasons to work with Open-Source software. Being able to see the source code is one. The software is often free. But one of the most important reasons to choose Open-Source is the community. There's all kinds of communities around Open-Source projects depending on the project. The symfony community is generally described as being open and friendly. But how can you get the most from your relationship with the community? And what are the best ways to contribute something back? In this chapter I want to introduce you to the symfony community and the ways to work with it. Both individual people and companies will be able to get some inspiration for the best way to interact with the community and get the most out of it.
There's many ways to get something out of the symfony community. Some ways are so integrated into the usage of symfony as a framework that you might not even consider that it is actually only due to the community that you can do that. The main thing, of course, is using symfony itself. Even though symfony was initially developed by a company and still has a strong backing by Sensio, the framework would never be where it is today without a strong community backing it as well. So let's see how you gain from the community, besides the framework itself.
Every developer, especially developers just starting out with the framework, will get to a point where they have no idea how to proceed. You're stuck at a point where you're just puzzled on the best way forward. Luckily, symfony has a very friendly community that will help you out with just about any question you might have. There are various ways to get your answers, depending on your preference. The basic concept is usually the same though: You ask a question and most of the time, you get a speedy answer.
Before asking a Question
Before you ask a question using one of the below methods, it is best to first look for the solution yourself. You can of course use Google to search the wider web (and you should!) but if you want to search a bit more specific, the archives of the different mailinglists, especially the symfony-users archives, are a good place to start.
Asking a Question
It is important to know how to ask a question. It may sound simple but it is actually important to first think about what you're asking. Also, make sure you have checked the existing documentation to see if your question has already been answered. There are some general considerations that will help you get a better response:
Think about your question. Make sure you formulate your question clearly. State what you are doing (or trying to do), what you are unable to do, and make sure to clearly mention any errors that you are getting.
Offer a short history of things you've tried. Reference the documentation you used to try to solve the problem, the possible solutions you found while searching the web or the mailinglist archives, or any of the things you tried while trying to solve the problem
There are several Google Groups around symfony for different purposes. These mailinglists are the premier way of getting in touch with users and developers of symfony. If you are working with symfony and looking for support on a problem you have, then the symfony users is the place to be. The subscribers to this mailinglist are a mixture of regular symfony users, symfony beginners and most of the symfony core team. For any given question there is usually someone that is able to answer it. There are several other lists for other purposes:
symfony-devs: For discussions on symfony core development (not for support!)
symfony-docs: For discussions on symfony documentation
symfony-community: For discussions on community initiatives
With any of these mailinglists, you should keep in mind that they are less direct in their nature than other means of communication such as IRC. It can take hours or even up to a few days to get the response you are looking for. It is important though to be responsive on any additional questions people might have and not be too impatient.
Opposite to IRC, you should give as much background information with your question. Information on configuration, which ORM you use, what kind of operating system you are using, which possible solutions you tried and what failed. Any code samples can be included in the e-mail, to give your problem as much context as possible which may lead to the solution.
IRC is the most direct way to get answers because of its real-time nature. Symfony has a dedicated channel called #symfony on the Freenode network where on any given time during the day many people hang out. Be aware though that even though the channel may have over 100 users present, often many of these people are at work and don't constantly check the IRC channel. So, though IRC is real-time in nature, it can sometimes take a while to get a response.
The nature of IRC does not really allow for the displaying of big blocks of code and such. So describe your problem in the IRC channel, but if you want to show blocks of code or contents of configuration files, be sure to use sites like pastebin.com and only reference the link in the IRC channel. People often see the pasting of blocks of code as flooding the channel. This is not appreciated and you might have a harder time getting an answer.
When asking a question in IRC, pay attention to the response you get. Be responsive to any additional questions you may get about your problem. Be aware that sometimes people in the IRC channel may even question your whole approach to the problem. Sometimes they may be right, sometimes they may judge your situation incorrectly, but make sure that you answer their questions and describe your situation when people ask for it. They won't know your whole project layout and so may make assumptions that prove incorrect once you explain it more clearly. Don't feel offended by such things: The people in the channel are only trying to help you.
When the channel is a bit busy, make sure you prefix any answers to specific questions with the name of the person you are answering a question to. This will make it more clear who you are talking to for those asking the question but also for those in other conversations; they now know that they can ignore your message because it is not a part of their conversation.
This is something we all seem to take for granted, but needs to be said: The whole symfony codebase is one big community effort. There's a lot of time in there from Sensio and Fabien specifically, but even their work is community work because, by releasing it as Open-Source, they've shown their heart for the community. But all the other developers that also work on either writing new functionality of supplying bugfixes are doing this for the community. So when you are working with symfony (or any other Open-Source project for that matter) be aware that it is thanks to the community that you are able to use the software.
Symfony has a very extensive plugin system, which allows you to easily install external plugins into your symfony project. The plugin system is based on the PEAR installer and channel system, and is very flexible. Aside from the plugins that are included in the symfony distribution, there is a huge amount of plugins that have been developed and are maintained by the community. You can go to the plugin site and browse through the plugins based on categories, ORM used, symfony version that is supported and also search. Thanks to the work of the community you can find plugins for a lot of the common functionality you find in today's web applications.
Aside from interacting with the community through digital means as described before, you can also communicate with the community at conferences and other events. Most of the PHP-related conferences and even some conferences aimed at a wider audience than just PHP have some symfony community members attending or even presenting. It is the work of these community members that will help you learn from your peers at these conferences. There are events that are completely built up around symfony. Some great examples of those are Symfony Live, Symfony Day and SymfonyCamp. All these events have the backing of a company but most of the work is a community effort, and by attending such an event you can learn a lot about symfony and get in touch with those key community members that can help you a bit further when you're stuck somewhere. If you have the opportunity of attending such an event, it is definitely recommended to do so.
Aside from the above conferences, there is also a growing amount of symfony user groups around the world. These user groups usually don't have any company backing, but are just a gathering of symfony users on a regular basis in a specific area. It is very easy to go to one of these gatherings, the only effort it takes is to show up at one of the meetings. These meetings will allow you to build up a network of symfony-related people who can help you with symfony problems, might have a job for you if you're looking for one, or know a developer that is available when you need one.
Being present in the community, being seen by people, talking to people, perhaps also becoming more active in the community, will allow you to build a reputation. At first, this may seem useless except that it is a nice ego boost, but you can gain much more from that reputation. When you're looking for a job, and notify the community of the fact, often you will get contacted by one or two people to see if you fit their job opening. But once you've started building a bit of a reputation, the amount of offers you get may grow and the positions may also become more interesting.
Similarly, when you are looking for developers and notify the community about it, you may get a few responses. As your reputation in the community grows, the amount of responses may grow and you may even be able to pick from some of the bigger names in the community for your job opening.
Any community works only as a give-and-take system. If there was no one to offer something to the community, there would be nothing to get from the community either, and the community would not exist. So as you get something from the community, it might also be good to think about what you can do back. How can you help the community be a better community and grow? How can you contribute to the existence and strength of the community? Let's go through some ways you might be able to contribute.
As described earlier, the forums and mailinglists are a place where you can get support. You can get answers to your questions, suggestions on how to solve problems, or feedback on a specific approach you've taken for your project. And even though you might have just started out with symfony, as you're getting some experience with symfony, you might be able to answer the basic questions of other starting symfony users. And as you grow more experienced with symfony, you'll be able to answer more advanced questions and join in discussions of such issues. Even simply offering a direction a user may want to look into can help people find the solution to their problem. Since you might already be subscribed to a mailinglist, adding your expertise is a small amount of effort that will help others.
More direct communication around symfony is done on IRC, as described before. Just as with the mailinglists, if you're hanging out in the IRC channel anyway, you can scan it every once in a while for questions that you might be able to answer. There is no need to keep a constant watch on the IRC channel, most people in the #symfony channel don't keep a close watch all the time. Instead, when they need a short break from their work, they switch to their IRC client, check what discussions are going on, and try to give their input in an effort to clarify any issues, help people or simply discuss a specific feature. Being present in IRC, even though you don't directly check the channel every minute, also allows people to "highlight" you by mentioning your nickname. Most IRC clients will then notify you of the highlight, and you can then respond. This will make you more approachable by the community if they have a question that they know you might be able to answer. So even when doing nothing, you are doing something useful: Being available.
Probably the easiest way for people who work with symfony to contribute is to actually contribute some code. Since symfony users are all developers, this is the most fun way to give something back to the community. There are several ways of contributing code. Below if a list of ways to do that.
It can, of course, happen that while working with symfony you run into a bug. Or, perhaps you want to do something, but find out symfony does not offer the specific feature you would like to use. Working with a patched version of a framework is not recommended since it might be a problem as soon as you update the version. Also, you might forget about the patch and run into problems later. And, especially when you run into a bug, it is good practice to notify the framework developers of the issue. So, how can you actually do this?
First of all, the changes need to be made to the symfony code. The framework files should be altered to fix the bug or add the behaviour. Then, assuming the changes are done in a Subversion checkout of the symfony code, a diff can be made of the changes done to the symfony codebase. With Subversion, this could be done by issuing the following command:
$ svn diff > my_feature_or_bug_fix.patch
This command should be issued in the root of the symfony checkout, to ensure all changes that were made in the symfony code end up in the patch file.
The next step would be to go to the symfony bugtracker. After logging in, a new option appears to create a new ticket. When creating a new ticket, make sure to fill in as many fields as possible, to make it easier for the core team to reproduce bugs and/or know what parts of symfony are affected.
In the "Ticket Properties" box, make sure to select the right version of symfony the patch was based on. Additionally, when possible, select the component of symfony that is affected by the patch. When there are multiple components affected, select the one that is most affected and make sure to mention in the "Full Description" field which parts of symfony are affected.
Important to note is that the "Short Summary" field should contain the prefix [PATCH] when a patch is attached. At the bottom of the form, make sure to check the checkbox to indicate there is a patch file to attach to the new ticket.
Hacking into the framework core is not for everyone. But symfony users work on symfony projects that contain custom functionality. Some functionality is very specific to a project so won't be very useful to open up for others to use, but often a project contains very generic code that could be of use to others. It is a best practice to put a lot of the application logic in plugins to be able to reuse them easily, at the very least, internally in the organization. But, given the code was put into a plugin, it is also possible to Open-Source it and make it available for all symfony users.
Contributing a plugin to the symfony community is quite easy. You can read the documentation about how to create and package the plugin and upload it to the symfony website. The symfony site allows plugin developers to use a full set of tools to publish through the symfony plugin channel server and also to host the plugin source in a Subversion repository on the symfony server so that other developers can access the code. When considering opening up a plugin, this is the recommended way of publishing the code. This is much easier than managing a Subversion server and PEAR package server and creating the documentation to explain to users how to use the custom systems. Adding a plugin to the symfony plugin system will automatically make it available to all symfony users without additional configuration. Obviously though, it is still possible to create a PEAR package server and have users add that to their projects to install plugins.
One of the very strong parts of symfony is its documentation. The core team has written a lot of documentation on how to use symfony, but a big part of the documentation is also there thanks to the community. There are also joint efforts of the core team and the community, such as the work on the Jobeet tutorial. Documentation helps new people learn symfony and also helps as a reference for experienced developers, so it is very important to have good documentation. There are several ways of contributing documentation for symfony.
Write on your Weblog
Sharing experiences and knowledge on symfony is very important for the community. Especially when running into something that is hard to figure out, sharing it with the community is a good thing to do. Other people may have the same problems and might be using a search engine to find out if other people have had similar issues. Having some good search results will help solve their issue much faster.
So when writing a blog post, the topic does not need to be a generic introduction into symfony (of course it can be!), but can be about experiences with the framework, solutions to problems that were encountered while working with the framework, or a cool new feature of the latest version.
Anyone writing about symfony can add their weblog to the symfony bloggers list. All weblogs on this list are syndicated on the symfony community page. There are some guidelines however: A symfony-specific feed is requested so that all content on the community page is symfony related. Also, please don't add anything other than weblogs (so no twitter feeds for instance).
People that are more comfortable with their writing can take writing one step further. There are several PHP magazines around the world as well as many computer magazines that allow people to propose articles. Articles for such publications are usually more advanced, more structured and of higher quality than the average blogpost, but are also read by many more people.
Most publications have their own way of accepting article submissions, so check with the magazine website or in the printed magazine to see what steps to take to submit content to the magazine.
Aside from magazines, there are other places where articles are usually welcomed. For instance, websites of PHP usergroups or symfony usergroups, generic web development websites, and other online publications often appreciate articles with good content that can be published on their website.
Most people doing PHP development these days will be familiar with the English language. However, for many people it is not their native tongue making it hard for them to read extensive technical content. Symfony promotes the translation of documentation and supports it by offering write access to the documentation repository for translators and publishing translated versions of the documentation on the symfony website.
Translations of the documentation is mostly coordinated and discussed through the symfony docs mailinglist. If you are interested in helping with translating the documentation to your native language, this would be the first place to check. There is a chance that there are multiple translators for a language, in which case it is very important to coordinate efforts so as to not duplicate any work. The symfony docs mailinglist is the perfect place to start your translations efforts.
Add Content to the Wiki
A wiki is one of the most open ways of documentation on any topic. Symfony has a wiki where people can add documentation. It is always good to get more new content on the wiki. However, it is also possible to contribute by looking at the existing articles on the wiki and correcting and/or updating them. Aside from new articles, there are also old articles that have outdated examples or may even be fully outdated. Helping to clean up the existing content on the wiki is a great way to make it easier for people searching through the wiki to find the right content.
If you want to get an idea of what kind of content is on the wiki or get some inspiration for content you want to write, just have a look at the wiki homepage to see what is already there.
Writing is a good way of sharing knowledge and experiences. The content is available to a lot of people and is searchable. However, there are more ways to get your experience and knowledge across. One good way that many people appreciate is by doing presentations. You can do presentations in many different settings and for many different audiences. For instance:
- At PHP/symfony conferences
- At local (PHP) user group meetings
- Inside your company (for your developer colleagues)
- Inside your company (for management)
Depending on the location and also your target audience, you will have to adapt your presentation. While management will not be interested in all the technical details, the audience at a symfony conference will not need a basic introduction to symfony. Take your time to pick the right topic and prepare a presentation. Have the slides reviewed by someone else and, if possible, do a try-out of the presentation for some people who can and will give honest feedback: not just praise, but also criticism so you can improve your presentation before you do it for real.
Additional help on preparing and doing presentations is always available on the symfony community mailinglist, where experienced speakers as well as regular conference visitors will be able to help with tips, tricks and experiences. Also, if you don't know of a conference or user group where you could do your presentation, you can subscribe to the mailinglist to get updates on Call for Papers of conferences or contacts with usergroups.
Aside from doing presentations on existing conferences and meetings, you can also organize something yourself. It can be very small or very big. It can be aimed at the worldwide community, or just your local users. It can even be part of an existing event.
One example of this was the ad-hoc symfony update meeting that was held at the PHPNW conference in 2008. This all started on the Twitter and IRC backchannel for the conference, where several symfony users had some questions on what symfony 1.2 would be like. Eventually a room was arranged thanks to the organization and during one of the breaks between sessions, a group of approximately 10 people gathered to get an update of what symfony 1.2 would all be about. It was small and simple yet very effective as those present got an idea of what to expect in the (at that time) new version of symfony.
Another great example is the organization of community conferences such as SymfonyCamp and SymfonyDay Cologne. Both symfony conferences were organized by PHP development companies working with symfony and trying to give something back to the community. All of these conferences were well-visited, had a great speaker schedule and had a very nice community feel to them.
It was mentioned before that not everyone is able to understand a lot of technical content in english. Also, it can sometimes be nice to not only communicate online about symfony. You can also become locally active. A good example for this is local symfony user groups. Over the past year, there have been several initiatives for the starting of new user groups, and most have by now organized several get-togethers for people interested in symfony or working with the framework. Most of these events are very informal, free, and are completely community-driven.
The earlier mentioned symfony community mailinglist is a great place to look for an existing usergroup in your area, as well as the place to initiate a new symfony usergroup. There are members and organizers of local symfony usergroups on the list that can offer their help with starting a new local usergroup and getting organized.
Aside from the physical activities you can organize locally, you can also try to promote symfony in your region on-line. One good example is by starting a local symfony portal. A good example of such a local portal is the Spanish symfony portal, which has regular updates on what is happening with symfony posted to the website in Spanish. The site also provides extensive Spanish documentation, so it is a great way for Spanish developers to learn symfony and keep up-to-date with the new developments around symfony.
The core team is of course also a part of the community. The people that are in the core team all started out as users of the framework and due to their involvement in one way or another became a part of the core team. Symfony is a meritocracy, which means that if you prove your skills and/or talent, you might be able to become part of the core team as well.
A good example of this is the joining of Bernhard Schussek. Bernhard joined the core team after his fantastic work on the second version of the Lime testing framework and having submitted patches consistently for a long period of time.
Now that you've heard what you can get from the community and how you can contribute, it might be nice to have a short overview of the starting points for getting involved in the symfony community. Use these to find your way around the community.
The symfony-community mailinglist is a mailinglist where members can discuss ideas for community efforts, join community efforts currently being executed, and throw in anything community-related. If you want to join one of these efforts, simply reply to the discussion about the effort. If you have any new ideas that might be useful for the symfony community, you can post them on this list. If you have questions about the community or the different ways of communicating with the community, this is also the place to be.
The "How to contribute to symfony" page
For quite some time now, symfony has had a special page on the wiki titled How to contribute to symfony. This page lists all the ways you can get involved in helping the symfony project and community with whatever skills you have, and links to the right places for most of these ways to help. It is a recommended read for anyone who wants to get involved in the symfony community.
Please don't stop at becoming involved in the symfony community as described in this article. There's a lot of initiatives worldwide that are started around symfony and users of the framework. I want to give some extra attention to two of these as they may be very useful for people working with symfony.
The Symfonians community is a community which lists people and companies that work with symfony and projects done with symfony. The site also allows companies to post job openings and allows you to search within your own country for people, companies and projects.
Aside from the site being a great way to get in touch with other symfony users or even find a job, the application directory is a great showcase of what you can do with symfony. There is an enormous variety in the nature of the applications listed on the site, making it very nice to browse through to see what people do with the framework.
Since all content on the site is contributed by the community, you can also get an account and create your own profile, your company profile, add applications you've built with symfony or post job openings.
LinkedIn symfony Group
Any professional PHP developer has most probably encountered LinkedIn. Most will have their own LinkedIn profile. For those who don't know LinkedIn: It is a network site where you can maintain your own network and keep in touch with the people in your network.
LinkedIn also offers a groups feature, allowing group discussions, news and job postings. Many topics have a LinkedIn group, and symfony is no exception (login required). Using this symfony group, you can discuss symfony-related topics, follow symfony-related news and also post jobs you have for symfony developers, trainers, consultants and architects.
By now, you should have a good idea on what you can expect from the community, and what the community may expect from you. Remember that any open source software relies on a community being able to support the software. But this support can be anything, from answering some questions to submitting patches and plugins to promote the software. It would be great if you would join us!