Rick Hurst Full-Stack Developer in Bristol, UK

Menu

Category: Uncategorized

Building Enterprise WordPress Courses: A Year in the Making

Following four years of helping WordPress VIP customers scaling their Enterprise WordPress sites and applications, I made a move to the WordPress VIP Learning and Credentialling team. Over the past year I’ve been on an incredible journey developing a series of Enterprise WordPress Courses, and I’m thrilled to share the results with you all. It’s been a rollercoaster of coding, debugging, and, yes, countless cups of coffee, but seeing these courses come to life has made it all worthwhile.

The idea sparked from a simple realization: while WordPress powers a significant portion of the web, there’s a gap when it comes to enterprise-level training. Many developers are familiar with WordPress basics, but scaling that knowledge to meet the demands of large organizations requires a different skill set. That’s where VIP Learn comes into play—a free, enterprise-focused WordPress developer training program designed to bridge this gap, based on the skills and experience of the amazing developers at WordPress VIP and Automattic.

Diving into the course creation, I wanted to tackle the challenges that enterprise developers face head-on. The first course, Advanced WordPress Debugging, is all about equipping developers with the tools and mindset to troubleshoot complex issues. From mastering tools like Query Monitor and Xdebug to developing a systematic debugging approach, this course aims to turn those hair-pulling bugs into manageable puzzles.

Security is another beast in the enterprise world. With the Enterprise WordPress Security course, the focus is on identifying and mitigating common vulnerabilities. We delve into the OWASP Top 10, explore secure coding practices, and emphasize the importance of regular security audits. After all, a secure WordPress site isn’t just a nice-to-have; it’s a necessity.

Performance can make or break a user’s experience, especially at scale. The Enterprise WordPress Performance course is designed to help developers build high-performing, scalable applications. We cover everything from efficient database management to caching strategies, ensuring that your site remains snappy even under heavy load.

Understanding the architecture you’re working with is crucial. That’s why the WordPress VIP Architecture and Tooling course provides an in-depth look at the WordPress VIP platform. We explore its architecture, workflows, and the tools available to developers, aiming to streamline development processes and enhance site performance.

And we’re not done yet. There are two more courses on the horizon that I’m really excited about. The first is “Mastering the WordPress REST API,” which will take a deep dive into how to build robust, scalable APIs on top of WordPress—perfect for developers building headless applications or integrating with other services. The second is “Enterprise Block Editor,” which focuses on Gutenberg block development tailored for enterprise use cases, with custom blocks, advanced workflows, and best practices for large teams.

This suite of courses forms part of the learning material for an Enterprise WordPress Credential that we have in development Stay tuned!

Reflecting on this journey, it’s been incredibly rewarding to contribute to the WordPress community in this way. The feedback from developers who’ve taken these courses has been overwhelmingly positive, and it’s inspiring to see them apply these skills in real-world scenarios. If you’re looking to elevate your WordPress development game to an enterprise level, I highly recommend checking out VIP Learn. It’s free, self-paced, and packed with insights from industry experts.

Happy coding!

I joined the WordPress VIP team at Automattic!

After working mainly freelance for the past decade or so, I started 2020 with career development on my mind. Freelancing had been going pretty smoothly, but it didn’t feel like it was going anywhere, that I was specialising in being a “jack of all trades” and I couldn’t help but think there was more opportunity out there to develop and find a niche, working within a large organisation, where I could concentrate on developing my software engineering skills rather than running a business. Automattic had been on my radar for years, as an established champion of fully-distributed working and open-source software, but it was relatively recently that I had became aware of WordPress VIP, the enterprise-scale platform run by Automattic. In May 2020 I started full-time as a Developer at WordPress VIP!

As part of the Customer Success (EMEA) team, I divide my time between Code Reviews of customer code, where aim to help customers make their custom WordPress code efficient and secure, proactively and reactively helping customers with optimising code to remove bottlenecks in database queries and caching, investigating solving tricky long-term bugs and performance issues on customer’s sites, and getting involved in a whole load of different internal projects and initiatives. The Automattic creed encourages, amongst other things, continued learning and development, and there’s huge potential for branching out here.

Enterprise-scale WordPress? 

I’ll address this first – I know there will be skeptics out there (including amongst my own friends and ex-colleagues!), but with the right set-up, considerations and infrastructure, there is absolutely no reason why WordPress can’t be run at scale, and if anyone are experts in this, it’s the company that runs wordpress.com. The WordPress codebase is incredibly mature, backward compatible and extremely well tested, powering a significant percentage of all websites (I’ll refrain from quoting this percentage, as the number is both disputed and constantly growing!). WordPress VIP take that a step further by running a (private) cloud-based auto-scaling infrastructure and application support tailored specifically to the needs of high-traffic, enterprise-scale WordPress sites.

During the US elections in November 2020 I got to witness first-hand, amazing amounts of traffic on some of the sites running on VIP Go. Watching the Grafana charts for the back-end of some of these sites was almost exciting as the charts being shown on the sites themselves! Here’s a write-up about FiveThirtyEight – a WordPress site and liveblog hosted on WordPress VIP which was reliably serving WordPress at the rate of 132,000 requests per second during election night.

Whilst historically I haven’t always been a cheerleader for WordPress, it became my go-to CMS (yes, CMS, not just blogging software – that’s probably another blog post in itself!) over the last decade, despite dabbling with other open-source CMS and building a few of my own in the past. There’s a fair amount of anti-PHP sentiment amongst some of my peers, usually based on their perceptions of PHP in the early years, before it became the fully-fledged programming language it is today. I don’t share this skepticism, so have now gone all-in, on both PHP and WordPress! Even on dedicated infrastructure, running WordPress at scale (in terms of both traffic and amount of content), requires every aspect of the applications code to be considered, tuned and tweaked for performance and security. This is the stuff that I like doing, and i’m now honoured to be doing it amongst a team of vast experience in this field.

The hiring process at Automattic

It all starts by sending in the initial application (mine was by email, but currently it’s via greenhouse). In some way this is the first technical task – I did as much reading as possible about the organisation and advertised position before sending in my initial application to make sure it covered everything relevant I wanted to say about myself and my skills/ experience. Having made it past this stage, next-up was a technical challenge, in my case re-factoring a plugin to improve it’s performance and security, done in my own time. This was followed by a text-based interview in Slack, where we got into some in-depth technical and previous experience chat. I was then invited to start a trial, which is paid, and flexible regarding timescales, to allow me to fit in around on-going work. The trial lasted several weeks in my case, and consisted of more challenges simulating real-world scenarios – code reviews, debugging, advising customers etc. before I was invited for a chat (again via slack) with the WordPress VIP CEO. Finally I received my job offer letter and arranged a date in May to start on-boarding.

Fully distributed working

For context – I applied for this before the Covid-19 lockdown occurred in the UK, and at time of writing we are still in lockdown. Many people are now working remotely by necessity and hopefully a large proportion of those people will have the option to continue working remotely when lockdown is over. However, Automattic has always been a distributed company, and this was a major selling point for me. Remote-working is not for everyone, but it has always been a goal for me, which i’ve achieved up until now while working freelance. This will mostly happen from my shed-office, but in theory this could be from virtually any location in the world where I can get an internet connection, which a fantastic freedom. However, there are timezone considerations to stay in sync with my team and commitments and local employments laws/visas need to be considered for some locations.

WordPress VIP and Automattic are hiring! –  have a look at some of the currently open positions at both WordPress VIP and Automattic.

Upgrading to OSX Mavericks

I’m a late adopter, but I finally took the plunge and upgraded to OSX Mavericks tonight.

A few gotchas:-

  • I had to reconfigure Apache for PHP and virtualhost support
  • I had to re-add a symlink for the MySQL installation:-

sudo ln -s /usr/local/mysql-5.6.10-osx10.7-x86_64/ /usr/local/mysql

  • I also had to reconfigure ssl
  • I had to reinstall vagrant (because of lost path)

Catching up – Summer 2013

Rocky the T25 being towed

Ok after a productive start to the blog this year, i’ve failed to post since the start of the summer. I’m going to blame it mostly on my camper van, both literally spending time working on it and camping in it with my family, and also generally all my blogging effort has gone into my “camper van things” blog. I’ve had a fantastic summer, worked less than I probably should have, but now getting back to work (and saving up for some more summer adventures next year!).

So to catch up – i’m now freelancing more or less full-time back at Potato, working on some interesting stuff, notably cutting my teeth with AngularJs framework, which i’ve enjoyed so far. My initial observations are that it is significantly different to Backbone/Marionette that there is no confusion over what technology i’m using, it allows you to be productive very quickly and that it litters your markup with non-standard attributes. The latter may upset purists, but otherwise it gets the thumbs up from me. If you’re interested in learning AngularJs, a good place to start would be the tutorial.

Braindump May 2013

Not for the first time i’ve found myself stepping back from Twitter most of this month, and when I got drawn in, I got very frustrated with scatter-gun discussions – found myself trying to explain stuff I just can’t get over in a few characters, resulting in multiple replies especially when there are several people in the discussion, so even less room for content. As someone once said – having a discussion on twitter is like trying to have a conversation through a car window as you repeatedly fly past them.

One such discussion was about recommended Content Management Systems (CMS) – I was trying to explain what my holy grail would be – a dynamic CMS (as opposed to a static site generator such as Jekll), which allows editing of content as text or markdown files or via the web, where content can be synced and versioned using GIT, but also has a “throwaway” database for search e.g. it indexes content in the background but no need to keep restoring it when content is added to live but not dev/ vice versa. I struggled to get that out in a reasonable paragraph and i’m not really started yet!

Another area to deal with is comments – comments should really be counted as valuable content on a blog, so this content should also be stored as static files under version control (to allow it to be synced with other copies of the site, rather than the comments themselves needing versioning). The problem is that 90% of any comment system is anti-spam measures and moderation. Having spam comments committed to my GIT repository is downright dirty!

In other news, I’ve finished my current stint as a JavaScript contractor, and am going to be working full-time for the next month or so on the next phase of my company Olivewood Technology, which will be evolving this year.

Braindump April 2013

One of the oldest production web applications i’ve ever built is still happily running mission-critical operations for a small distribution company. I’ll be the first to admit that it is a bit of a mess of different “eras” of code – some of it is even still running classic ASP, which is being slowly (i.e. over a period of years) but surely replaced with PHP5 code. One thing i’m sure about though is that to rebuild the system entirely using something like Django would take months, if not years. So it is is destined to stay as PHP, and therefore as long as it is running and i’m involved with it, i’ll still be writing PHP. I’m fine with this, PHP runs half the internet, was written specifically for the internet, is easily learned and is improving as a language all the time. PHP is a fully Object Orientated language these days, but judging from a recent thread on the underscore mailing list, the perception of PHP remains as warped as ever in the eyes of “proper” programmers!

I’ve managed to sort a couple of things this year that have been missing from my life – firstly, i’ve been doing a bit of mobile working from my camper van office, and secondly i’ve joined a band, after a hiatus of ten years! My last band (Braxton Hicks) was a 9-piece Acid Jazz/ Funk/ Soul band, this new band (name still undecided) is a 3-piece surf-rock trio. We’re still getting a set together, but will be looking for gigs soon!

Bristol surf rock trio the savages

Braindump March 2013

There seems to be a trend for free services shutting down recently – following the recent-ish announcements that Posterous (a kind of blog service with strong emphasis on posting by email) is closing down, and this month Google announced they are closing Reader. It’s not surprising that a free service would shut down – they cost money to run, and as businesses start to look at ways of cutting costs, it makes sense to sacrifice free services.

I was surprised about Google Reader though – apparently the user base isn’t as big as I presumed it was, and they decided it was too niche to bother with. I’m also surprised they didn’t just roll it into google plus – surely little effort to gain thousands of much needed G+ users? Meanwhile i’ve moved over to feedly.

Currently most of my stuff is self-hosted, with the exception of comments hosted by Disqus. I really don’t want the hassle of running my own comment system, due to spam, but i’m starting to think about moving to a self-hosted system, maybe something like a self-hosted version of Disqus, that I can easily drop into different blogs? Whatever I use, it needs to have all the usual anti-spam stuff – comment spam is the bane of any aspiring blog software developers life!

I also paid up for a years membership to app.net – same as twitter, I am @rickhurst. It hasn’t become part of my daily social/workflow yet, as not enough of my regular twitter contacts are using it, but I wanted to put my money where my mouth is when I say i’d rather pay for a service than rely on annoying advertising.

I gave a talk on Backbone Marionette at the Southville JS meetup. It was a practical code based demo, I think it went OK. Either way it was a good turnout and nice to have it hosted in a pub back room, so we could continue chatting at the bar afterwards. The code of the (fairly pointless) demo app I put together in blue peter style is online here.

I also gave an ignite talk on remote working at the Anywhere Working Bristol event. That seemed to go down well and it was nice talking about non code-related stuff for once!

I was also pleased when a colleague pointed me to Poweramp for Android – I had been complaining about how most Android music players don’t support gapless playback, which is a real party-pooper when it comes to mix albums such as my favourite mix album of all time Journeys by dj 70 minutes of madness.

I’ve now finished a full-time freelance Javascript contract at ISM Fantasy Games, but will be continuing with them on a 3 day week basis, freeing up some time for my new business venture(s). More about that when the plans are more refined!

Learning to touch type properly

So, one of my goals for this year was to learn to touch type. I pretty much ignored this goal until last week, when I opened up my copy of Mavis Beacon Typing Tutor. Right now I can type with the correct fingering, without looking, but it is painfully slow – i’m still waiting for the magic moment where I don’t have to pre-calculate every key, and remember which finger to press it with! This is the first blog post I have ever written using the correct technique and it has taken ages, but am determined to stick with it until I am fluent, so expect lots of short blog posts with minimal punctuation until I have this thing nailed!

Notes on deplying django with virtualenv mod_wsgi and apache on ubuntu

As i’ve exclusively been using app engine in my day job at Potato, I haven’t yet had to deal with deploying a django site on my own Ubuntu server yet. I knew that I would be using virtualenv, apache and mod_wsgi, but hadn’t yet worked out how this is done.

Rather than repeating it all here – I followed most of the steps in this blog post.

However, there were a few points where things didn’t go to plan:-

First of all I got the ubiquitous mysql_config not found error when attempting to install:-


pip install mysql-python


So, apparently the solution is to install libmysqlclient-dev:-


sudo apt-get install libmysqlclient-dev


However, if you get this error:-


error: command 'gcc' failed with exit status 1


You need to install python-dev:-


sudo apt-get install python-dev