Ultimate Developer CV: Creating your Modern Resume

Creating the Ultimate Developer CV

Creating and Maintaining a CV (Curriculum Vitae) or Resume is one of the crappy things about being a developer. Unless you are a lifer (stay at a single company for life) you will have the arduous task of writing and maintaining one.

One of the nice things about being a developer as opposed to some other marketing or business career is that you don’t need to write a lot of crap  and bullshit your way to make prospective employers like you. You can portray yourself as simple as possible and usually this is what employers in our field (Non-corporate, open source type) like.

The First Step to Creating the Ultimate Developer CV is a Template

A template? No…that’s the first step everywhere. Well maybe so but I’m talking about something different we will be using what we as developers like…JSON.

In particular a JSON based standard for Resumes and CV’s called JSONResume.

Now this is sounding like the ultimate developer CV isn’t it…

Lets start Creating out JSON Resume

We’ll use NPM to install the node package (How to Install Node and Npm)

sudo npm install -g resume-cli

Now Initialise a Sample CV

resume init

You can rename this file:

mv jane-resume.json pat-cv.json

Optional: You can register your ultimate developer CV like http://registry.jsonresume.org/thomasdavis like vanity plates with

resume register

Now lets create out Ultimate Developer CV in JSON

The initialised sample is given, it gives a detailed over view of the kinds of things you want in your cv, open this file and edit it according to your details, skills and background. Otherwise you can use the awesome (ultimate) web interface for creating your ultimate developer CV…actually that is recommended. Update: Actually it is not recommended, it is too buggy at this stage.


{

  "name": "Jane Q. Fullstacker",

  "meta": {
    "format": "FRESH@0.1.0",
    "version": "0.1.0"
  },

  "info": {
    "label": "Senior Developer",
    "characterClass": "Programmer",
    "brief": "**Full-stack software developer with 6+ years industry experience** specializing in scalable cloud architectures for this, that, and the other. A native of southern CA, Jane enjoys hiking, mystery novels, and the company of Rufus, her two-year-old beagle.",
    "image": "jane_doe.png",
    "quote": "Be the change you want to see in the world."
  },

  "contact": {
    "website": "http://janef.me/blog",
    "phone": "1-650-999-7777",
    "email": "jdoe@onecoolstartup.io",
    "other": [
      {
        "label": "Home Phone",
        "flavor": "phone",
        "value": "1-650-999-4321"
      },
      {
        "label": "Work Phone",
        "flavor": "phone",
        "value": "1-650-777-1234"
      },
      {
        "label": "Personal Email",
        "flavor": "email",
        "value": "jane@janef.me"
      }
    ]
  },

  "location": {
    "address": "Jane Fullstacker\n123 Somewhere Rd.\nMountain View, CA 94035",
    "city": "Mountain View",
    "region": "CA",
    "code": "94035",
    "country": "US"
  },

  "social": [

    {
      "label": "GitHub",
      "network": "GitHub",
      "user": "janef-was-here",
      "url": "https://github.com/janef-was-here"
    },

    {
      "label": "Twitter",
      "network": "Twitter",
      "user": "janef-was-here",
      "url": "https://twitter.com/janef-was-here"
    }
  ],

  "employment": {

    "summary": "7+ years industry IT and software development experience.",

    "history": [

      {
        "employer": "One Cool Startup",
        "url": "https://onecool.io/does-not-exist",
        "position": "Head Code Ninja",
        "summary": "Development team manager for [OneCoolApp](https://en.wikipedia.org/wiki/Vaporware) and OneCoolWebsite, a free social network tiddlywink generator and lifestyle portal with over 200,000 users.",
        "start": "2013-09",
        "current": true,
        "keywords": ["Agile","PM","Amazon Web Services","AWS"],
        "highlights": ["Managed a 5-person development team", "Accomplishment 2", "Etc."]
      },

      {
        "employer": "Veridian Dynamics",
        "url": "https://en.wikipedia.org/wiki/Better_Off_Ted#Plot",
        "position": "Principal Developer",
        "summary": "Developer on numerous projects culminating in technical lead role for the [Jabberwocky project](http://betteroffted.wikia.com/wiki/Jabberwocky) and promotion to principal developer.",
        "start": "2011-07",
        "end": "2013-08",
        "keywords": ["C++","C","Linux"],
        "highlights": ["Managed a 5-person development team", "Accomplishment 2", "Etc."]
      },

      {
        "employer": "Stark Industries",
        "position": "IT Administrator",
        "summary": "Junior programmer with heavy code responsibilities. Promoted to intermediate role after 6 months.",
        "start": "2008-10",
        "end": "2011-06",
        "keywords": ["Novell","Active Directory","Linux","Windows"],
        "highlights": ["Promoted to intermediate developer after 6 months", "Accomplishment 2", "Etc."]
      },

      {
        "employer": "Dunder Mifflin",
        "position": "Intern",
        "summary": "Performed IT administration and deployments for Dunder Mifflin.",
        "start": "2008-06",
        "end": "2008-09",
        "keywords": ["Novell","Active Directory","Linux","Windows"],
        "highlights": ["Supervised roll-out of Dunder Mifflin Infinity website.", "Performed mission-critical system backups and ", "Etc."]
      }
    ]

  },

  "education": {

    "summary": "",

    "level": "degree",

    "degree": "BSCS",

    "history": [

      {
        "institution": "Cornell University",
        "url": "https://www.cornell.edu/",
        "start": "2005-09",
        "end": "2008-05",
        "grade": "3.5",
        "summary": "A multiline summary of the education.",
        "curriculum": ["Course 1", "Course 2", "Course 2"]
      },

      {
        "institution": "Medfield College",
        "url": "https://en.wikipedia.org/wiki/Medfield_College",
        "start": "2003-09",
        "end": "2005-06",
        "grade": "3.2",
        "summary": "A multiline summary of the education.",
        "curriculum": ["Course 1", "Course 2", "Course 2"]
      }
    ]

  },

  "service": {

    "summary": "Active US Army Reserve member and Technology for Tots technical consultant and volunteer coordinator.",

    "history": [
      {
        "flavor": "volunteer",
        "position": "Technical Consultant",
        "organization": "Technology for Tots",
        "url": "http://technology-for-tots.org",
        "start": "2003-11",
        "end": "2005-06",
        "summary": "Summary of this volunteer stint.",
        "highlights": ["Accomplishment 1", "Accomplishment 2", "etc"]
      },
      {
        "flavor": "military",
        "position": "NCO",
        "organization": "US Army Reserves",
        "url": "http://www.usar.army.mil/",
        "start": "1999-11",
        "end": "2003-06",
        "summary": "Summary of this military stint.",
        "highlights": ["Accomplishment 1", "Accomplishment 2", "etc"]
      }
    ]

  },

  "skills": {

    "sets": [
      {
        "name": "Web Development",
        "level": "advanced",
        "skills": [
          "JavaScript", "HTML 5", "CSS", "LAMP", "MVC", "REST"
        ]
      },
      {
        "name": "JavaScript",
        "level": "master",
        "skills": [
          "Node.js", "Angular.js", "jQuery", "Bootstrap", "React.js", "Backbone.js"
        ]
      },
      {
        "name": "Database",
        "level": "intermediate",
        "skills": [
          "MySQL", "PostgreSQL", "NoSQL", "ORM", "Hibernate"
        ]
      },
      {
        "name": "Cloud",
        "level": "intermediate",
        "skills": [
          "AWS", "EC2", "RDS", "S3", "Azure", "Dropbox"
        ]
      },
      {
        "name": "Project",
        "level": "beginner",
        "skills": [
          "Agile", "TFS", "Unified Process", "MS Project"
        ]
      }
    ],

    "list": [
      {
        "name": "C++",
        "id": "1",
        "summary": "Optional summary of your experience with the skill.",
        "level": "9",
        "years": 7,
        "proof": "http://myblog.com/interesting-cplusplus-post"
      },
      {
        "name": "Ruby",
        "id": "2",
        "summary": "Optional summary of your experience with the skill.",
        "level": "9",
        "years": 7,
        "proof": "http://myblog.com/interesting-cplusplus-post"
      },
      {
        "name": "Xcode",
        "summary": "Xcode 6 development.",
        "level": "5",
        "years": "3"
      },
      {
        "name": "Linux",
        "summary": "Optional summary of your experience with the skill.",
        "level": "advanced",
        "years": "4+"
      },
      {
        "name": "Agile",
        "summary": "Optional summary of your experience with the skill.",
        "level": "B+",
        "years": 2
      }
    ]
  },

  "samples": [
    {
      "title": "Asteroids",
      "summary": "A browser-based space shooter built on Three.js.",
      "url": "http://janef.me/asteroids",
      "date": "2014-09"
    },
    {
      "title": "Rememberpedia",
      "summary": "A website to help you remember things.",
      "url": "https://rememberpedia.com",
      "date": "2015-07"
    }
  ],

  "writing": [
    {
      "title": "Teach Yourself GORFF in 21 Days",
      "flavor": "book",
      "date": "2008",
      "publisher": {
        "name": "Amazon",
        "url": "https://www.amazon.com"
      },
      "url": "http://url.to.publication.com/blah",
      "author": [ "Jane Fullstacker", "John Smith" ],
      "summary": "A primer on the programming language of GORFF, whose for loops are coterminous with all of time and space."
    },
    {
      "title": "Building User Interfaces with Electron and Atom",
      "flavor": "article",
      "date": "2011",
      "publisher": {
        "name": "Code Project",
        "url": "http://codeproject.com"
      },
      "url": "http://codeproject.com/build-ui-electron-atom.aspx"
    },
    {
      "title": "Jane Fullstacker's Blog",
      "flavor": "blog",
      "date": "2011",
      "publisher": {
        "name": "self",
        "url": "http://janef.me"
      },
      "url": "http://janef.me"
    }
  ],

  "reading": [
    {
      "title": "Code Complete",
      "flavor": "book",
      "url": "http://www.cc2e.com/Default.aspx",
      "author": "Steve McConnell"
    },
    {
      "title": "r/programming",
      "flavor": "website",
      "url": "https://www.reddit.com/r/programming/"
    },
    {
      "title": "Hacker News / YCombinator",
      "flavor": "website",
      "url": "https://news.ycombinator.com/"
    },
    {
      "title": "Coding Horror",
      "flavor": "blog",
      "url": "http://www.codinghorror.com",
      "author": "Jeff Atwood"
    }
  ],

  "speaking": [
    {
      "title": "Data Warehousing Evolved: DARMA 2.0",
      "role": "Speaker",
      "event": "OPENSTART 2013 Developer's Conference",
      "location": "Portland, OR",
      "date": "2012",
      "highlights": [
        "Won 'Best Presentation on an Emerging Technical Field' prize."
      ]
    }
  ],

  "recognition": [
    {
      "flavor": "award",
      "from": "Google",
      "title": "Honorable Mention",
      "event": "Summer of Code",
      "date": "2012"
    },
    {
      "flavor": "honor",
      "from": "Cornell University",
      "title": "Summa cum laude",
      "event": "graduation",
      "date": "2012"
    }
  ],

  "references": [
    {
      "name": "John Davidson",
      "flavor": "professional",
      "private": true,
      "contact": [
        {
          "label": "Mobile",
          "flavor": "phone",
          "value": "9-(999)-999-9999"
        },
        {
          "label": "Work email",
          "flavor": "email",
          "value": "jdavidson@veridiandynamics.com"
        }
      ]
    }
  ],

  "testimonials": [
    {
      "name": "John Davidson",
      "flavor": "professional",
      "quote": "Jane is awesome! I'd hire her again in a heartbeat.",
      "private": true
    },
    {
      "name": "Elias Fullstacker",
      "flavor": "technical",
      "quote": "I worked with Jane on Jabberwocky and can vouch for her awesome technical capabilities and attention to detail. Insta-hire."
    },
    {
      "name": "Dana Nevins",
      "flavor": "personal",
      "quote": "I've known Jane personally and professionally for almost ten years. She is one in a million."
    }
  ],

  "languages": [
    {
      "language": "English",
      "level": "Native"
    },
    {
      "language": "Spanish",
      "level": "Moderate",
      "years": 10
    }
  ],

  "extracurricular": [
    {
      "title": "Bay Area Crew Club",
      "activity": "",
      "location": "San Francisco, CA",
      "start": "2014-05"
    },
    {
      "title": "Organizer / Manager",
      "activity": "JavaScript Game Development Meetup",
      "location": "Austin, TX",
      "start": "2011-03",
      "end": "2014-01",
      "highlights": [
        "Monthly speaker on creative JavaScript development.",
        "Founded group and oversaw growth to 500+ members."
      ]

    }
  ],

  "governance": [
    {
      "flavor": "board",
      "role": "Member",
      "organization": "The Mommies Network",
      "url": "http://themommiesnetwork.org",
      "start": "2008-02",
      "end": "2010-01",
      "summary": "Since 2008 I've been a full-time member of the board of directors for TMN."
    },
    {
      "flavor": "committee",
      "role": "Academic Contributor",
      "organization": "Khronos Group",
      "url": "https://www.khronos.org",
      "start": "2015-01",
      "highlights": [
        "Participated in GORFF standardization process (Draft 2)."
      ]
    }
  ],

  "interests": [
    {
      "name": "reading",
      "summary": "Jane is a fan of mystery novels and courtroom dramas including Agatha Christie and John Grisham.",
      "keywords": [ "mystery", "Agatha Christie", "John Grisham" ]
    },
    {
      "name": "hiking",
      "summary": "Jane enjoys hiking, light mountain climbing, and has four summits under her belt!"
    },
    {
      "name": "yoga"
    }
  ]
}

Ok so you get the idea…

Publishing your Ultimate Developer CV

You can publish your resume to jsonresume.org with:

resume publish

to get the pdf version use:

resume export resume.pdf

This will also validate the CV making sure your format is correct, you can fix it with the schema but sometimes you will have to check their sample resumes.

But you can get sooo.. much more…

ultimate developer CV we use NPM
We Use NPM to get the tools for the CV creator

Hacking You Ultimate Developer CV

You can use this awesome github repo: hackmyresume to hack your CV…ie. make it the ultimate developer CV.
The documentation on the repo is awesome so it will do better than I do..

Installing:

sudo npm install -g hackmyresume

You will need wkhtmltopdf:

Install with sudo apt-get install wkhtmltopdf or with brew brew install Caskroom/cask/wkhtmltopdf.

While you are doing that install a Latex Environment because some heavy compsci guys like that sort of thing:

brew install Caskroom/cask/mactex

But to get your resume into all the basic formats use:

hackmyresume BUILD resume.json TO out/resume.all

You can also pass the theme in with -t with the following prebuilt themes:
positive, modern, compact, minimist, and hello-world

You can also validate you ultimate developer CV with hackmyresume:

hackmyresume VALIDATE resume.json

Last 2 Steps in Creating the Ultimate Developer CV

Version Control

Use git to version control your cv:


git init
echo "out/" > .gitignore
git add .
git commit -m "Created CV"

Double Check it is looking good

Always go through your CV and make sure everything is as expected for your Ultimate Developer CV.

Ideally you want to work for the company you are applying for so adding additional info like motivation for the job might be good.

All the best.

Minimum Viable Product (MVP), A Pragmatic Approach

MVP, in the software development context does not stand for Most Valuable Player it actually stands for Minimum Viable Product. It is the road less travelled in South Africa, especially in corporate and consultant firms. This is partly because it is not understood, even partly.

So now we have a…

Pragmatic Approach to Minimum Viable Product

Forget the theory and words. Let us use Minimum Viable Product in a real life example and possibly produce a Most Valuable Player.

So let us start with the idea, the thing that is the spark behind all software projects hopefully.

The Ideaminimum-viable-product-boiled-egg

I have always had trouble determining how long I should boil an egg for to create a perfect soft boiled egg. So in the Eating your own Dog Food mindset, I want to create a mobile app timer for this purpose.

There is also a caveat that at different atmospheric pressure/altitude (Cape Town vs Centurion) the egg requires less or more time.

Now Let your Inner Client / Corporate Get Excited and Think of Ideas

… and I’m going to be the one to shut them down later

  1. Lets Get the Location from GPS on the Phone/Device, use that to get the altitude then work out cooking time perfectly based on that.
  2. The app can be used world-wide so we will build to the app for all possible users.
  3. We can crowdsource the ratings of how good the timings are, by giving a rating system after the timer has run so other users/us can see if in a specific area if timing is slightly off.
  4. There should be a slider of soft to hard of how hard/soft you want the egg and timing should adjust
  5. We will build an app for Android and iOS natively

Wow! This really is sounding like an amazing feature-filled app! – Client/Corportate Clown

minimum-viable-product-what-to-say-to-client

Now the Pragmatic MVP Approach

What is the Minimum we need to get this app into the app store and getting users? Or rather what is the minimum the app store / play store user needs? The answer should be a single thing.

An App that has a timer for the “Perfect Soft Boiled Egg” that indicates to the user to start the timer when the water is boiling. A Notification or Sound should play when the timer ends.

That is is, that is the minimum we need for the product to be viable to a typical user.

But something that I feel should be added to the  MVP (Minimum Viable Product) philosophy is that it should target the most amount of users. That is the ultimate goal for most good apps is: Lots of Users. As once you have the users, you can drive changes and make more informed decisions about the future of the product/ project.

So for me the MVP Process is Creating the Most Valuable Product with the Least Amount of Features to attract the Most Amount of Users.

Criticism of the Inner Client/Corporate Ideas

  1. NO! No! No! No GPS…theres too many things that can go wrong and integrating with the service is a nightmare. Then cases where people have turned off GPS and incorrect locations. As a developer I don’t want this shit. Instead we will add options for: Coastal, Inland and Highveld, a selection list before the timing.
  2. Building the app for all possible users is good as we want more users but think of the effort required for this…internationalisation and testing local eggs in different countries. I think this is a case where keeping it local feels more worthwhile. The local experience will allow for a faster development process.
  3. Crowd Sourcing Ratings sounds an excellent idea. But it is another screen that has less value than the main feature. Leave it alone. Also we don’t have any Users yes. So the feature is of 0% use right now. That way if no one ever uses the app we won’t have created another useless feature.
  4. A slider for soft to hard, sounds like a lot more dev work and calculations. But having a selection of soft, medium and hard is an idea that might work.It is quick to develop and as a guess I would say it may open up more users (The hard and Medium Crowd). Good Idea.
  5. Building the app natively. Yeah Hell no! Never build apps natively unless it is 100% unavoidable. Why build two apps when you can have a single code base managed by a single developer when using a Hybrid App Builder

It is better to have a working product out as soon as possible and continue tinkering and making changes based on what the user actually wants, than guessing what a user wants an spending too much time creating it finding that you were wrong in the first place.

Minimum Viable Product

So that is the gist of it…

Concluding the Pragmatic MVP Approach

Sure your client and your shitty Project Manager won’t be happy. They want Chandeliers and Persian Carpets with a Massive Release. But why do that to yourself as a business owner of developer. That is all guesswork, it’s bullshit.

Remember MVP (Minimum Viable Product) fits right into most proper agile methodologies like letting users guide the work and features on the app, less is more, continuous integration

Do the minimum to get the most users and once you have a decent number of users its harder to make your product worse and easier to make it better.