Interviews are brutal, especially for those who suffer performance anxiety. I have been interviewed literally a couple of hundred times now. I am confident in my STAR-type behavioral examples across a wide variety of topics (tech, people, process, product, and project management). Yet, I still get nervous, even though I am prepared and know my narratives. I have carefully chosen these narratives to highlight my role, how I work with others, and demonstrate increasing scope and impact.
I recently wrapped up an interview loop for a senior engineering manager role. I knew I didn’t do well on a few of the questions in the loop, so I wasn’t surprised to find out I wasn’t going to receive an offer.
My call out: don’t play games by introducing fictional stress into an already stressful scenario, in order to “measure” how a person handles stress.
There is a power imbalance in the interviewer and interviewee relationship. Interviewers should be aware of this, and avoid playing games. In the aforementioned interview, I spoke with the recruiter and received feedback (which you don’t always receive from companies) about two reasons that I wasn’t getting the role, both related to the questions I hadn’t performed well on. The company had developed tests in the interview for how an interviewee deals under pressure by 1) forcing a change of narrative, and 2) creating a fictional role-playing for an operational issue which somehow needed to be navigated with a PM(!?).
Research indicates these interview tactics (role-play vs behavioral) are ineffective and poor predictors of performance. The specific tests were 1) the VP of eng asked for an Operational Excellence (OE) example, I offered an OE example which demonstrated a focus on customer outcome, a clear KPI (latency) improvement I introduced and how I aligned teams on implementing the cross cutting operational metric. What was the game played? Intentionally or not, the VP wasn’t listening, and did not understand the impact, so I had to explain it a couple of times. After my final explanation, he suggested that was not an appropriate example (using a demeaning term for the impact of my role), and asked for another example. After the interview, I found out that this was part of a test to see my ability to do a hard pivot when talking with executives. 2) the partner PM peer to my hiring manager asked me a fictitious scenario where there was a latency problem with the data pipeline, and asked how I would work with him to resolve the issue. It’s the strangest question I think I have ever been asked in an interview setting. How many engineers / engineering managers would be working across diagnosing and debugging an operational issue involving the PM? I can definitely see involving the PM to talk through operational trade-offs once we have determined problems, but I wouldn’t be talking with a PM to understand and diagnose latency problems, I would be talking with other engineering leaders to understand where the problems could be, and potential solutions.
I gave this feedback on these tests to the recruiter, and I think it is equally important to share with others. Candidates deserve interviews that reflect the actual work environment and challenges of the role, not tests that measure how well they navigate arbitrary roadblocks. What games have you seen interviewers play during interviews?
One of the best ways of learning comes from solving a real world problem. A machine learning colleague suggested I solve a real world problem that I was facing using machine learning. My mind was drawn to a problem on the road where I live. Many drivers drive too fast down the road in the evening. I wanted to raise awareness to the police about how fast these vehicles were going.
My first approach was to find a LIDAR sensing device to measure the speed of the vehicles, and capture the license plate information through a camera. As I began researching LIDAR devices, I realized some of the less expensive models were custom built for a specific purpose, for example this devices’ spec sheet shows it does a single reading which is built for measuring the depth for drones to avoid ground collisions. That wouldn’t help me in my tracking, where I need to be able to measure multiple targets potentially (two cars going the same way, or two cars going different ways).
As I was describing this to a friend who is into robotics, he suggested a different approach. Why not measure the speed using video? I liked this approach, as I could record video from my iPhone, without buying expensive single use hardware, and then run the calculation using software. As I started thinking about how to solve the speed calculation, it seemed straightforward: have a set of lines on the video that mark a well known distance. Then calculate the speed based upon the number of frames it takes for the vehicle to transit between the two lines.
Speed (miles per hour): miles (distance in feet / distance in feet of a mile) by hour (total # of frames * frames per seconds * ( 1 / seconds per hour )
To be specific, I traded off real-time video processing for using post-processing. So, this approach wouldn’t work for all applications, but I was more interested in grabbing a video file from my phone, doing post processing and finding how many people were speeding. This way, I didn’t have to worry about the frame rate causing a queue to develop in the stream (which can be solved by sampling frames rather than processing each frame).
The first problem was detecting where the vehicle was in the image. I knew about the openCV library, so I started down a path on exploring this. I used a Haar classifier to detect the cars and experimented with multiple different hyperparameters to tune the detection of the cars and trade of the # of frames per second I could process using detectMultiScale API. Some of the key trade-offs here were the size of the video frame to be processed (the smaller the faster the processing, but the less ability to detect), the scaleFactor (API), and the minNeighbors (API). I played around with how much I would resize the greyscale image of the video frame before passing it into the detectMultiScale API. It was working “ok”, but I noticed that there was a bit more choppiness (jumpiness) in the object detection borders, so I looked for a way to improve it.
I found this blog post informative. It uses Haar classifiers with background averaging to detect the differences in pixels and then creates bounding boxes on those detected contours differences from the background. This again improved the performance slightly. However, I was still seeing very unstable bounding boxes around the cars, which left me wanting a more stable detection mechanism.
Finally, as I was talking with another principal level developer about an unrelated topic, he was sharing about some work which he had done using OpenCV and Yolo. I decided to look up Yolo. I was impressed with the improved stability in object detection and similar performance. At first, I was a bit disappointed that the Yolo architecture requires a color image, I was previously using greyscale (with less channels used in inference I assumed it would be faster). After that I discovered that the architecture would also do all of the resizing for you when you did inference, and that the previous resizing I was doing was superfluous. Finally, I modified from using the v3 predict function to find the objects to the v8 track function.
Figure 1: setup screen to verify the start / end lines for video
Figure 2: tracking cars using the YoloV8 track API function, with tracking trails
Hope you enjoyed the ride. A few potential improvements which I’m thinking of now, detecting the speed based upon well known sizes and distance (specifically I could use license plate size), and ability to collate together multiple views to tag a higher resolution view of the license plate.
Paul Graham – I’m not buying what you’re selling. Why are you asking us to suspend belief that management doesn’t work and only founders can lead companies to success?
I read through the founder mode blog post, and it left me profoundly sad. Sad? Yes, because Brian Chesky, at least as Paul Graham portrays the talk (I can’t seem to find a video of the talk anywhere), is bucking conventional wisdom to avoid managing and advocating for more of a hands-on approach as a leader. The so-called ‘conventional wisdom’ they disguise is that this advice doesn’t scale and leads to worse outcomes. Propping up “founder mode” as the next great leadership style is a fool’s errand.
I’m sad because Paul seems to selectively forget success cases for non-founder run companies, e.g. Microsoft (Satya), Apple (Tim), Amazon (Andy). These are not small companies with a combined market cap of ~$8 T. That’s $8,000,000,000,000. What are these “manager mode” companies doing from which start-ups could draw inspiration? Obviously, the above companies have been successful, what is the logical basis for this argument?
The key failure in logic in the argument of “founder mode” vs “manager mode” is conflating a company being “run into the ground” that conventional management simply doesn’t work. Looking deeper, a great manager will dissect and investigate why. Is it an easy process to investigate what’s broken? No. However, building a company whose success is inextricably bound to a particular leader (founder mode) is super dangerous (especially to shareholders).
The danger of relying solely on a single leader highlights the need for robust systems that transcend any one individual. A successful way to ensure smooth operation in business is creating auditing mechanisms to roll-up status and risks in various business units. These recurring auditing events help leaders to stay informed and ask questions to tweak execution (a project is taking too long, or is going off the rails) and act as a forcing function to hold the business leaders accountable to the reporting and risks. Unfortunately, it takes courage to hold people accountable.
A case study, when I worked at Amazon, there was great company lore around how Jeff Bezos would show up to six-page review meetings. He would allow the least senior people (after reading for 20 mins) to give comments on the doc before asking his questions. This gives oxygen for other ideas and sets an example that Jeff isn’t the most important person in the room. Jeff Bezos, at Amazon scale, couldn’t possibly dive deep into each business frequently. He was able to scale and trust leaders by establishing mechanisms which improved the successful outcomes (e.g. six pager reviews and operations / budget planning). Examples of great successes that have been driven through the six page process are Kindle, Amazon Prime, and every Amazon product which has launched since 2004. These documents because of the rigorous review process drive clarity of thought in the decision making process of what to build for the customer, how and why.
The success of Amazon’s structured approach raises a critical question: why then, should we rely on the singular vision of a founder when a well-designed management system can achieve so much more? Why am I skeptical of “founder’s mode”? Because I have worked at companies where the founder was deeply entrenched in “founder mode” philosophy. Every new product idea and innovation had to pass through this founder. Being the single decision maker and hands-on certainly didn’t improve the outcomes because the company still struggles to this day.
A more nuanced thought around “founder mode” is whether companies are creating the right structures (and mechanisms) to succeed even in the absence of their founders.
Going through the second half of the course of fastai, I was running into problems running the notebooks. I am relatively new to Python package management, and so some of the very cryptic error messages baffled me on how to resolve.
An example
When trying to run the notebook #9 (may have failed earlier) from part 2, I got errors around NoneType object not being iterable when getting the data back from the dataloader. I was trying to ensure that I had the correct versions of libraries installed, so I went to the terminal window and tried a pip3 install of pytorch libraries, but then that would give this error:
× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
xyz, where xyz is the package you are trying to
install.
If you wish to install a Python library that isn't in Homebrew,
use a virtual environment:
python3 -m venv path/to/venv
source path/to/venv/bin/activate
python3 -m pip install xyz
First, I realized after much searching on the internet that the above error message is a passive way (if you wish to install a library) of indicating that you should set up a separate Python environment where you can have specific libraries installed.
Second, I have installed some newer dependencies than what the fastai course expected (torch version needs to be 2.0.1 and numpy needs to be less than 2). So, I needed to have those legacy versions installed to run the fast.ai code. (example python3.12 is installed on my machine which is incompatible with torch 2.0.1).
So, I was wrestling with how I can specify those specific versions in the Jupyter runtime. Python environments help resolve this issue. The premise of Python environments is that you can independently manage all of the library versions for a particular environment without destabilizing other Python libraries you may need access to. You can think of it as a container which allows you to install specific versions that are only available within that container.
However, I had never worked with Python environments before, so I had to learn that. They are pretty easy to do (step 2 is an example below). I was able to isolate all of the package versions using the Python environment so that I could independently run the notebooks without additional problems. The steps below allowed me to do that.
Solution
Steps to get a running local notebook (Macbook) for fastai/course22p2 in the Github repo:
Get Python 3.10
brew install python@3.10
Create a virtual environment which is python3.10 based
In the terminal window run
python3.10 -m venv .fastai2
source ~/.fastai2/bin/activate
Note: this creates a virtual environment from which you can install pre-reqs which could be incompatible with the currently installed default python version. For example, pytorch 2.0.1 is incompatible with python3.12.
Install the pre-reqs (in terminal using Python env)
The greatest superpower anyone has in this day and age is disciplining their attention and use of time. Time management is the skill that differentiates people who achieve their goals from those who don’t. The key skills to learn for great time management are identifying, prioritizing and executing tasks. Since this particular post is targeted towards employees newly entering the job market, I will focus on the last two prioritizing and executing. Once you have mastered the prioritizing and executing skills, moving on to identifying and exploring new potential priorities will make you unstoppable. The process of identifying tasks will be covered in a subsequent post.
First, we’ll start with the Eisenhower matrix. This matrix is a great tool to help you understand and prioritize what to work on.
Urgent
Not Urgent
Important
1 – do
2 – schedule
Not important
3 – delegate
4 – delete
Figure 1: Eisenhower Matrix
Every task should fit into one of the four quadrants:
Is it important and urgent? Do it.
Is it important, but not urgent? Schedule time to complete it.
Is it not important, but urgent? Delegate it.
Is it not urgent and not important? Delete it (don’t do it)
Some excellent books which gave some great nuggets on time management:
“The key to developing a deep work habit is to move beyond good intentions and add routines and rituals to your working life designed to minimize the amount of your limited willpower necessary to transition into and maintain a state of unbroken concentration”
Each of these books circle around a theme of discipline around writing down and prioritizing what you should be focused on. I have synthesized the advice into three key skills to master.
These key skills are:
writing everything down which you need to do (I.e. organizing or identifying tasks)
prioritizing tasks
executing tasks in prioritized order
Make a list, prioritize, and execute. Repeat.
1) Writing everything down
Let’s take an example, first write down everything that you need to prioritize over the next week. Here’s an example list of my tasks:
0. Finish draft of time management with focus on prioritizing and executing
Drop off Leaf for repairs at auto-body shop (Mon)
Drop off Dad @ airport (Mon)
Clean-up
Clean desk
Vacuum desk area
Training
Read chapters 24, 25 and 27 of Artificial Intelligence, a modern approach – https://amzn.to/3zq8F9n
Engage with a couple of posts on LinkedIn for 30 mins max
< Personal family / friend related priorities >
The most important step in my week is cataloging what things need to be done. When I was younger, and had less responsibilities, it was easier to juggle all of these tasks mentally. However, as I grew in responsibilities (more kids, employees, job responsibilities) there was an inflection point where I realized the lack of an organized list was hurting my impact. I would focus on whatever I wanted to at the moment, and sometimes that was the wrong thing. Focusing on the wrong thing is easier to do when you don’t have a list. Alternatively, I would prioritize interrupt driven requests without weighing it against my other weekly priorities. At the end of those weeks, I would look back retrospectively and wonder where all my time and energy had been spent, and what impact I had to show for it.
2) Prioritizing tasks
The second most important step when making the list is to prioritize it according to the Eisenhower matrix. Here’s an example of bucketizing my items:
Urgent & important – items 0, 1, 2, 6
Not urgent & important – items 4 & 5
Not important & urgent – item 3 & 7
Not important & not urgent – item 8-10
Note: I added items 8-10 as an example of areas where I personally struggle with setting boundaries.
Note 2: item 11 is expanded on the longer list, and this particular week had many additional family responsibilities that aren’t normally present.
Of course, just because you can identify some items as delegate in the matrix, doesn’t mean you have the means or have the time or emotional overhead of delegating the task. For example, task 3 (clean-up) although it’s categorized as “not important” and “urgent”, my wife and kids wouldn’t necessarily take kindly to me asking them to clean up the mess I made at the desk. So, what do I do with those tasks? I call these filler tasks. I fold these filler tasks into my week when I’m feeling less motivated to do a more thought or focus intensive task. Completing some of these tasks and checking them off can significantly boost my motivation and help defeat procrastination.
Having a deadline associated with tasks, will give you the proper focus to ensure that you avoid doing non-important tasks. For example, I know my dad’s flight leaves on Monday morning, so I schedule time for “drive dad to the airport” on Monday morning in my calendar. I’m sure that my dad appreciates that I focused on dropping him off at the airport on Monday, rather than waiting to bring him to the airport on Tuesday. Additionally, having this context will help you to order similar tasks. For example, the interviews with the companies (X, Y, and Z) were actually on Tuesday, Thursday, and Friday, so I needed to focus on preparing for X first, since it was on Tuesday. Getting that order incorrect would have left me unprepared for the interview.
3) Executing tasks in prioritized order
It can be helpful to have a strict ordering of the tasks on your list. This will allow you to focus on only the next highest priority item on the list and avoid getting to the end of the week without a critically important task done. I am less rigid about this strict ordering, just because I know how I work best. I like autonomy to choose what I’m working on next instead of having a schedule dictate what that will be. Some days I will wake up and I have to coax myself more into getting into the zone of work. This may mean that I focus on getting a couple of the filler tasks done as a warm up to the more difficult tasks. This is the exact opposite advice which Cal Newport gives in Deep Work, where he suggests putting the most difficult task first in the day. However, I know what works well for me, and sometimes that is a gradual easing into the Deep Work.
It’s important to focus on the priorities of the tasks when choosing what to work on next.
Allowing less (or not) important (urgent or not urgent) items to choke out your ability to focus on important items will stifle impact. Distractions impact everyone in this era where every app and device is vying for our attention. Some of the most successful people that I know are ruthless in training their focus on executing tasks in the important row (see Eisenhower matrix). A negative example, a newer employee Bob would spend a lot of his time on his cellphone texting with friends during the day. While this isn’t a problem for some people, sending a one-off text, or doing it during lunch time. Bob would become absorbed in these conversations and spend hours on his phone, texting with friends, and it was impacting his ability to prioritize and get his work done. I noticed this lack of progress when he shared during daily stand-up. In private I asked him to measure where he was spending his time. This insight led to an important break-through (I’m spending too much time on not important / not urgent tasks, i.e. texting friends) for the person in time management and impact. *
* Note: – An insight I learned when doing performance optimization in software, you have to measure where the time is being spent with a profiler, I.e. you can’t guess. You can try to guess where the software is spending time, but you will often be wrong. As an example, at Microsoft, I found logging boilerplate in a large service codebase which I worked on was doing stack trace calls to determine in which file it was making the request to log the filename. The stack trace call in C# is expensive because it uses reflection, so I just added the file name logic to be statically built. I would never have guessed that it was the stack trace call that was eating up so much of the compute without measuring it!
Today, there are many ways to observe what you’re working on. The simplest is setting a fifteen minute timer which goes off throughout your day. When the timer goes off, immediately write down what you’re doing (even if it’s not work related, e.g. searching for a product on Amazon), and then go back to whatever you were doing. After a few days of observation, you might observe a pattern, like Bob, who discovered he was spending a LOT of time on his phone. (There is now tooling support for this measurement: Toggl)
There are various reasons (ignorance, lack of discerning priorities and impact of tasks, being interrupt driven) for folks having trouble with time management. However, knowing what to do, when it should be done, and in what order they should be done will help provide the structure and the motivation to say no (especially to things outside of the urgent / important bucket). Giving yourself the permission to say “no”, to good, but not the best things will help you to be more effective and intentional in your impact.
FAQs:
What happens when a new request comes in from your boss?
Part of the power of having a prioritized list that you are working towards is allowing that list to help you say no. After putting the task through the Eisenhower matrix, you can take the new task and measure to see where it compares to your other items. If it’s being asked of you by a manager, it might be worthwhile to have a trade-off discussion with them about what you planned to work on that might be impacted by the new request. If it doesn’t make the list, consider adding it to your next week’s priority list, or better yet seeing if it can be deleted.
What about recurring items?
I try to put all recurring items on my calendar. This avoids me having to think about them, and gives me greater confidence when scheduling meetings, etc. If I have to take my daughter to/from soccer practice, I put those commitments as a recurring meeting into the calendar to help me remember to do them, and then also keep the list to a manageable length.
How do I improve my discipline in creating, prioritizing and executing against a list?
Start off slowly, you don’t have to do it perfectly and capture all the context the first time. Create a list with a few items, prioritize and execute. Repeat this regularly over the next two months. Revisit what is working well versus what is not.
My expectation for you, as the reader, is that these guidelines will help you to take a more intentional approach to both setting and clarifying expectations.
Clarifying expectations – What do I even need to do?
When I was a new manager, I had an employee who was relatively new to the workforce. I will refer to them as Wally, not their real name. I had the expectation that Wally would be able to deliver on engineering tasks which another team needed done. The previous manager had not stated the person wasn’t meeting expectations as part of the transition. As the project was executing there were clear signals (to me) that this employee wasn’t meeting expectations (e.g. not giving status updates on progress made, not treating the project with urgency). This was clear to me, but not clear to Wally. What was the gap? I hadn’t set clear expectations with Wally (e.g. you need to send updates on your progress to stakeholders daily) and the other team’s lead. A couple weeks in, and I was having an expectations conversation. This is the challenge of expectations. My expectation, which was implicit is that a person should understand the importance of proactive communication and execute as quickly as possible on a project.
Expectations – they’re everywhere!
Expectation [ ek-spek-tey-shuhn ] – n. 1. a belief that someone will or should achieve something.
Each job that you will hold in your life will come with expectations. Some expectations will be written down (explicit), most will not (implicit). Your job as an employee is to understand these expectations, the spirit behind them, how they apply to your role, and meet (and hopefully exceed) these expectations.
Why are expectations so important?
Expectations make and break relationships, this includes work relationships. Think back to the last person who consistently didn’t meet your expectations. What happened to that relationship over time when that person consistently didn’t meet expectations?
As a manager, your role is to provide clear expectations to employees on how to be impactful and grow impact over time. Clear expectations are good, because the context in the expectation helps create enough structure for an employee to understand how to be successful.
So, how do you hone your expectations:
Ask your manager –
your manager should have clear expectations for your role and level at the company. At larger companies some of these expectations are generalized for your role and level as a leveling guide or career ladder document. Whenever I have a new employee start on my team, I first ask them to read through and evaluate which areas they have demonstrated for their role and level, and identify where they are exceeding, meeting, or not demonstrating areas. This identification of not demonstrating an expectation is not punitive, but rather to illuminate which areas we can focus on demonstrating in the future (I.e. setting up goals).
Align to written current and next level role expectations
Expectations for a more senior engineer may have statements like the following: “autonomously deliver large-scale and ongoing business impact across a team, product capability”
If they have been in their current level for a sufficient period of time, I ask them to look at the next level expectations and do the same identification (exceeding, meeting, not demonstrating). This can then feed into promotion readiness discussions. These role and level expectations merged with business needs should result in a goals-type document.
A couple of clear examples:
"In order for our team to scale successfully in the next quarter, I will interview 2 candidates a week, providing written feedback which clearly articulates where they are meeting / not meeting the rubric for the role / level"
"I will execute the XYZ project as the technical lead and launch it by end of Q3, this will involve me working with the profile, search and detail page teams (both mobile and backend), aligning on a design, running status update meetings (to identify risks), and send stakeholder update emails"
Align to unspoken organization norms
observe others who are successful in your role (at your company or in your org) – the hardest expectations to meet are unspoken (unwritten) ones. A company may have a strong set of principles that define behaviors which are rewarded, e.g. Amazon LPs.
These principles though can have different priorities depending on the organization or leader. So, what is defined as a principle for the company may not be the prioritized principle of the organization or leader. Let me give a specific example, as these leadership principles (LP) have some tension built into them that isn’t always apparent. The principles of deliver results and insists on the highest standards can be at tension with each other. If you are in a v1 product team where time is of the essence to launch the product, deliver results (getting it done) may be prioritized over insists on the highest standard. Deliver results then will be rewarded as compared to someone who might demonstrate insisting on the highest standards (with less results delivered). If you are having difficulty these unwritten expectations or what is rewarded in an org, find one of the influencers / strong performers and ask them for what are the most rewarded behaviors.
How are they used by your manager?
Expectations are a tool like anything else, to facilitate alignment between your manager and yourself. When you have strong alignment on expectations (and goals) with your manager, and then you execute against those expectations well, trust is built. Notice, I didn’t say that rewards would follow, that doesn’t always happen in the immediate term as the impact of the project might not turn out to be as big as anticipated, etc. (More on that in a later blog post.) However, trust is the lifeline of employee / manager relationships. The converse of not meeting expectations doesn’t necessarily result in performance management and end in termination, but in loss of trust.
Why is trust so important?
Many times, as a manager, I need to assign a big project opportunity and more often than not, I give those opportunities to an employee who has earned my trust. So, by not meeting expectations, and therefore not earning my trust, the employee is losing out on the opportunity to own a critical project. A specific example: imagine there is a two week timeline to deliver a feature, should I give the project to someone who I know will own the project and unblock themselves to meet the deadline, or a person who might have equivalent experience, but makes excuses of why things aren’t able to get done (e.g. too hard to do in an unfamiliar code base)? The question seems rhetorical, but the decision making for the above situation is something which managers face all the time.
How do I build trust in an ambiguous situation?
As a manager, I have learned through the years that my leaders can’t read my mind. So, how do I manage the situation of discerning their expectations? (this applies to most senior level folks as they need to identify the most important problems to solve)
Over communicate. When I have a new manager, I turn up my verbosity level, as I tend naturally more towards terseness. I demonstrate how I think by writing the following: context of the problem, potential solutions and trade-offs, (if I’m not solving it individually) how I am coaching someone else through solving the problem, and when we should have enough information to move forward with executing. I then share that doc with my manager.
Why do I do this? I’m not looking for approval from my new manager, I’m looking to provide my manager with enough context to show them how I am thinking through the problem in order to develop trust. By over communicating in the two to three months after joining a new manager, often I find this develops a strong amount of trust which leads to greater and greater autonomy for me and my team. Additionally, if there is some failure of logic in my thinking or some missing context, they can provide that, and I can learn about those hidden expectations from them.
I liken this approach to showing your steps for math problems in school. Two people can have the same correct answer, but the teacher may grade down one of the students’ homework or test, because they didn’t show the work. They didn’t articulate how they came to the correct answer, so it could have been luck.
What should I do?
Think about a few of your work or personal relationships. Ponder expectations that you have of the other person, and what expectations they might have of you. If you have a close enough relationship with them, ask them if your expectations assessment is accurate (are you missing any?). The results could be unexpected, and help you grow.
Colab has security measures to prevent you from putting in any IP address in the Local Connections Settings dialog. These instructions mention that you can use gcloud command to point to a different machine using local port forwarding. However, it doesn’t show you how to do this for a mac to window set up (and maybe you don’t have gcloud installed). So, if you have a Windows PC with a GPU that you would like to run Python notebooks using colab on your mac (macbook), simply follow these instructions below:
We live in the information age. The amount of information available through print, audio, and other mediums boggles the mind. How to deal with this much information is a perplexing problem. It is especially pronounced for the so-called information worker. Being an information worker myself, I realized many years ago that I won’t ever be able to learn everything that I want to know. This conundrum surfaced when I tried reading one book a month, only to find that I wasn’t retaining the information after I finished reading the book. I found myself wondering, “If I’m not retaining what I am reading, what’s the point in reading the book in the first place?”
This started me on a journey of self-reflection in order to discover how effective learning takes place. Since learning usually takes place unconsciously, I had to think of how the largest lessons were learned and the most impactful moments of change happened in my life.
One such memory comes from when I was 9 years old. I was focused on learning a difficult piano piece. I slowly repeated the finger movements, and this repetition seemed to transfer the song to my memory. This technique resulted in me giving a recital of the entire book of songs from memory. Another example from a US History class came to mind. I read the textbook and wrote down key dates and events in a chronological timeline. When the test came, I could visualize the dates and aced the test. Making a visual representation helped the information to organize itself more clearly in my mind and helped me retain it better.
Entire books have been written addressing learning styles. I have read about learning styles, and even read (and retained) erroneous information regarding them. As I was writing this article, I recalled something written about a “cone of learning”, which had percentages of information retained by the activity involved. The cone showed that when reading you would at most retain 10%, as compared to teaching the information, which resulted in retention of up to 90%. Further reading discredited the “cone of learning”; the percentages are fictitious (1 and 2).
I realized since this cone of learning is fictional, I needed to look for non-fiction examples of habits that when followed led to success in learning. So, of the things I found from my observations of other successful learners as well as lessons from my own experiences, these are 5 habits of highly effective learners:
Be receptive to feedback – how willing am I to listen to others?
At the root of the ability to learn is the question, “How teachable am I?” If you believe yourself to be the brightest person in the world, your field, or your workplace, and that no one can teach you a thing, then you’re right: no one will. However, if you’re willing to set aside your ego and embrace a humbler view of your abilities, you will be open to hear what others have to say, and more apt to learn. For example, in one of my groups at work we were having trouble with two teams not coordinating well. As part of a retrospective on the problems the teams were having, one of the senior engineers on the other team pointed to an example of some language which I was using in our status updates to our director. They included phrases like, “We’re blocked by the team X on functionality Y.” He suggested that the word “blocked” was divisive. He felt that the wording made it feel like I was blaming the other team and I should use more inclusive language, such as “we are working with the other team X to address the issue with functionality Y.” My ego was bruised. I could have easily dismissed this feedback as nit-picky. After all, was this really a problem with me, or with how he chose to take the phrasing? In the end, I chose to change my behavior and learned the importance of the words I used. I concluded that it should be relatively straightforward to use collaborative rather than divisive words to describe the situation. I chose to listen to the feedback, incorporated the feedback in my descriptions, and earned trust with the other team by not dismissing them. A person with a humble attitude seeks to learn from others.
Be focused on the end goal – how will this subject change me?
How many times have you read through some business book and realized as you were reading it that it lacks immediate application? In fact, when you are reading a book, how often do you question what your motivation for reading it is to begin with? It is important to identify your motivation for learning before approaching a new subject. Identifying motives for reading a book on a new subject will give you forward momentum while studying. When I joined Amazon, I wasn’t able to clearly communicate my thinking in writing. The reading culture at Amazon favors written narratives that are shared (and read), as opposed to other workplaces where verbal communication is key. So, I was able to identify a motivation for improving my writing: understanding the cultural requirements for success at Amazon. My boss worked with me to generate better narratives. He would ask questions about context and details and demand that my written communications be crisp (concise, with proper detailed data). I learned from that experience, and became a better writer. As a counter example, I have desired to start my own business. So, I picked up a book on small business development (“The E Myth Revisited” by Michael E. Gerber for those curious). I tried to read through it once… but could not. My motivation for reading the book was poorly matched to its subject matter. I wanted to know: what do I need to know to start a business? The book was for a person who had already started a business, but was struggling and needed guidance. It wasn’t a good fit for my motivation at the time. So, I put the book down … for now.
Be disciplined – how do I approach learning?
Novice learners can take an undisciplined approach to learning. Before anyone takes offense, I should make clear that I have frequently approached learning in an undisciplined manner. What do I mean by undisciplined? Here are a few anti-patterns I have experienced:
Not considering deeply what you’re learning: You may learn some things by osmosis, like language, but if you’re trying to learn a new mental paradigm you need different structures. Are you expecting that you will learn? Are you reading the book as you read a novel or watching the video as a movie? Are you taking notes on what you learn? Are you sharing what you have learned with others?
Not having an immediate application: This relates to the earlier point on motivation, but differs in how you apply what you’re learning. I think about learning as a just-in-time activity, meaning that, when I need to learn a skill, I quickly ramp up on that skill. Likewise, when I have learned a new concept, I need to immediately apply it, or I will often forget. Are you applying what you have learned, and in a timely fashion? (More on this in a minute.)
Trying to learn when you’re tired: I find that there are times where I can apply myself to learning, and other times that trying to learn is, in fact, counter-productive. Are you trying to learn when you’re tired? Have you noticed whether you increase your retention by getting some good sleep after trying to absorb new material?
Be courageous – how willing am I to be bad at something new?
In order to learn, you will fail. There’s no tip-toeing around this fact. If you don’t know how to do something, you don’t know how to do it. It’s as simple as that. When you first attempt to do something, you generally will not be good at it. This is where you need a growth mindset in order to learn and blossom. This isn’t just for learning subjects in which you don’t have any experience: e.g. piano, fencing, or archery. It has to do with subjects where you need a paradigm shift in order to learn a new behavior. Examples include how you coach an employee, how to speak more candidly, how to work independently, how to ask for and receive help from others, how to move from an individual contributor role to being a leader, or how to become a better listener.
I had never taken a tennis lesson in my life… until the first Friday of September this year. I took the opportunity to fill in for my son’s friend, who couldn’t make their shared tennis lesson that day. I had played tennis once or twice a year since I was 16. Of course, “played” is an overstatement, since I am very inconsistent with hitting the ball over the net. Because tennis is one of the few open outdoor activities still available during the pandemic, I started to go more often to the courts with my family. However, my inconsistent technique was making the experience painful. This is why I was so happy to have my first lesson. Throughout the lesson, the instructor showed me the ideal technique, and corrected me when old muscle memory would kick in. She observed and corrected multiple problems I had with my form, such as leaning backwards when I hit and swaying side to side with my swing, rather than moving by body low to high. She also showed the mechanics of a good serve. Did that first lesson solve all of my problems? No, it only exposed them. I needed to be willing to be unskilled for a while as I practiced new techniques and listened to the feedback I was receiving. I went back out the next Friday to practice my serve by myself. I was slowly practicing the technique of the serve which I had learned, over about 45 minutes, but of course making mistakes along the way. My wife told me later that, after I left, she overhead the two other guys on the adjacent court joking about me not being a serious tennis player. I had to chuckle, as this is the exact point of this learning habit: in order to learn you will not immediately be good when you’re learning it.
Be patient – how willing am I to slowly repeat a skill?
Practice is important. How you practice, though, can be just as important as whether you practice to begin with. My mom was a pianist, organist, and a teacher. Later in her teaching career, she began to use the humble snail as a teaching aid to her students. To her, the snail represented a proven technique in practicing a skill: slow repetition. For those of you who aren’t musically inclined, when you face a difficult passage in a piece of music, such as with the piano where your fingers don’t want to move quickly enough or get jumbled when playing the passage, the surest way to improve your performance is by slowing the tempo (speed) down and practicing the section slowly … over and over again. In contrast, if you continue to practice something quickly or sloppily, you will engrain the sloppiness into your playing and you won’t improve. I remember, as a child growing up, hearing my mom practice a section from a piece that was giving her difficulty at 30-50% of the desired speed, sometimes for ten or twenty minutes straight. As a family member, this was quite annoying. I know my own family can’t stand it once I have repeated a section of music 5 times or more in a row. However, this technique of slow repetition, aimed at mastery, is effective. Give yourself latitude as you’re learning and, when needed, go about it slowly. Get in the habit of slowing down, especially when it seems you are struggling with a new concept or way of doing things.
Applying the habits
My point is to share habits which have worked for myself and others. By developing these habits, you can approach new subjects and retain the information. If you approach learning with receptiveness to feedback, are both motivated and have the expectation to learn, are willing to be courageous and fail, and patient with yourself as you do, I guarantee that you will succeed in your learning endeavors.
You need to hire a person to help you deliver on your goals. How do you make sure that person is the right fit for the job? I have identified three characteristics (that you need) in hiring the right person for the job. By focusing on clarity, patience, and perseverance, you will have success in hiring.
Clarify what you need
Hiring can be one of the most daunting job responsibilities. At first, it can seem insurmountable, you need a person who has specific skills to help me deliver on my company or team’s vision, and you need them right away. As you focus on the immediate need, anxiety mounts, and instead of focusing on the what (skills and behaviors the candidate would bring), you start focusing on the when (you need them right away). The first major obstacle is fuzzy candidate requirements, what role and responsibilities do you need this individual to perform? You need to clearly define these roles and responsibilities. Write everything down that you can think of in terms of responsibilities. At a larger company you may have more well-defined role guidelines that define expected responsibilities. However, beyond the base role guidelines, you need to focus on what is unique. Once you have captured all of these responsibilities, prioritize these responsibilities.
An abbreviated list of responsibilities for an M1 software development manager:
Responsible for hiring team and growing team member skills
Capable of project management in a large organization (breaks down work into milestones, communicates risks to stakeholders, actively manages risks, understands the software development lifecycle)
Understands architectural trade-offs with systems being built and can articulate reasons for decisions
Capable of creating three-year vision document that captures personnel needs
Has expert knowledge in running a high scale service, actively creating the correct operational metrics for service and mechanisms to monitor them
Let’s consider this abbreviated list, which is for a software development manager (M1) at Amazon. These are all expectations called out in the role guideline for an SDM. However, these expectations will be different from team to team. Consider a senior manager (the hiring manager for this role) who is working on an incubation project. She ranks the responsibility list as follow: 4, 1, 3, 2, 5. She ranks #4 as a priority because she needs an individual who is helping to shape the vision of the product. #1 is the second highest, because this manager will need to hire and grow a team from scratch. #3 is important, but there is a strong senior SDE on the team. #2 is lower because this project is more insulated from the company. #5 is less important because this is a greenfield project which has no customers at the moment.
Patience is a virtue
Great, now you have clarified what skills a successful candidate will possess. As a skilled entrepreneur, manager or individual contributor, you know you need to focus on the long-term goal of what skills this person brings, but the time pressure to hire dominates your mind. In order to give yourself peace during this process you must acknowledge that hiring the right person takes time. The time required is illustrated in the following pipeline.
I show the chart to illustrate the full lifecycle of how big companies hire. Each of these stages take time. There are standard ratios that recruiters know in terms of hiring. There is no shortcut, it is purely a numbers game, and it takes time. Let me illustrate this with some ratios; these aren’t true numbers, as these differ from company to company. For this illustration imagine that for each 10 reach-outs (cold-call), we have 1 interested candidate. For each 10 phonescreens we have 3 candidates who qualify for an onsite loop. For each 10 candidates we have 2 offers, of which one will accept.
Working back from that one candidate, you have the following math:
1 candidate requires 10 onsite loops
10 onsite loops require 30 phonescreens
30 phonescreens require 300 reachouts
Wow! That is a lot of work for a single employee. As a manager, this is where the temptation becomes strong to take short cuts. Don’t do it! Here are some shortcuts, and why you shouldn’t take them:
Lower the hiring bar. For any role, you should define expectations of responsibilities. These expectations are sometimes called role guidelines, and should unambiguously define criteria for each level of that job family (a good starting place is defining how much autonomy, scope and business impact is expected). For tech positions we define the hiring bar in terms of demonstration of functional and behavioral competencies. Measuring these competencies against a role guideline for an ideal candidate gives you more objective data to determine whether you should extend an offer and at the level of role you should offer.
Functional competencies are role specific needs for the candidate to be successful. An example for a software development manager at Amazon is demonstrating technical proficiency, i.e. software architecture and (service) operational excellence. We measure functional competencies to ensure that the candidate is able to perform the required job functions. Imagine hiring someone to do accounting that doesn’t understand balance sheets, quarterly reporting or who is bad at math. Hiring an unqualified (or underqualified) individual on the functional competencies will have negative consequences.
Behavioral competencies. Behavioral interviewing is based in the theory that past performance indicates future results. Large companies, like Amazon, have a set of criteria for determining whether a candidate is a good fit in terms of behavioral competencies. Amazon defines the behavioral competencies as leadership principles (LPs for short). Read more here: https://www.amazon.jobs/en/principles. In each Amazon interview we ask behavioral questions for evidence and demonstration of these LPs. Think of these LPs as the codified work culture at Amazon. We look for a cultural fit by looking for strengths and/or concerns in their behavioral examples. These behavioral examples are mapped to a STAR (situation, task, action, result) narrative type format, and we ask follow-up questions to understand the individual’s autonomy, scope, business impact and personal involvement (especially important for hiring leaders). An example, to illustrate the point, when interviewing for Bias For Action LP, I want to understand how comfortable a candidate is with making a decision without all of the information.
Introduce bias into the loop to change the outcome (good or bad). As part of running a fair and impartial loop, it is industry standard to avoid cross chatter about candidate performance to other interviewers on the loop. By firewalling the feedback from one interviewer to another, you reduce bias into the loop. We accomplish this at Amazon by having our feedback system (a website) disallow view access to the feedback until the interviewer has entered their feedback. After the feedback has been entered into the system, we hold a meeting, called a debrief, where we discuss the strengths and concerns for the candidate. By keeping bias to a minimum, the candidate has a fair chance of doing well in each interview. Therefore, even if the candidate performs poorly in a single interview, they can perform well in other interviews. To compare the approaches, imagine as the interviewer that I have a concern about a candidate not taking a data driven approach. If firewall rules were broken, after my interview I might mention to the next interviewer in the loop, this candidate doesn’t take a data driven approach, which would result in a biased impression for the next interviewer. However, if I wait until the debrief, I can voice my concern about a candidate not taking a data driven approach and ask for counter examples where the candidate took a data driven approach.
Ignore red (or yellow) flags. Red (or yellow) flags are indicators of poor judgment or anti-culture signals. An example of a red flag is a candidate who makes a comment that is sexist. During one interview debrief, we were discussing a candidate who was strongly technically, when another interviewer in the debrief raised a red flag (strong concern) about the candidate. The concern was around a mentoring example, where the candidate shared a story about a female engineer whom he had mentored. When asked about how he helped her, he made several statements, which the interviewer followed up to clarify, that were derogatory to females being uninterested in diving deep or inferior technically. Our debrief noticed the narrative as being sexist and decided to pass on the candidate. Can you imagine the negative impact of that candidate on a team with female engineers?
Persevere to the end
You are patiently evaluating candidates and avoiding pitfalls as you pursue a candidate who brings the necessary skills and attitude. This is the point of hiring where you need to dig deep and persevere. Two years ago I took on a multi-disciplinary management role. With this role I needed to hire a product manager. The hiring process took three months. Fortunately, for me, the internal Amazon job board was providing qualified candidates, so the sourcing part was covered. I had “coffee chats”, informal informational-type interviews, with 32 candidates to share as much as I could with the candidates. These informal 30-minute chats resulted in 10 “screens”. For these functional competency screens, I relied upon a senior manager who had a product management background at Amazon. After he vetted the candidates, I had 3 formal loops over this three-month period. This period had many emotional ups and downs, some would disqualify themselves by dropping out after the coffee chat (because of my lack of experience managing PMs), others expressed interest and made it to the screen phase only to be disqualified for lack of technical depth, one candidate, to whom we offered a position, was disqualified for poor performance within his current group. Finally, I found a candidate who was a great fit for the role, he turned out to be one of the best employees that I have managed. The total time investment was around 20 hours. In the midst of the coffee chats, “screens” and formal loops, I started to wonder, “when will this end?”. I have other job responsibilities other than interviewing candidates. However, as a wise mentor once told me, hiring is your most important job. Don’t give up, and be encouraged to persevere.
No candidate is going to be perfect. Even though you won’t find a perfect candidate, by focusing on what you need, making data driven decisions and enduring the highs and lows of the interview process you will find successful candidates. Finding these candidates isn’t an easy job, be patient with yourself and others during this process, and don’t give up.