A beginner's Journey with Symfony

Last year, I had the idea of developing a dating website for a particular niche (http://www.lovehabibi.com/). I have a background in web product development and online marketing, but my coding skills were limited to HTML/CSS, and some amateurish messing around with C++ years ago. Because this wasn't going to be the next Facebook or Twitter I could take to an investor and hire a coding team, I decided to do the total opposite: keep the entire project super-lean, build it all myself, and hopefully learn how to build a relatively complex website from ground up. At least the running costs would be not much more than just hosting, and if the project justified it later, I could add more resources and people to it.

About 6 months ago, I faced a challenge that felt like a mountain: Learn PHP. Learn MySQL. Build a decent site from scratch with multiple users, logins, messaging, multi-language support, a PayPal integration... as well as a backend CMS to manage it all. I'd worked at a company than run a large (1m+ uniques a month) site off of Symfony and people I'd worked with in the past recommended that I go with Symfony. There'd be a learning curve, but the framework would help me with heavy lifting. Nonetheless, this would be my very first website that would be something else than a handful of static HTML pages, and it was admittedly a little scary.

So I ordered a copy of PHP & MySQL for Dummies from Amazon, opened the Definitive Guide to Symfony in my browser, signed up to the Symfony forums, and started reading. As soon as I had understood the PHP syntax and had a sense of how a database should be organised, I switched fully to Symfony documentation, read the Guide from start to finish scribbling down notes, and occasionally gave Fabien a roasting at the forums with posts like "the Symfony documentation really sucks". Of course it didn't, but learning can be frustrating (I now see the Definitive Guide has been updated for Symfony 1.4 so newbies should have even less to worry about). I didn't touch the Jobeet tutorial until the very end, mainly because it had so much concentrated information, but its value has become more obvious to me looking back now. And I was fortunate to know a few Symfony coders that I could sometimes pester with questions like "what exactly does a module represent?".

In the end, it took about 4-5 months in total to build a site alone that I think a startup with a small team of coders could be relatively proud of, including design development, copy, HTML/CSS, etc. Do note that this was a side-project as I was working as a freelancer during the days. The site went live in June, there's about 2,000 registered members now, and users can create profiles, upload photos, message each other, search, rate other members, and much more. With the help of Symfony, I also created a relatively complex custom CMS, where I've got full moderation capabilities, automatically-generated reports on site activity, etc. I've also got a couple of hundred pages of dynamically-generated SEO content going live shortly, for which Symfony helpfully handles the clean URLs. If you're reading this and think it's got to be a small basic site, sign up and take a look inside. It really isn't.

I must say that none of this would have been within my reach without Symfony, and I now know that Symfony is a tool that makes it possible for a web entrepreneur to bring your idea to life. This is a big deal for me as I've never really wanted to become a developer but rather remain an entrepreneur / product developer --- and still be able to build a site exactly how I want and learn its inner workings. Symfony (and Doctrine) simplified the process of building a complex website and enabled a total beginner to push out a site that just works. Without Symfony, creating session-based authentication, making the application more secure through proper escaping, having i18n behaviour, creating a powerful backend, and simply being able to organise a relatively complex project without becoming overwhelmed would have taken much more time.... or perhaps been a task that I would have never undertaken. Frankly, I don't think I would have even known how to organise a project.

I'm now a dedicated Symfony fan, looking forward to Symfony 2.0, and trying to help out at the forum whenever I have time. I noticed that trying answer other people's questions was very helpful as it would often force me to look up something I only knew a little bit about.

So if you're someone looking to get into Symfony for the first time, or perhaps weighing up different PHP frameworks, I really can't recommend Symfony enough. Just persist with the initial learning curve, make sure you're creating a project while you're reading up (even just a test project), and it will all click.

I hope that someone has found hearing about this experience useful.

About the author

Tom Dibaja is product developer/marketer and web entrepreneur based in Barcelona, Spain. For the past year and a half, he has been working as a freelance product consultant to various online businesses across Europe, particularly early-stage startups. In his free time, he likes to conjure up new ideas of clever web services and see if one of them might actually make it big one day. If you'd like to get in touch, you can find him on LinkedIn.

This case study was provided by a user of the symfony framework and published with the permission of all parties involved. Are you interested in having your case study published on the symfony blog? Feel free to contact our Community Manager Stefan Koopmanschap (stefan.koopmanschap - at - symfony-project - dot - com).


Mhh… too bad it has not the basics of good practices such as not publishing the dev front controllers (http://www.lovehabibi.com/backend_dev.php, http://www.lovehabibi.com/frontend_dev.php);
removing the default routes (http://www.lovehabibi.com/sfGuardAuth/signin works, just as http://www.lovehabibi.com/default/index, http://www.lovehabibi.com/sfGuardAuth/signin, and all others);
customizing error pages (see what an error 500 looks like : http://www.lovehabibi.com/backend.php);

But hey, I guess beginning can also mean missing the very basics ;)

Keep going :D
@vinyll It's common for new sites to have these kinds of issues. For example, giants like GoWalla and bit.ly had much bigger problems - memcache daemon completely open to the world: http://www.slideshare.net/sensepost/cache-on-delivery
@vinyll: Thanks for pointing those out. I'm glad that's the worse you found :) ... although that's not an invitation to look for more.
Hey Tom, it was great to read your story!. I have a question, how many hours per day, did you worked on this project?

Keep up the good work!
@jonathan: It varied. In the beginning it was about 3-4 hours a day. Later on as I started getting increasingly obsessed with getting it out, it was frequently 10+ hours a day, weekends, whatever. Work for clients would often dictate how much time I could spend on my own stuff. But overall, most of the time was just spent learning and looking up solutions for the first time. It'd be a very different task if I was to build the site again now, much faster.
Congratulations Tom, I´m just in my very first steps on PHP-symfony and I find your case very motivational for newcomers who has maybe a good idea but not the enough skills to develop it.

Three(of thousand) question:
wich hosting server did you chose finally?
Are shared servers optimal to host a web like yours? (I´ve heard that sometimes runs slowly)

And finally... what PHP IDE did you use? (I like HateML but I´think it could be insufficient for complex project)
Thanks! and happy luck!
@fer_plus... in response to your questions:

- I use a dedicated & managed server in US (the managed service helped me jump past all the newbie hassle)
- Shared servers... not sure as I havent tried one. I think it all depends on how many users and the load on the server.
- IDE... I had a few suggestions from friends but I've gotten used to writing everything in Dreamweaver CS4 so that's what I use for all my coding (not the visual editor, of course). I like it for its user-friendliness.

Comments are closed.

To ensure that comments stay relevant, they are closed for old posts.