Howardism Musings from my Awakening Dementia
My collected thoughts flamed by hubris
Home PageSend Comment

You were ahead of your time. Here's an insurance company asking for resumes to be submitted in JSON format!


Résumé Crafting for Geeks

Like you, I loathe Word, and being a geek who primarily builds web apps, it seemed natural to write my résumé (or CV) in HTML, so back in the late '90s, I did. Sure, the headhunters screamed for a Word doc, but by the early '00s, rendering my HTML document to PDF made a happy balance.

After watching a TED talk where David McCandless renders his life's work graphically, I became interested to see what patterns I could tease out of my last twenty-five years.

From Text to JSON

First, I converted my HTML document into a JSON document. Actually, I made it into an actual JavaScript source file so that I could put comments and notes to myself, but the idea is essentially the same:

    header : {
        title : "Howard Abrams",
        subtitle1 : "Senior Software Engineer and Architect",
        website : "",
        author : "Howard Abrams",
        description : "My professional resumé as a senior software engineer specializing in web-based application development.",
        keywords : "resume software engineer developer java html javascript node.js xml web server",
    skills: {
        languages: [ 
               { name: "Java (J2EE)", link: "" },
               { name: "Groovy",      link: "" },
               { name: "C"  }
        // …

    work: [ {
        company: "Huawei's Innovation Center",
        link: "",
        location: { city: "Santa Clara", state: "CA" },
        position: "Engineering Architect",
        start: { month:11, year:2010 },
        end: { month:5, year:2012 },
        // …

A couple of advantages popped up while building this process:

  • Every company and project had to have similar information. When writing in a word processor, it is common to add some detail to one item without adding to all. For example, I put the location for some companies, but did I remember that information for all of them? Readers often look for such parallels, and creating your CV in a data format helps.
  • With painful text entry, descriptions don't ramble. Candidates with dense prose in their CV often get ignored if the reader can't find the desired information. I'm sorry, but I'm not the only one guilt of that.
  • Details can easily be rendered as hyperlinks. With resume text succint but online, details can be placed back on your website and/or blog. Checking my website, blog and github account is probably a more accurate portrait of what I can do than what happens in most interviews… except when I'm talking to you, of course.

You don't need to use JSON, as any data format (or even database) will work, but JSON is easiest to create than XML, and easier to expand than creating a relational data model.

From JSON back to Text

I didn't want to maintain two sets of identical information, so I whipped up a script to smoosh the JSON document (as an object) into the template to create the HTML version of my resume. Yes, you can do this in any language, but Node.js makes me smile right now††Why sure you could do this dynamically with FuzzyToast but I wanted a static HTML file that I could email , so I put together a JavaScript…er, script:

The first version (using Handlebars) was only these lines:

    var Handlebars = require('handlebars');

    fs.readFile(templateFile, "utf8", function(err, source) {
        var html = Handlebars.compile(source).template(data);

While that is all you need to do, I had a little more fun using Handlebar helpers to render dates all the same.

Tag Cloud

With the hard part completed, I wanted to see what technologies I used the most for each project. Of course, I intuitively know that, but viewing it as a word cloud might make this obvious:

Using Luca Ongaro's jQCloud plugin, I just had to iterate over the techologies I listed for each project and count the occurrances.

Career Technologies rendered in a Word Cloud

Historical Skill Changes

Once upon a time, I was a C programmer, then I converted to Java, and then to everything else. I want to see the shift in technical priorities over time.

Iterating over these skills again, but keeping track of dates, made for a visual mess, since I was dealing with too much information. But by combining the technologies into families created the type of visual I was wanting.

Career Technologies used during my Career

Note: This is a stacked area chart created with HighCharts graphing library for JavaScript.

Sharing The Visuals

I suppose every one has a style for reading résumés. I've read thousands, and they follow a particular pattern:

  1. I look at the earliest job to see when they started their career.
  2. I count the number of jobs to get an idea of how long the stay at jobs and how much variety they've experienced.
  3. I view at the most recent job to look for applicable technologies
  4. I attempt to dive into some of the projects to get an idea of scope and complexity.

Achieving a balance between career overview and project depth is nearly impossible with a standard résumé format.

This is why, I thought my visual representations for my résumé might be helpful for people initially encountering my résumé and trying to match my skills with a specific project.

But the résumé format is sacrosanct and can't not be altered!

To make my resume easier to read, I pulled out many details into separate web pages with hyperlinks from my résumé. Since I've already sinned, I could sin again. However, if someone prints the résumé from my web page, it looks like any other.

Pop over to my online résumé and you'll see my solution: tabs. Click a button and a panel comes down showing one of my visuals.

I'm sure many headhunters won't appreciate what I've done. ;-)

Tell others about this article:
Click here to submit this page to Stumble It


This is a really good idea, and one which I will be adding to my tool box. It will fit into my regular workflow of reviewing achievements for the month - adding new records to the data format will be easy.

Two points:

  1. I hate, hate, hate the word "résumé" (this is of course not your fault, but I wanted to expound upon this a little). It looks stupid with the two acute accents but those are essential in order to define the pronunciation and to differentiate it from the synonym for "restart".

  2. Which is where the inexactness comment comes in - I thought the article was about restarting basket weaving, or something.

As you point out, you can use any data format. I might try Lisp code, just for grins.

—Duncan Ellis