Tuesday, April 25, 2017

So You Want to Make a WordPress Site?

Note: This post is improved by listening to the soundtrack from Always Sunny in Philadelphia while reading it.

I'm a backend and operations developer by trade. I spend most of my days working with NoSQL databases and automating infrastructure. I have basically zero skill at making websites or doing any sort of web design. So when I decided to create a web service as a side project, I naturally looked for the easiest approach possible. That brought me to WordPress, a platform I know a bit about but never worked with at any length.

And several weeks of hilarity ensued.

Some highlights:

1. Plugins

Holy Christmas is it annoying dealing with plugins. I didn't even need that many too. Just support for multiple languages and paid memberships. My goal was to avoid having a mess of dependencies that end up draining the app's performance.

The plugin ecosystem is something of a clusterfuck. You try to search for plugins from the WordPress admin panel but quickly learn that a lot of important ones aren't there. For example WPML, one of the language plugins that was recommended to me. Searching from the console you will find knockoffs and supplemental plugins, but to get the real thing you need to go to their website. Lacking a single, authoritative catalog of solid plugins, you end up spending a lot of time on Google trying to gauge the reliability of one site or another. Sure, you can look at the code in many cases and maybe check stuff out from github and play around with it on a test site. But this is time-consuming and not very helpful to less technical people.

What's also aggravating is that even the more popular plugins are not terribly well documented. You end up breaking part of your app after changing the config and then find you have to dig through discussion boards for half-answers. Some plugins offer support if you pay for a PRO version, but even then you can end up waiting days for answers or being referred to a forum post from 2009.

2. Backups

I found out the hard way the importance of backups early on when a config change with the SSL plugin borked my site completely. I am using Amazon Web Services for hosting with a WordPress AMI. My backup strategy had just been to take an image of the server once a day. It worked well enough, and with my load balancer and R53 settings it was only a couple of minutes of downtime to relaunch on a new instance if needed. There are some plugins available as well for backups such as Duplicator, but it was also a pain in the ass to set up.

3. Contractors

I had a decent experience with a contract web designer early on in the project. He helped improve the look and feel of the site. Then I ran into an annoying bug with two language plugins I needed to make the site function in English and Japanese. Rather than fight with it myself I decided to put out an ad on Craigslist and see if a more experienced web developer couldn't solve it for me much faster. The first ad I put on Craigslist Tokyo did not get much response - only about 3 replies, none worth pursuing. I then put an ad on Craigslist San Francisco (which was a pain in the ass to do from Tokyo since they require verification with an American phone number, so had to hack around that shit) and in a day I proceeded to get over 100 responses.

How do you sift through 100 emails for a minor WordPress job? I don't have time to thoroughly vet and interview these people. It tempts your not-so-nice instincts - you know, just delete all the people with "weird" names or something. I suspect some people do this with "minority" sounding or female names. Being Black myself and finding that kind of icky, my better angels prevailed; I did actually click on every response in my inbox. I quickly deleted dozens upon finding emails that were incoherent, unrelated to my ad, sent by middlemen, or just otherwise creepy / shady in other ways.

I narrowed it down to 10 that met three specific preferences: 1. It was a single person instead of a team. 2. They had included links to their previous work, and their work looked good. 3. The email itself was short, professional, and didn't have too many typos.

Of the 10 I responded to, 5 never got back to me. 1 insisted I call him on the phone. I told him that I always do Google Hangouts because I like to look into the other person's eyes while I ask them some simple technical questions. He wasn't crazy about it but I felt justified given past bad experiences. He did the video call. I asked him what SSH is (I did some custom PHP work on this app so the contractor had to be prepared to mess around in a shell session). He started explaining SSL instead. I told him that gently and he tried again, clearly demonstrating he had no idea. I thanked him for his time. He sent three more passive aggressive emails over the following days.

Of the four remaining, three ended up wasting my time. One guy interviewed well, so I gave him access to the git repo and admin console on a test site. He messed around for two days then said he had no idea what to do. The other two washouts did the same but were faster about it. The last dude ended up solving the problem in an hour. I kept him on to do more design work and bug fixes. Pretty cool guy.

Also, I deleted the ad weeks ago but I am still getting inquiry emails. Some people email multiple times too. I now sympathize a bit with employers that don't send a reply to rejected candidates. (some of whom also demand an explanation!)

tl;dr - Hiring contractors is a pain and it may be faster to just solve the issue yourself.

Moral

WordPress really isn't so bad. If you're building a site from scratch it can cut a lot of the headache. Just know what you're getting into and plan carefully. It is very useful for making a proof of concept of something in your spare time. I wouldn't recommend it for larger or more complex sites though. I know for certain that if my project gets any traction, I'll be migrating away from it with the quickness.

If I had infinite time I would do a lot of things differently. I'd probably use more AWS services, such as RDS for the data layer, S3 for some content hosting, and maybe CloudFormation with Autoscaling for bootstrapping and configuring the service. Would love to have a full-time frontend guy make a slicker UI from scratch too. A simple dating site doesn't really need a complex microservices architecture, though you want to be flexible and have room to scale and add features.

Got a big wish list in the project's Trello board. We'll see how it goes. Hoping to launch Alpha next week.