An Interview With Rafael Dohms, PHP Evangelist
There’s no way around it, PHP is his dohmain. Rafael Dohms, an experienced PHP developer and speaker, joined Usabilla last week as our new Lead Backend Engineer. Rafael is an active contributor to many open source projects around PHP and is a founder of 2 of the largest PHP user groups in the world – PHPSP and AmsterdamPHP. We were able to catch up with him and get his thoughts on product development, team management, and code quality.
Can you tell us a bit about yourself and your experience in software development?
Absolutely! I’ve been working with development for about 16-17 years. I started very early on as a kid, just trying to create a website for my counter-strike clan. There was a whole different technology scope back then. I started with HTML and CSS and learned PHP at my first job. I picked it up as another language and kept going with it, really enjoyed it, and then started writing my own side projects. In 2006 we had the first big PHP conference in São Paulo which is where I realized there was actually a community, and this is what really kicked things off for me.
I started my first user group, the PHPDF user group and later another user group in São Paulo. I began attending more conferences and even speaking at them. I was doing more and more with PHP and it wasn’t long before I started contributing to PHP itself.
What first brought you to Amsterdam?
There were many factors involved, but ultimately it boiled down to the opportunity to work with a company that focused on building a product. That’s one of my biggest passions – working on products, on something that will last a long time, as opposed to projects with short lifespans. I like being able to produce a product and continue working on it to constantly improve its quality.
What does it mean to create quality code?
It’s about the values that you set. As a team you have to define your core values because “quality” is subjective and different companies may have different ideas of what quality means. Simplicity plays a part of course. To me, quality code is essentially code that is simple, quick to edit, secured by testing, and performs as needed.
What role does simplicity play in achieving quality code?
Simplicity helps in all aspects of coding. It makes the code easier to maintain, because it makes the code easier to understand from someone else’s point of view. It’s like taking notes about a project. Your notes should be easy enough to understand, that the rest of your team could quickly look through them and understand what’s been done as well as what needs to be done. It would make moving forward in the project so much easier.
What started this philosophy of coding around a set of core values?
Early on, I worked in a multi-disciplinary team of about 9-10 experts where we didn’t really have the need to produce anything, we were there to just support the group and make sure they had everything. I was able to learn how to write code in the best way possible without any time constraints, so that the maintenance and everything afterwards became easier. The importance of quality through simplicity – as well as having a team that works with a set of core values – stuck with me and I was then able to apply these principles I learned over to projects that did have time restrictions.
How do you manage a group of people with such diverse skills?
When working in such a diverse team, it’s important to recognize people need enough personal space where they can work the way they like to work, but they should still have that integration into the team. For developers, you have the tools that you use to work and to code on a day to day basis. I feel this is in the scope of personal choices; each person should feel comfortable with the tools they are working with. Then you have the team integration and this is where we’re all producing code and we want everyone to be on the same page. This is where having coding standards and shared values comes in. Having these core values ensures a team stays in sync.
What are the top challenges that modern Lead Developers face in their roles?
The label of Lead Developer is sometimes misused I think. To me, a Lead Developer is a senior developer, who has experience and is contributing to the team and has a key decision-making role. Where the “Lead” part comes in is, within that team you become a reference for others and then a big challenge is being able to look at the team and think about how to take the team forward and ensure they’re constantly learning.
Is this something you hope to achieve at Usabilla?
Definitely. For a Lead Developer, I believe it’s not just about the code – it’s about the people. I want to be able to take the whole team and inspire them to be even better than they are, to keep learning and grow more as well as to spend time investing in themselves. With Usabilla, I saw a mature company with a great product that is willing to look internally and ask difficult questions about how things can continue to be improved. This commitment to quality coupled with the incredible team makes me confident that not only is there space for me to help and to achieve great things with the products, there is also a big opportunity for me to learn. Just like with my team, I have to ensure I always continue learning and moving forward.