All posts by Gabriel Koen

You want to start a content site? Don’t micro optimize.

A friend emailed me with a fairly common problem: she wanted to build a site and an audience, but was getting bogged down in the details: she wanted to build a great site that people want to visit, she wanted to be able to follow SEO optimization tips, she wanted to place the newsletter signup box in the best place on the page, and to do that she needed to customize her theme, install plugins, etc, and she was getting frustrated.

Although I’m more of a technologist than a content creator, I know the dilemma well. I also encounter it every day at my job, in one form or another. The one piece of advice I’d give is: focus on creating content, the tech and details don’t matter.

In engineering, there are two important concepts that good coders end up learning as they gain experience: don’t prematurely optimize, and don’t micro optimize. By and large, many articles and advice about building a brand or site focus on micro optimizations. It’s easy to see why: they’re bite-sized things that you can do that do show measurable improvement. You can really feel like you’re doing something and see the effect. But those are primarily for existing brands.

If you look at, there’s a ton of things that don’t follow the book: it’s loud, it’s hard to see what content on the page is important, hard to see what content is available on the site, and while we promote newsletter signups and social media, they’re buried on the page. In other words, to those focused on self-marketing and usability, it does just about everything wrong. Yet the site has grown massively year over year, has amassed a large social media following, a large number of newsletter subscribers, and a ton of people comment on it.

There’s one simple reason: content. The story is the same across all our brands at PMC. Focus on content. Build a relationship with your readers (through your branding and tone, and/or directly through discussions — find your voice). You’ll want a design that reflects the brand or personality of your content, but it doesn’t have to be perfect, it just has to fit. And then write.

That’s it. Everything else only matters once you’ve already built your audience and want to grow it further.

Jah Wobble: Merry Go Round

I’d almost forgotten about Jah Wobble, until I saw this at the store. If there’s one bassist I’ve tried to emulate, it’s this guy.

I played the whole thing through marveling at it. Then I realized partway through Public Image Limited it was a 45rpm record and I was playing it at 33. I replayed it at the correct rpm, and couldn’t help but be a little disappointed.

Living the dream

When I was a kid, I eschewed baseball cards in favor of comic books. I saw ads in the comics for lofty, magical places which could sell you any comic you wanted. Missing issues would never be a problem again.

Mile High Comics, Midtown Comics, San Diego Comic-Con. Places you could reach if you were fortunate enough to live in New York City or Southern California. Out of reach for a kid in Podunk, Texas.

Now I live in Los Angeles and have gone to San Diego Comic-Con nearly every consecutive year since 2007. I’ve set foot in Mile High Comics imposing booth and pawed through their back issues. I have been to Midtown Comics in Manhattan and bought the latest Sandman series.

One might say “I’m living the dream.” And they’d be right.

10 reasons why WordPress is a better starting point for a project than you thought, even though you’re an advanced PHP developer

I didn’t quite mean to make this a “top 10” list, but it did work out to 10 items, and it’s indeed a list.

UPDATE: I didn’t make a few points clear originally, so let me add some context here.

The impetus for writing this post was of 3 weekend projects that never got off the ground because I got bogged down with the setup. I was familiar with the framework I was using, it gave me all the tools I needed to get the project going, and as I started building my functionality I started realizing I needed X, Y and Z to keep going. So I grabbed packages (some I was familiar with, others less so, but all were modular and would fit right in with the framework I was using) and spent a bunch more time getting them connected and playing nice with each other, realizing I needed to modify my database schema to support certain features from those packages, etc.

By the middle of weekend #2 I still hadn’t really started coding what I wanted to work on. During the following week I had a bit of an epiphany that everything I’d spent a bunch of time doing to get my project started using simple, existing modular components that were easy to plug in and use already existed within WordPress. At the start of weekend #3, I started fresh with a WordPress install and just started coding the thing I wanted. I just never realized how much time I spent wrangling modules and components before.

Google App Engine provided a similar feeling. At the time I started playing with App Engine it didn’t support PHP, so I used Python, and I was able to just start coding. Users, permissions, access, etc, were all taken care of. The only thing I was mildly annoyed with was that I couldn’t find any existing themes, but it wasn’t too time consuming to grab a WordPress theme and make it work with Jinja2. Having to define my routes was a little annoying / time consuming too. I realized that WordPress would have made even those two things inconsequential, but they weren’t burdensome. But I digress.

Any CMS or Framework can do most of this stuff. The point isn’t that only WordPress does it, nor is WordPress necessarily the best at it. The point is just that WordPress already has these building blocks in place so when you just want to get your idea out there, there’s a bunch of stuff you just don’t have to deal with.

  1. User management and roles.  Has a fully functional user system available, and easy to hook into or customize.  So much better than rolling your own.
  2. Database structure and abstraction/access.  Fully functional database abstraction layer, and supports custom data types (just imagine custom post types are your default storage engine, not “posts”; and custom taxonomies are your relationships).
  3. Control/Admin panel.  WordPress has an admin panel “for free”. Easy to add pages, customize who can see what, etc.  This includes a fully-customizable user experience and WYSIWYG editor already present, which can be easily attached to anything.
  4. HTTP client.  WordPress has a pretty smart HTTP client, and can handle a lot of situations (mostly encountered by shared hosts).  It’s no Guzzle but it’s very reliable, and functions as expected under most normal circumstances.  It even allows non-blocking requests (these are asynchronous but may still trigger handlers on failure/success, just not in the same process or request).
  5. Scheduled tasks.  WP Cron leaves a lot to be desired, but it’s there, and it (mostly) works, and having even a half-assed solution pre-built beats building your own half-assed solution that you’ll never get around to finishing.
  6. Cache client.  With automated fallback if no persistent cache is available.
  7. Route management / pretty URLs / SEO URLs are already present, and works by default when implementing custom pages, post types, taxonomies, and kind of archive or detail page..
  8. Pretty much everything has an observer pattern built-in.
  9. Search.  Like scheduled tasks / cron, WordPress search kind of sucks out of the box, but it’s there, and plugins (+ the observer pattern for searches) are available to allow you to search using any kind of actual search engine you want. But again, it’s at least got a “good enough” search already available until you implement an improvement.
  10. It’s “legacy” code, and ugly, but that doesn’t mean your code has to be.  There’s nothing to stop you from writing modern PHP code for your classes and themes.  (Except that WordPress can be a little weird about namespaces, due to the way the observer pattern is implemented.)   Incidentally, it’s improving.  Thing is, these are things you just have to deal with when your software has millions of users and requires backwards compatibility, and also so that your software can reach hundreds of millions of users in the first place.

Johnny Cash — Everybody Loves a Nut

Fantastic album. It’s hard to find an actual pre-90s Johnny Cash album, most are compilations. There’s not much more to say for the music, it speaks for itself. I mean, it’s classic Johnny Cash.

Found this while out shopping for Record Store Day Black Friday releases (pretty much the only Black Friday shopping I don’t feel guilty for doing). I couldn’t pass it up. It looks to be an original release, judging by the wear on the sleeve. The record itself has some pops and scratches but the vinyl looks very clean and unmarked. The cover was painted by Jack Davis (you know his work even if you don’t realize it).

The title song, among others, was written by Cowboy Jack Clement (RIP), who produced some of the Sun studios tracks on U2’s Rattle and Hum (among many, many other notable things). I bought this album alongside the most recent U2 single. One of the U2 tracks he recorded was Woody Guthrie’s Jesus Christ; I also got Mermaid Ave, a series of albums where Billy Bragg and Wilco record a bunch of Woody Guthrie songs (lyrics without music to be precise). Funny how things sometimes tie together.

U2 — Ordinary Love (single)

The A side is great. Reminds me of Electrical Storm, in that it is well written and easy to listen to on its own, catchy and interesting. I liked the production values, and then I read it was produced by Danger Mouse. Cool beans.

The B side is not great. It’s an interesting take on “Breathe”, but I just can’t get past the distortion on Bono’s sibilants. It makes the song sound like filler. I get that it’s supposed to sound stripped down, like a campfire song or something, but that sibilant distortion is just so bad.