Market Yourself

Want to score your dream job and go work for Google, Netflix, Amazon, Github, and the like? The big question: “How do I do it?”

Market yourself, of course!

What do these companies want?

These companies only hire the best of the  best. But what does that really mean? You may see some of the following traits on job postings or you may pick them up from the people who already work at these companies:

  • Continuous improvement
  • Feedback/data driven
  • Solve the toughest/biggest problems
  • Extremely collaborative
  • Intuitive

“I’ve got all of those traits! I should have no problem getting hired”.

Sure, you may be qualified, but how do you stand out from the person beside you who’s as qualified as you are? There are plenty of methods that can make you stand out in the minds of recruiters, hiring managers, and even high level employees of the company.

Market Yourself

Marketing is the action of promoting and selling products or services

Marketing yourself is therefore promoting and selling your skills and providing value to a company.

Standing out from the crowd involves work! I listened to an excellent podcast from Software Engineering Radio titled SE Radio Episode 245: John Sonmez on Marketing Yourself and Managing Your Career. John provided some helpful methods on standing out from the crowd, getting noticed by the people who can help you get your dream job, and useful tips on managing your career to make it the best it can be.

A few of the methods mentioned in the podcast are listed below:

  • Get a blog and write a post every week
  • Specializing your career
  • Attending/presenting at meetups
  • Interact with the blogs/social media of developers at the target companies
  • Contribute to open-source projects

The bottom line is to be passionate about everything you do. When you’re giving off that vibe, others can’t help but notice the energy and detail put into everything: blog posts, conversations, presentations… the list is endless. More people remember an enthusiastic person than someone who’s not interested in what they’re talking about. Being detailed in your work is the bare minimum. Expression is key.

Blogging

Writing is one of the best mediums for sharing information. Blogging has the lowest barrier of entry. There is a huge and rich amount of content out there on anything and everything, especially in tech. Ideas are thrown back and forth, constantly iterated, all the while being kept around for others to read years later. One person’s blog post today is another person’s learning opportunity later. Read Why You Should Write Blogs by Steve Yegge for a deeper understanding of this powerful medium.

WordPress.com or Blogger are great services to get going. If you’re more technical, you can use GitHub Pages or even host your own. At the end of the day it doesn’t matter where it’s hosted or that you have a fancy domain name; all that matters is the content and what the readers get out of it.

Your blog can be about anything. I like writing about topics surrounding software development, both involving hard and soft skills. Having a prospective company see you go into depth on various topics gives them more confidence that you’re the right person for the job. Blogging also hones in your understanding of the topic you’re writing about and, over time, improves your communication skills.

There’s only so many people you can talk to. Writing allows you and your ideas to spread without limits.

Specializing

It’s best to be a specialist. Who’s going to receive a larger salary and gain more attention: a Fault-tolerant Docker Microservices Engineer or a Software Developer? Definitely the Fault-tolerant Docker Microservices Engineer.

Lets say I write a lot about fault-tolerant Docker microservices. To visitors of my website they can see that I know a lot about fault-tolerant Docker microservices. From now on they’ll associate me with being very informative and skilled in things fault-tolerant Docker microservices. Once the viewers have an understanding that I’m skilled in fault-tolerant Docker microservices I can expand to writing a lot about Docker microservices in general. I can then be known by others as the guy who knows a lot about Docker microservices. As time goes on and I become more popular I can expand to all of Docker and be known as the Docker guy.

Start small and specialize in a certain area. Its easier to stand out that way since you’re up against less and less people. Once people notice that you’re a specialist for subject X, the association will stick. From then on you can use this to your advantage. Say the company you’re wanting to work at is hiring for the job you’re specializing in. If people from the company know that you’re skilled in this subject they can recommend you to the hiring managers. You can use this tactic with some of the others listed here to get recommended by the employees of the company.

Attending Meetups

Going to a meetup and striking up a conversation with other attendees leaves a (hopefully) positive view of you on them. This is pretty much networking. In the podcast, John Sonmez stated that it is important to have a conversation with the individual without bugging them to help you get a job when you first meet. Meeting these people months before actually asking for their help to get a job improves your chances greatly since you’ve already met the person. It’s even better if you offer to help them. Then they’re more than likely to help you out and do whatever to pay you back.

Performing a talk at a meetup or conference is a great way to get noticed. The meetup or conference does a lot of the marketing for you already! Your name and title of the talk is advertised both at the venue and online. After the event a lot of references to you and the talk are put on the event’s website, YouTube recordings of your talk and news blogs. The viewers are trying to get as much useful information out of your talk. You have to prove that you have useful information. You’ll want to hook your viewers into wanting more information. At the beginning and end of the presentation you can mention your contact information (email, Twitter, GitHub, website..) and even offer a link where the viewer can go to get more information.

In the presentation, including links to extra materials can send those viewers to your blog, GitHub, or wherever else. Mentioning that you do consulting or are looking for an employer (only if you don’t have one!) puts the word out there since it can’t hurt.

Other Blogs and Social Media

Following and having useful conversations on the blogs of employees at the company you’re trying to get into, as well as the blogs of others in the same tech community gets you noticed over time. When a company is in the process of hiring, the employees can vouch for your skills, immediately putting you ahead of other candidates. If things go really well, the company can straight out offer you a position, bypassing the interview, giving you the upper hand at negotiating your salary, benefits and anything else.

Contribute to Open Source

Working on open source projects is one of the new contenders of things that tech companies are looking for in a developer. Its been proven by some companies already that they hire based on your GitHub profile. Contributing to an open source project or two shows that you’re capable of remotely working and good at collaborating with others. It also allows the hiring managers and recruiters to look at the code you write (eg. code style, design), something not shown on a resumé.

Even better, contributing to an open source project belonging to the company that you’re trying to get a job with looks very impressive when they start looking for candidates. If they can see all the contributions that you’ve made to their open source projects, it’ll look amazing since your skills have already shown business value. The company can more easily see the value you would bring to the software that they develop.

Working on your own side projects is always beneficial. It shows that you are creative and intuitive at solving your own problems and have the drive to make things better where you see fit.

Hacking the Interview

A few tricks were mentioned around hacking the interview. One of them mentioned earlier, is for the company to want to hire you right off the spot, bypassing the interview entirely. This could mean that you’ve received a recommendation from someone or your personal marketing has worked! This situation is pretty hard to get so the next tip is one we can all use to positively affect our interview outcome.

Another smart trick involves requesting “just five minutes to chat” sometime before the interview. Either over the phone or in person, this conversation allows you to talk freely with the interviewer to find out more about them and the company, including talking about yourself. Once your interview time comes along, the edge is already off since you’ve talked with the hiring manager already. Humans can be biased when it comes to mostly objective tasks such as finding the best candidate for a job. Once you get the interviewer to like you, they work in your favour, often weighing the candidates they like over others.

The Book

soft-skills-the-software-developers-life-manualMentioned in the podcast, John Sonmez has published a book titled Soft Skills: The software developer’s life manual which sounds like a must read. He raises the point that the chapters are short, allowing for ~5 minute start-to-finish reads. There are 71 chapters in total, organized into seven sections. The section list is as follows:

  1. Career
  2. Marketing Yourself
  3. Learning
  4. Productivity
  5. Financial
  6. Fitness
  7. Spirit

I haven’t read the book yet, but I definitely will soon. I’m happy that I’m on the right track so far for my personal marketing based on the sections of this book. Besides the book sounding very helpful, you can’t knock the five stars and 178 reviews on Amazon.com!

Conclusion

It’s not an effortless path. Putting in the time and effort over months or years to market yourself gives big returns in the form of giving you more potential, allowing you to make the most of your career.

Take charge of your career. Follow your aspirations and make it count! I certainly will.

Hook, Line and Sinker: How My Early Interests Got Me to Where I Am Today

Having an exciting software job at a newly-acquired company is opening up so many possibilities, and making possible the projects that I want to accomplish to make things better. Whether its big projects like containerizing our multiple apps for scalability, implementing Continuous Delivery to ship our software faster, or smaller projects like versioning our dependencies for traceability and ease of deployment, or updating to the latest Java version for performance improvements and to use all the new libraries; it’s nonstop fun that upgrades my problem solving skills, improves the lives of our team and customers, and gives me a track record of making positive change.

After finishing school I can focus more on teaching myself new skills and technologies that I can use and apply during my professional career. Currently I listen to DevOps and software podcasts when I’m traveling to places and I read a few articles about Docker and other technologies when I have free time. My next logical step is to start applying the knowledge I’ve gained both at work and as side projects.

At least it’s not all bad in the academia life: this fourth year Computer Security class that I’m taking is immensely fun. I’m glad that I have a captivating class this semester. I can give credit to the Security Now podcast for which I’ve listened to around 500 of its 543 episodes as of this writing (read: 10 years of listening!), for giving me the practical knowledge of current security practices and news, diving deep into the details where necessary.

Dr Anil Somayaji, the professor of the Computer Security course, is an excellent lecturer and a hacker at his roots. His interactive teaching style makes the possibly dry subject of security interesting (if you think of security as dry. Who would?), and his course work is very useful in that it promotes self teaching and helping out others. Each week every student must submit a hacking journal. It consists of the student writing about their adventures, frustrations, successes and failures of hacking on security related things – whether that involves using Metasploit to break into a computer, putting a backdoor into OpenSSH, figuring out how to configure a firewall, etc. The list goes on and on. An online chatroom is used to share resources and chat with other members of the class to figure out hacking problems and interact with the professor. (Other classes should definitely start using this)

I’m glad to have had the drive to explore and learn when I was young. Throughout my childhood I would spend my time hacking gaming consoles, jailbreaking iPods, experimenting with Linux, and most of all having a website! Not this website, there was a website before jonsimpson.ca. It was jonniesweb.com. I prominently remember creating logos for my website in MS Paint, printing them out and putting it up beside the Canadian flag that was posted in my fifth grade class. I would use MS Front Page 97 to add jokes, pictures, cheat codes, YouTube and Google Video links, games, and referrals to other friend’s Piczo sites. I remember going through a few designs: spaced themed, blue themed, red themed… I even got interested in PHP and used a sweet template. Each iteration improving with content and coding skills.

Then middle school and high school caught up with me and I stopped updating the website. Sooner or later my dad stopped supporting my hobby, eventually letting the web hosting expire.

Fast forward a few years and what was once a childhood interest has turned into an education and career choice. Building a website sparked the fire, pursuing a degree gave me the drive, and doing co-op (soon to be full-time) at work has shown me the many different problems to be solved.

My plan is to work my ass off in all of my classes, finish up my degree and follow my passions, utilizing my knowledge and expressing my solutions at both my job and in my blog. Ultimately trying to build a successful and happy career.

At the moment I’m just glad that I don’t have a crappy professor.

Push-button Deployment of a Docker Compose Project

I was recently working on figuring out how to automate the deployment of a simple docker compose project. This is a non mission-critical project that consisted of a redis container and a Docker image of Hubot that we’ve built. Here’s the gist of the docker-compose.yml file:

Whenever a new version of the zdirect/zbot image is updated and published to the registry a deploy script can be run. For example, the script used to automatically deploy a new version of a Docker Compose project is shown here:

Yup, that’s all. Its that simple. Behind the curtains, this command pulls the latest version of the image. Since the docker-compose.yml file doesn’t specify a tag it defaults to latest. The old container is then removed and a new one started. Any data specified in volumes are safe since its mounted on the host and not inside the container. Obviously a more complicated project would have a more involved deployment, but simpler is better!

Integrating this deployment script into Rundeck, Jenkins or your build tool of choice is a piece of cake and isn’t covered here, but might be in a future post. This automation allows you to bridge the gap between building your code and running it on your servers, aka the last-mile problem of continuous delivery.

Acquisition, Docker and Rundeck

travelclick-logoZDirect, the wonderful company I work for has been acquired by TravelClick, a billion dollar hospitality solutions company.

First of all: Woohoo! I can’t be more excited to be around at this time to jump-start my career.

One of the changes to occur as soon as possible is the consolidation of our datacentre into TravelClick’s. One of our devs recently found out about Docker and got interested about its power (Hallelujah! Finally it’s not just me who’s interested). Later I bring up Rundeck, a solution to organizing our ad-hoc and scheduled jobs that will assist in the move to Docker.

Docker

docker-largeHis plan is to Dockerize everything we have running in the datacentre to make it easier for our applications to be run/deployed/tested/you-name-it. The bosses are fine with that and are backing him up. I’m excited since this is a fun project right up my alley.

Since I’m working my ass off trying to finish my degree, I’m only in one day of the week to wash bottles and offer some Docker expertise. Last Friday I had a good chat with the dev working on the Docker stuff. We chatted about Kubernetes, Swarm, load balancing, storage volumes, registries, cron and the state of our datacentre. It was quite productive since we bounced ideas off of each other. He’s always busy, juggling a hundred things at once so I offered to give him a hand setting up a Docker registry.

By the end of the day I had a secure Docker registry running on one of our servers with Jenkins building an example project (ZBot, our Hubot based chatroom robot), and pushing the image to the registry after it is built. An almost complete continuous delivery pipeline. What would make this better is a way to easily deploy the newly created Docker image to a host.

Rundeck

rundeck-logoRundeck is a job scheduler and runbook automation tool. Aka it makes it easy to define and run tasks on any of the servers in your datacentre from a nice web UI.

Currently, we have a lot of cron jobs across many servers scheduled to run periodically for integration, backup and maintenance. We also ssh into servers to run various commands for support and operations purposes.

Here’s the next piece to our puzzle. Rundeck can fit into many of our use-cases. A few of them are as follows:

  • Deployment automation (bridge the gap between Jenkins and the servers)
  • Run and monitor scheduled jobs
  • Logging and accountability for ad-hoc commands
  • Integrate with our chatroom, for all the ChatOps
  • Automate more of production

As we move towards Dockerizing all of our apps, we have to deal with the issue of what we’re going to do with the cron jobs and scheduled tasks that we run. Since we’re ultimately going to move datacentres it makes the most sense to take the cron jobs and turn them into scheduled jobs in Rundeck. That way we can easily manage them from a centralized view. Need to run this scheduled job on another machine? No problem, change where the job runs. Need to rerun the scheduled job again? Just click a button and the scheduled job runs again.

The developers wear many hats. Dev and ops are two of them. Because we’re jumping from mindset to mindset it makes sense to save time by automating the tedious while trying not to get in the way of others. Rundeck provides the automation and visibility to achieve this speed.

With the movement of putting all our apps and services into Docker containers, Rundeck will allow us to manage that change while being able to move fast.


If you’re interested in joining us on this action packed journey, we’re hiring.

Twenty-one!

“Why am I not in the US of A right now?” Good question. That’s what my dad asked me when he congratulated me on my 21st birthday this past October 1st.

Not being in the US this Thursday evening for academic reasons, I spent Wednesday night with my roommates grabbing a few exotic beers at our local pub. The past week has been heavy with assignments and a midterm already, which is why this post has been delayed – but enough with the excuses!

Some of the achievements or big changes that have occurred since my last birthday have been the following:

  • Visited and vacationed in the USA for the first time
  • Moved into a new (and nicer) house with my roommates
  • Became a happier person through mindfulness
  • Expanded my beer and wine taste

This past year I’ve also been working on a bunch of small projects, some of them I’ve been actively working on, others I haven’t. I’ve pressed 3,139,757 keys and 769,532 mouse clicks, made 310 contributions to repos on my GitHub, read 5 books, and am still reading 6 books.

I’m more than half-way through my Computer Science program at Carleton. 3.5 years in and I’ve got less than a year and a half to go. It gets more exciting as the topics I’m studying get more advanced and interesting. I’m looking forward to finishing and starting my full-time career.

I must have read a countless number of articles; pretty much every day covering topics from Docker, continuous delivery, microservices, distributed systems, coding, and programming languages. I’m amazed at how much I’ve read and how I apply it to my work and experiment.

This year I really want to make drastic improvements to the operations side of my job at ZDirect, learn Go, Ruby and Coffeescript (in that order), become more mindful, and get into shape (because keyboard arms aren’t sexy).

Introducing ChatOps to my Workplace: Hubot

Hubot? You may not have heard of it, but its pretty much the workhorse of ChatOps. Hubot is a scriptable chatroom robot. It can integrate with many chat services and comes with a huge community of plugins and extensions.

In the previous post I talk about ChatOps, Slack, and how I plan on introducing it to my workplace.

Hubot is an IRC/campfire bot designed to give some character to your team’s channel. It has various commands for inserting photos in your chat, fetching stuff, and, indeed, running pre-configured commands.

There exists many other chatbots, but Hubot is the most popular. You can get scripts for anything: showing images, interacting with Jenkins, ship it squirrel, pager-duty, and hubot-plusplus, where the points don’t matter.

All of the plugins are written in coffeescript and follow a simple input/output design using regular expressions. Persistence is included as well, using Redis as the datastore.

Writing Hubot scripts can automate tasks while presenting a simple interface to interact with. Writing custom scripts adds useful insights and actions into your business and software.

So far I’ve written a custom Docker image that contains everything needed to run Hubot, bundled with a bunch of scripts. Everything is kept in a Git repository on our SCM server.

In the future, I plan on making the Docker images more extensible by separating the configuration from the code, then publishing it to my GitHub.

I also want to use Docker Compose to define a Redis container as a dependency of the Hubot container. This primarily allows for the Hubot container to be destroyed and rebuilt while the data stays safe in its own container.

Introducing ChatOps to my Workplace: Intro

slack_colour_rgbWhat is a ChatOps?

Last week my roommate talked about how he was building custom integrations for his Company’s Slack service. He was adding commands that would easily allow their client service team to extend the trial periods of their customers and other useful features. He was also in the process of working on being able to deploy their app to amazon via a single command.

All of these spells one thing: Productivity.

Trying to keep up with drinking as much of the new enterprise technology kool-aid, an excellent talk (slides) by Jesse Newland that I keep going back to every once in a while shows the power and benefit behind ChatOps.

Dissecting this buzzword, the true benefit behind this technology and culture is giving:

Visibility – Seeing what other people are doing and show what you’re doing to others to provide visibility and accountability into the operations that are performed. Sure, someone can say that they’re fixing the unresponsive server, but it’s not clear how they’re doing it and if its fixed yet without asking them. With all the operations used to fix such an issue available in a common chat room, its straightforward for others to read what was done in real time.

Learnability – Sure, you can have documentation and training to bring people on board, but nothing compares to seeing things done every day, most importantly their first day. In no time, a new employee can get up to speed faster than having to read through a lot of boring documentation.

Pairing – Allowing two or more people to solve a problem together. Much like pair programming, it is the practice of having more than one brain working on a problem or even passively observing. Pairing allows for more scenarios to be explored and better reasoning.

Automation – Simplifying tasks to the extreme. No need to log into a server, find and run a script. Just have a command in the chat room that does it. The command acts as a facade, presenting a clean api into your business activities. Being able to automate to the level of not having to switch out of the chat room is an amazing improvement in productivity.

Sneaky Implementation

On my self assigned task to improve productivity and culture at my workplace, many other developers and I are pinned in a rut of completing support tasks and fixing bugs for our software. Between tasks I’ve set up Slack and have been integrating our services into it. My goal is to ultimately reveal it slowly to other developers, gaining momentum until critical mass is reached, where the majority of my colleagues praise Slack and the power of its usefulness until it becomes the de facto messaging and team communication tool.

So far I have integrated our build server, Jenkins, and the source code repository, Gitlab, into Slack. Both of those are only dumb endpoints which dump data into Slack, but its already super interesting to have the visibility of just these services together. Nagios checks, and maybe even Hubot, a chat room robot, will come next.

The stream of messages created when someone pushes code, the code being built, and then the test results reported back. Its taking Continuous Integration and reporting all of the activities to a central location!


See the next post following the theme of ChatOps, this time about Hubot, the chatroom robot.

FPGA-Friday

Joking around with my roommate who works in an embedded computing software and hardware company, we started cracking jokes about the day Friday.

His form of the common expression TGIF, is FPGA-Friday at his workplace. FPGAs are so commonplace that everyone takes out their FPGAs and geeks out with each other at the end of the day.

FPGA-Friday just rolls off the tongue.


Photo from raggle.

Where’s the warm weather? I want to go biking!

Getting distracted from working on school things, I stumble upon GoBiking.ca and remember the promise I made to myself last summer to explore the Ottawa-Gatineau region on my bike.

Last summer I went on two long trips. One was from The Hogs Back area into Gatineau Park’s Lac Meech. The other trip was from Hogs Back to Britannia Park.

IMG_20140726_172225
Stone balancing along the Ottawa river

Over those two trips I had my beater Super-cycle generic mountain bike. Since that got stolen, I ended up getting a nice road bike. The weight difference and amount of speed you can get up to effortlessly has changed me for the better. Unfortunately I never went on a nice long trip with this new bike yet, only commuting the 7 kilometres to work every day, which was fine, but I’m regretting it now.

That regret is about to get flipped this year! When the nice warm spring weather comes, I’m immediately hopping on my bike and heading over to Timbuktu. Okay, maybe I’ll coast up the east side of Ottawa river and back, since I haven’t done that route yet.

I do plan on heading back into Gatineau park this year to do more sightseeing and to see if I can reach Lac Philippe. Me and my friends were considering camping up on Lac Philippe one of the weekends, but we never got around to planning it out. I recently head that the park shuts down the roads to cars on Sunday which is awesome! No fear of cars sneaking up on you.

IMG_20140608_181204
The Lac Pink lookout point provides a good view

Just out of curiosity I looked up the biking directions from Ottawa, to my cottage in Gravenhurst, Ontario. A good 440 kilometres. Practically a 2 or 3 day bike. One time my family and I drove that route. I remember it being immensely beautiful with the fog rolling in among the hills. I’d definitely take a sports car along that route, but this is a post about bicycling, not one about cars. This trip is definitely out of my skill range, but a boy can dream, can’t he?

IMG_20140604_195233
A female deer along the west end of the Ottawa bike paths

Some maintenance I definitely have to do to my bike this season is to get better tires and brakes. I managed to pop both the front and back tires multiple times last year hitting potholes and sewer drains. It might just be me not pumping up the tires enough. The brake pads can definitely be replaced. If I remember correctly, only one set of brakes works fully. The other just slows the bike to a stop.

I can’t wait for the warm weather to come. I’m setting a goal for myself to get out and ride around the Ottawa-Gatineau region more than last year!