This week I sat down with Technical Lead, Phil Norton, to discuss the ways he gets through his workload, how he got into the industry and how he stays on top of the constantly changing digital landscape. I was really curious to establish why he choose the career path that he has pursued for the past 9 years and what the future holds for him and his Open Source projects.
IM: How did you get started working in web development?
PN: It was accident really. I had finished my MSC in Computer Science and was in Aberystwyth working a job in social services as a receptionist which wasn't particularly interesting or useful. It just so happened my girlfriend's mum worked over in a different department and knew the guy that was in the social services IT there, and he was looking for a data entry clerk. I managed to get the job and I spent 3 months going through their old social services database to update and correct information. When the time came to apply for a job in that department I went for it. It wasn't web development, it was being a database monkey and trainer. I used to train people to use Excel, Word and all sorts of stuff, but in my free time ended teaching myself PHP and I've worked from there really. After looking for a job in Wales for a bit, I hit the problem of not being able to speak Welsh, which is a real barrier in employment in Wales. So I just went for jobs in England and found a job doing SEO development in Macclesfield. At the time I really didn't know too much PHP, but I got offered the job and basically worked my way up from there..
IM: How did you start working for Access?
PN: Mark Hope, Access Digital Director actually tweeted me one day and I thought he was one of the guys from the Drupal User Group, but I got him mixed up with somebody else. He thought I was a freelancer because of the amount of stuff I was doing outside of work and when I told him I wasn't, he said 'Well would you fancy a job?' and that was it really. I came in for a couple of chats with him and I was offered a position. At the time the development team was pretty small and developers were basically doing everything from server setup to HTML code and more. Getting me on board to lead on back-end development was the first step to growing the team and allowing developers to specialise in back-end, front-end and UX - it's worked out well.
IM: Could you describe your daily routine and work process?
PN: I don't think I have a specific routine, but I'm very task orientated. I start the day by writing lists of things I need to get done and then just go through them. Sometimes I'll pick off the easy wins and get lots of ticks so it looks like I'm getting stuff done. But really, it's a case of having a picture of what you need to do and getting on with it.
IM: Can you share some productivity tips and tricks with our readers?
PN: Try to automate things wherever possible. For example if you're editing an Excel doc and it takes 4 hours of typing and checking stuff, but by automating that process it might take you another hour to figure out the script, you've saved yourself 3 hours. Automation will make you think about problems in a different way and will expand your programming skills. I've become really good at regular expressions now, so I can convert CSVs into different formats just by writing some regular expressions.
IM: How do you stay on top of current development trends?
PN: Attending user group meetups is a big part of that, there are always people at these groups who have used something and will tell you how to get started. I guess cutting out the chaff that you don't necessarily need to know and go to user group talks for people to tell you what the best trends are. Other than that I go through the PHP and JavaScript subreddits and reading the latest PHP news from people I know on Twitter.
IM: What industry sites and blogs do you read regularly?
PN: It depends really, there are sites like sitepoint and phpdeveloper which generally have some good articles but they are usually very task specific, so if you have a problem then there will be an article on how to solve it. I normally get the real news from just people writing about it and people sharing. People like Lorna Mitchell and Phil Sturgeon will write stuff and that will be opinion pieces about what's going on or new and interesting stuff in PHP. I usually find out about this stuff by other people sharing it..
IM: Do you prefer working alone or on a team?
PN: It depends on the task really, I'm terrible at frontend stuff (my style and CSS skills are not good), so working in a team really helps . Quite often I'll get stuck on a problem and I'll turn to other people and explain the problem, even if it's just to get it straight in my head about what is going on. Sometimes things can be complicated and so working through them with other people on whiteboards really helps me see any potential problems.
IM: What’s the key to successfully working in a team?
PN: Communication, if you are a part of team and you are working in isolation doing your own stuff isn't necessarily going to be useful for the team or the project. So it is all about knowing what people are doing, and knowing how your part fits into that.
IM: What's your favourite development language and why?
PN: Well I guess PHP. It's quite nice to read and understand and I've been able to do all sorts of things in it. It's not the sort of language you would use for graphics processing, but that's now what it does best. I've tried all sorts of languages and I've found PHP to be one of the better ones. I've wrote in C, which is okay, it can be weird at times. I've also wrote programs in Assembly, and that was difficult, you couldn't read and then go 'right I know what is going on there'. I've started learning languages like Python and that seems quite nice, the white space thing is sort of annoying. If it is not perfectly aligned or indented as Python says it doesn't work.
IM: What other features (if any) do you wish you could add to this language?
PN: The one thing that annoys me about PHP is the inconsistency in some of the function names and function parameters. Whilst that is very much a legacy problem from older versions of PHP I still think it needs addressing. PHP is really good at giving me features I never knew I wanted. The built in webserver that is bundled with PHP is an example of that. It's not something I was looking for but now I have it I use it all of the time.
IM: Do you find any particular languages or technologies intimidating?
PN: It depends on what you are trying to accomplish. Whilst working with Solr recently I found myself getting back into Java a little. I haven't used Java in years, and it's not a complicated in of itself. What is complex about Java is understanding the Java API and how to plug objects together to get the results you want. So, I wouldn't say any language is complicated, other than the deliberately complicated ones.
IM: What questions do you ask when starting a new project?
PN: That depends on the project, because you need to look over the requirements. My most common question is "What is this for". Clients will often have a requirement that the site needs to have an RSS feed at a particular URL, or it needs to generate an email that has a specific format. So questioning about why they want that email is always a good step in understanding the requirements. Especially because it can lead into what the client is really trying to accomplish. Sometimes it will be they want an RSS feed so they can feed data into a CRM system, and the CRM system will then collate things. We can do that, no problem, but there are CRM integrations available. So asking the client if they want to use one of them and showing them the benefits, like being able to synchronize content back to the site from the CRM system, is always useful.
IM: How did you get into Drupal?
PN: When I left the SEO job a few years ago, I joined a different company as a PHP developer. They essentially dropped me into a half finished Drupal build and said "Right, finish it off". After about 2 weeks of pulling my hair out with Drupal it sort of started to make sense. That was Drupal 6, so when Drupal 7 came out about a year and a half later, I was already familiar with Drupal 6, so I could see the benefits of Drupal 7 and I began to get really involved. The local user groups are invaluable and have helped me understand Drupal much more than reading books. I remember getting incredibly stuck on one project, writing down a whole load of questions and going into the Drupal user group with them. They were all really helpful and went through everything. Sometimes it was a case of, "Yeah that doesn't work" or "You don't want to do it that way", it was a great resource to have.
IM: Drupal 8 is nearly out. What do you think about the evolution of Drupal?
PN: Drupal 8 is an entirely new application and a new way of thinking about the system. Most of Drupal 8 is re-written from the ground up to be object orientated and component driven. Drupal 6 to Drupal 7 was a migration from some of the more functional stuff into object stuff, but still kept a function based architecture. Drupal 8 is a wholly object based architecture – I think it's a brilliant idea. There's a lot to learn, as it's very different, but I really think Drupal 8 will be a big hit.
IM: I know you have been contributing on a bunch of modules and write quite a few as well. Do you have any additions, changes, or new modules do you have planned for the future?
PN: The Dotmailer modules we have are currently being re-written, so I hope to get all that released soon. The custom help text module that I wrote a while ago has recently had another contributor on so that work is coming along nicely. In terms of new modules I would quite like to get the Thirdlight stuff that we did for BAFTA released as a full module if we can. Maybe after the Dotmailer sprint we can concentrate on that. Then I guess we need to start to get some of these modules updated for Drupal 8.
IM: Describe the project you've worked on that you're most proud of.
PN: I guess it must be BAFTA, and not only because we have recently won an award for it. That is a big and complicated site and does a lot of stuff behind the scenes. It's probably the biggest and most complicated Drupal site we have ever done and it still performs very nicely and works very well.
IM: I know you gave a talk about performance at DrupalCamp North in July. What is the first thing that comes to mind about performance?
PN: It's basically about diminishing returns, so there is no big button that you can press that says 'improve my performance'. It's all about lots of little changes that contribute towards a bigger change. Some of those might have immediate benefits like turning on APC, others might be small. For example, turning off database logging in Drupal helps when the site gets busy, but it doesn't necessary help on a day to day basis.
IM: What is the best tip you could give someone about performance?
PN: Use APC because it will speed your site by 30% straight away. After that there are lots of things to look into that will help, but the basis of my talk at DrupalCamp North is that you should know what you need to address. Profiling, benchmarking, and analytics will show you where the problems lie and will point you in the direction of what you should be improving.
IM: What is the best tip you could give someone about talking at events?
PN: I don't think I'm the best person to be talking at events, but it is a sort of personal challenge really. There are better speakers than me. What makes a great talk, for me, is a mix of useful information and that the information is being presented by someone that is genuine and interested in the topic.
IM: You are the one that developed the Vlad project, which is a stand alone environment that provides all the tools someone needs to develop Drupal sites. How did you come up with the idea?
PN: It was basically at the hackathon at PHPNW13. I'd just spent the day looking at Vagrant and Puppet, and I kind of understood what was going on in Puppet, but it was far too complicated for what I needed it to do. Just changing a line in the php.ini file took a few lines of code, and I didn't really understand what it was trying to do, what the parameters were for. So I was looking around and found this program called Ansible, which I sort of heard bounded around the PHP develops scene a bit. Essentially, I used Vagrant with Ansible and setup a virtual machine for my own site, #!code, as a sort of testbed. It grew from there really. It started off as a very simple LAMP stack with a couple of PHP variables and Apache, and it turned into this highly configurable system. About 3 months into the project, I realised that what I had in front of me was basically a workable local environment that didn't need to be connected to #!code and could be used independently for any Drupal project. So I changed the name from to something simple and Vlad was born. The idea was never to create a product like that, it was more sort of to teach myself how to do this and create something that I could work on locally. But it seems to have worked and has got a good community behind it now.
IM: Any future plans you could share with us about Vlad?
PN: Yeah, we've been talking recently about including some more userland roles inside VLAD. When I originally wrote Vlad there was no Ansible Galaxy and there was very little examples on the net about any roles. You couldn't download an Apache role and put it in, so everything had been crafted by hand basically to create the project. There is now a large user base behind Ansible and lots of people are producing roles that produce all sorts of functionality. So we've been toying with the idea recently of cutting out some of the Vlad versions of roles, like the PHP install, and using other people's roles. There's pros and cons behind that which we are trying to debate amongst ourselves. We'll see what comes of that.
There are some immediate plans coming up. Instead of downloading the Ubuntu VM from the internet and reprovisioning it every time you setup a project we are allowing custom boxes to be included. This way you can provision a box and use that box again on a different project or give to a colleague. It works really well and doesn't really have that many problems, other than trying to change lots of internal variables. If you start up with a provisioned box that is listing on a certain port number and under a certain address you'll need to re-provision it to listen to that different address..
IM: How did you come up with the idea behind #!code?
PN: When I was working as an SEO guy, we were given a task of writing 2 blog posts a week on a subject of our choosing. So everybody chose a subject they were interested in and went and created a blog. There was all sorts of stuff like football, movies, and fashion, but everybody in the company had to write at least 2 blog posts a week in order to keep the content up. We basically had our own internal content network, so when the time came to put links on those blogs then we could do that and they were quite powerful links. My blog was obviously on coding and I just wrote about whatever I happened to be learning about at the time. When I left the company I had 100+ blog posts and I continued to write on it as I find it both rewarding and a good resource. It's been going as a blog for around 8 years now and although I don't always get time to write posts I try to get at least one blog post a month written.
IM: Why do you think blogs are important?
PN: For two reasons. They help you understand a subject. Most of the blogs are I write are not me going "I know all about this, let's write some stuff about it", it's more sort of "Hey, this is a interesting, let's investigate it and try to collate my thoughts into some sort of an article". It's not just about teaching yourself though, it's about teaching other people and a big part of the reward comes from that. I think every week I get someone commenting on a random post about how much that has helped them and that is always good to hear. When I look at a CV for a developer I always look out for personal websites and having a technical blog is a huge bonus.
IM: Do you have any other projects or R&D that you have been working on and want to share them with us?
PN: Well I'm always tinkering around with bits of code, but I have been working on a website evolution, er, thing, for about 6 months now. The idea is it will take a blank canvas and evolve a website from it based on user input. So you randomly generate some pages, which will contain HTML and styling and colour, and then the user will pick the best individuals. It will take those individuals and evolve them in another level and you'll get another set of web pages. The idea at the end of the day, is you can download a template which can contain your frontend website code and you can use that in your projects. Obviously, that sounds simple when you say it like that, but there's a lot of work to be done behind the scenes first. I think I got as far as trying to figuring out how to evolve and mutate HTML, which isn't easy. I've also been unit testing as I've been going through, every now and then I'll tweak something and it will break 800 tests and then I need to go and figure out what I've broken. That's because of the random nature of it all. Testing randomness isn't easy, so you need to test other things.
IM: Who are some of your development heroes?
PN: People like Jeremy Coates and Lorna Mitchel are a great inspiration due to their technical ability and enthusiasm for the community. There are lots of people that are behind the scenes in PHP that I kind of recognise. People like Derick Rethans, who produces the Xdebug tool, he is very clever and a great inspiration in trying new and complex stuff just because you can. I've read some of his blog posts on geomapping, and he puts all the maths in there as well. People like Sebastian Bergmann, who is the guy behind PHPUnit is another person who I look up to. The PHP community is full of people like that, and that is what is great about the community. There are tons of people that contribute to the userland and make the community great.
IM: What one piece of advice would you give to an aspiring web developer just starting out? What makes a great developer?
PN: I guess curiosity is a must. You have to have the willingness to learn in your own time and need to be on top of your own personal development. Working outside of work is essential in getting a job in development. When people come to Access for development jobs the first thing I look for is their own websites or github accounts. This is because if a developer doesn't have their own websites and doesn't contribute to anything on Github, then what are they doing? Those sort of 'extra-curricular' activities are always nice to see and makes candidates stand out. It's not just about skills, it's about learning those skills. There is a lot to learn and it's just about sitting down and learning them, rather than expecting them to happen all by themselves.