Technical Debt

Technical debt shares many similar characteristics to financial debt.  Financial debt can be responsible; borrowing money responsibily can enable individuals and companies to achieve their goals (e.g. home ownership, transportation mobility, education, mergers, equipment purchase, etc). Typically, financial debt is often slowly paid off, amortized, consolidated, rolled over, or paid down in lump sums.  As long as the financial debt can be serviced without undue hardship to cash flow and provides a positive cost-benefit utility, the debt is deemed being used responsibly.  Financial debt can be debilitating, unpaid balances with high interest rates can quickly pile on more debt.  For many people, financial literacy is low and understanding the nature of debt and managing it effectively is often confounded with emotion and stigma.

Technical debt provides utility.  Let’s remember that software is a means to an end to help achieve a business need or accomplish a task at hand.  As a technical leader, it is important to frame technical debt and understand how you will service it and how it is serving you.  You can pay down the technical debt slowly, each time you’re in that area of code, make it a little better than before.  You can choose to consolidate it and pay it off in a lump sum either by writing a new service or bypassing it strategically.  No matter what the strategy is, you need to be crisp on the plan and the communication around it.  

It’s important to remind ourselves, there’s no perfect piece of software.  We’re always making tradeoffs and these tradeoffs are okay.  What’s great software today is tomorrow’s legacy software.  Learning how to frame, manage and accept technical debt as a means to an end will give you leverage and productivity as you grow.

Amazon HQ2

The Toronto tech scene is hot.  Last year, more tech jobs were created in Toronto than San Francisco, Seattle, and NYC combined.  By making Amazon’s HQ2 shortlist, Amazon essentially vetted Toronto as a great tech hub.  Amazon saved all these companies thousands of hours of research, cities put pitch decks together for all to see, and now tech companies are moving in fast.

In the past few months, Bay Area startup heavyweights and big tech-behemoths have announced they’ll be recruiting large engineering teams in Toronto. Uber announced they’re investing $200M to build an engineering hub in Toronto.  Microsoft announced they’re moving their Canadian HQ to Toronto. If Toronto becomes the site for HQ2, we should rename Toronto to Seattle2.  Amazon already has over 700 tech employees in Toronto working on Alexa, Supply Chain, and Fulfillment systems.  Their footprint here is already sizeable.  The Bay Area heavyweights are all talking about building 200+ person engineering teams in Toronto.  

This will have both positive and negative effects for sure.  It’s going to drive up the cost of talent, poaching talent away from promising startups to join more established companies.  I honestly believe that life as a software developer is vastly different at Amazon vs a startup.  But companies like Amazon and the more established startups serve an important part of this ecosystem, they are finishing schools for new grad talent.  I’m convinced after they’ve worked a few years in a big-tech company, they’ll itch to join a startup and have more impact.  

In the short term, the biggest losers will be early-stage startups that are trying to find product-market fit and have limited funding because the loss of talent will be felt most acutely. Time will tell, but I believe these developments are good for Toronto, but there will be growing pains.

How my brain works

My fiancé complains I never remember anything that she tells me, like the friends she’s meeting, where she’s going, important dates, errands I need to run, etc.  Sometimes I honestly don’t even recall ever hearing it, but most of the time I’ve legitimately forgotten.  I can’t remember, not because I don’t care, but because I actually can’t remember.  I never argue; I’m actually a pretty forgetful person.

I can’t remember how many times I’ve misplaced my keys, wallet or even wandered into a room and had no idea why I was there.  I’ve lost countless pairs of gloves, shown up at an airport without my passport, left my wallet on a plane and my Kindle on a train.  I used to get frustrated looking for things, but now I’ve grown more accepting that I’m just forgetful.  As far as I can remember, I’ve always been like this.  My memory sometimes eludes me in the silliest situations, so I rely on routines.

I could never really learn to read Chinese no matter how hard I tried and wanted to.  In fight-or-flight moments, I can force my memory to serve me on exams, but a week later I won’t be able to recall any questions or the material.  I can’t really remember streets or names of people very well either.

I rely a lot on first principles and tend to reason out things.  I rely on my calendar instead of my memory.  I rely on knowing how to find an answer instead of memorizing answers.  The most important or urgent things always rise to top-of-mind and the less important things usually sink lower.  I think my lack of memory actually helps me compartmentalize and prioritize information.    I know that if a task is important and quick, I do it right away otherwise it might never get done.  I’ve learned how my memory works and learned to cope.

I believe this lack of memory has had some really interesting effects on my personality.  I don’t get too attached to ideas, I’m willing to re-evaluate with the new information at hand, sometimes this manifests itself as being right a lot or forces me to be pragmatic instead of stubbornly hard-headed.   Since I know I’m forgetful, I’m also very understanding of others, especially they forget.  It also means I treat things with high urgency if deemed important, otherwise I might forget to do it!   

At this point, I’ve stopped fretting and I’ve grown to look past the problems associated with my forgetfulness and appreciate the positive benefits it’s had on me.  Honestly, I forget if I ever had a good memory, to begin with.  

Running an Interview Debrief

The art of running an interview debrief is a skill in mediation, time-management and quick decision making.  My interviewing experience comes from being a bar-raiser at Amazon and from Who (Geoff Smart).

Learning to control all the egos in the room is the initial challenge.  A negative or loud voice can drown out the group and derail the entire debrief.  There’s a lot of competing psychological biases at play that you need to keep in check.  At times, you might feel like you’ll never hire anyone because of the cynicism, hypothesis, or conjecture.  The safest choice is to err on the side of caution, decline to hire instead of making a bad hire, but if this happens all the time you’ll never build a team and your frustration will only mount.

Ideally, you are the hiring manager or someone who has hire/no-hire veto power, like a bar-raiser.  The two roles seem diametrically opposed but really they’re more alike than you think.  A bad hire is a pretty bad headache for a hiring manager.  There’s really only three questions you need each interviewer to answer and one that you need to answer for yourself.

Each person in the interview loop should be assigned a different competency beforehand, therefore they should only speak to what they observed around that competency.  For each question, go through the entire group before moving to the next question:

  1. List the things that you admire about the candidate
  2. List the ways in which this person will make your team better
  3. List the circumstances needed for this person to be successful in this role

You’ll get differing opinions, some factual observations and some subjective opinions.  Keep them as objective as possible.  Ask for clarification if you need to understand better some observations or opinions.   If people go off on tangents, remind them to just list things relevant to the question at hand.  After collecting all this information, you now need to make a decision.

Geoff Smart defines an A-Player as a candidate that has at least a 90% of achieving the expected outcomes that only the top 10% of candidates could achieve.  If it’s clear this candidate doesn’t meet the competencies needed to achieve the expected outcomes, pass.

  • If you don’t have anything you admire about the candidate, pass. 
  • If this individual doesn’t make the team better by filling in the missing skills or experience gaps on your team, pass.  
  • If the circumstances needed for this person to be successful in the role do not exist on the team, pass.  Without the right circumstances in place, they will not have a 90% chance of achieving the expected outcomes.

You do not need 100% on everything to make a hire decision.  On the basketball court, if you have a slam-dunk opportunity, of course, take it.  Running a great hiring debrief and hiring the right person for the role is not always about slam-dunks but identifying high-percentage shots and when to take them.  That’s it.

The road you leave behind

The other day I updated my LinkedIn profile.  Many people congratulated me on my promotion to CTO.  The most interesting one was from someone who ended up doing the job I last had before I left Amazon.  I decided to reach out and see if he wanted to have a coffee.  I was curious how things were going.

I used to manage the software dev teams responsible for sortation systems across all of Amazon’s warehouses.  This problem space was operationally intense, the software had to be highly available and robust.  If these systems went down or misrouted packages, they affected a fulfillment center’s ability to meet throughput SLAs.  In operations, this is a big deal.

I wasn’t sure what to really expect.  Turns out he’s a super nice guy; he recently left the role for another within Amazon Fulfillment.  I was surprised, the first thing he did was thank me.  He thanked me for all the wikis and blogs that I wrote when I was on the job.  All this documentation really helped him understand the space, the evolution of the systems, how to actually do the job and the challenges he would face.  This got me thinking, I should start blogging again!

It also got me thinking about how important it is for startups to document processes.  At Wealthsimple we have a decent culture of documenting in Quip, but it’s not 100% universal.  I recently lost my sole technical recruiter.  To be honest, I wasn’t entirely familiar with the end-to-end workflow around how we used our third-party recruiting software.  I noticed many different teams were using it differently, inconsistency drives me a little crazy.  When I asked around if there was any documentation on the official HR process, I got blank stares.  Turns out there wasn’t any!

There’s no time like the present.  I sat down with one of my colleagues to use the software through the most common use-cases.  Along the way, we identified any potential process bottlenecks.  He then spent time with one of our recruiters to refine and document the process.

Documentation is the road you leave behind.  It’s also a high-leverage task.  Once written, it keeps on giving each time a new person reads it and it’s low maintenance.  If the reader finds a mistake, they’ll correct it.  It’s important to document so other’s don’t have to guess, rediscover or reinvent.  Someday, they might even thank you.