Soft Skills Engineering - Episode 96: Teaching Burden and Unknown Unknowns
Episode Date: February 17, 2018This week Jamison and Dave answer these questions: I know that teaching others is important when working on a team so that the team can grow and get better. But what happens when one member of the... team, despite being the friendliest person in the world, is missing so many required skills for his job that it becomes impossible for me to do anything besides teach him? I recently heard the concept of “known unknowns” and “unknown unknowns”. It’s the unknown unknowns that get me. Sometimes I ask a question of a seasoned developer and they seem annoyed because it’s something that I could have looked up. They knew it but I didn’t. Sometimes I ask a question and they are eager to help because the question is interesting and they know it will be good for me to learn. I struggle because I don’t want to waste my time or theirs, but I want to work through things and learn. How do I do this well? Wikipedia has a whole article on the origin of the phrase “unknown unknowns”. Also, Gary Bernhardt has a fantastic talk called Ideology about “unknown knowns” - things we believe in software without even realizing we believe them. Hoobastank.
Transcript
Discussion (0)
It takes more than great loop unrolling skills to be a great engineer.
This is Soft Skills Engineering, episode 96.
I'm your host, Dave Smith.
I'm your host, Jameson Dance.
Soft Skills Engineering is a weekly advice show for software developers about non-technical questions.
You bring the questions, we bring the answers.
We do bring them.
We also bring thanks to our patrons.
We want to thank Dustin Coates and Michael Collier for supporting the podcast on Patreon.
they support at such a prodigious amount of money that we thank them every single time
and then and then we lie on our bed full of dollar bills that they've given us and you can support us
too by going to patreon.com slash soft skills eng or just go to our website softskills.audio
and click support us thank you so much to all of our patrons yeah thank you do you want me to read
the first question you know i do okay this is from an anonymous listener they say i know that
Teaching others is important when working on a team, so the team can grow and get better.
But what happens when one member of the team, despite being the friendliest person in the
world, is missing so many required skills for his job that it becomes impossible for
me to do anything besides teach him?
This person is an HTML CSS master, but wants to build a web app with zero knowledge of
JavaScript backends or databases.
He expects me to teach him everything, and he's so friendly, it's hard to say no.
How do I get out of this situation?
Wow, I can get free training by just being friendly?
That's awesome.
My whole career I've built websites with zero knowledge of JavaScript databases or backends.
Through the power of friendliness.
Friendliness is the most powerful programming language.
You program other humans to do work for you.
It's pretty good, but it's not as good as friendliness plus plus.
I don't know.
that added a lot of weird weird foot gun features your friends sometimes just show up at your house
in the middle of the night and stab you it's hard to know why well they did introduce classes and
you can learn things by taking a class oh i thought you're gonna say divides humans into
classes a class system yeah oh i hope everyone got that joke but if not you know whatever
there are classes in lots of languages i know but it was the c++ from c to c++ it added classes
that was the joke uh and now it's better because we explained it that's the law of humor um yeah
this is a good question there's i i found that the expectations for how much time you devote
to training new people varies wildly from company to company and even team to team
some companies have a really deliberate emphasis on they'll have like strict curriculum that people
go through and you even spend a lot of your time when you first start the job kind of going through
it some companies just throw people in the deep end i would say that's more the more the norm
some people will have a defined your startup bias is showing now i think without yeah that's true
it is my startup bias that's the norm at startups for sure um some people have a defined kind of
mentor assigned to them when they start someone they can go to with questions. Yeah. Um, some
people are just like left on their own to approach the group. Uh, yeah. So I think the expectations
depend a lot and it would be, it would be valuable to you to find out what the expectations are
from your company for training this person. Cause if they really expect you to help them out and
spend a lot of one-on-one time with him and you don't do it, then that's, that's no good. Yeah.
Um, if they don't and you spend all your time doing that, then it'll probably come back
to bite you in the form of you getting a lot less work done.
And then when you say, well, it's because I was spending time helping this person, they'll
say, well, you should have been doing this, help them a little bit.
Don't help them instead of do your job.
What do you think the chances are that a company would want this developer to take this other
developer from zero to full JavaScript competency?
is that do you really think that's likely in this scenario i think it's unlikely i mean maybe they
are hired with that explicit expectation it seems more like they were hired to do something else and
they want to get into this maybe they were hired as a designer who can code who can who can do ui
stuff or something yeah that's that's probably what's happened i'm gonna guess it's unlikely
that your management wants you to do this like full time yeah yeah but i think jameson is very
wise especially when he said why thank you yeah especially when he said you should go ask your
management how much time they expect you or think that would be best for you to spend doing this
they might not be aware it's even happening yeah sometimes i don't remember what they said their
job title was but sometimes a a common metric for judging senior developers is do they help level up
people around them for sure and so if if your boss is if your boss is open to the idea of helping
somebody of you spending some of your time doing that then you can you can use that to demonstrate
progress towards goals that help the company basically but if they just don't care then
then you got to kind of do it sneakily while still getting your work done and it probably
approaches it probably affects how much time you spend on it i see an opportunity for cross
training what if he writes all the sql and you write all the css and you help each other okay
so you both stop doing any real work and train each other up on this stuff you know nothing about
then you're both codependent
they can't fire both of us and then they're like why can't we
i'm pretty sure we can and we're gonna hire a css expert and an sql expert to replace you jokers
and like a good company we're gonna put them in silos where they can never talk to each other
this i think this tension is pretty common though i feel like i've experienced it several
different times of wanting to help people and wanting to get stuff done too and i don't want
to appear unfriendly and grumpy and turn people down but all the time i spend helping them is
time i will not spend accomplishing the stuff that i said i would accomplish that's right how
do you balance that stuff in just in general so i think well i don't i don't know in general i
think in general that's like that's like the life journey trying to figure out that
how do you do i had my hopes up you're in general answer that
can you give me like a general theory of doing life well
i think if you had one you'd put it in a book and sell it and have a picture of you
smiling with your thumbs up on the cover and you'd make a bunch of money yep and in the inside it'd
be like you'd read it all and you'd be like i feel good i don't know what i read but i feel good
i should buy more of that guy's books
you forgot to say i'm on the cover with two thumbs up wearing a suit and a long shadow
do not forget the long shadow yeah very trendy right now i'm told by my designer friends
i think your designer friends hate you
i think they're sabotaging your motivational speaker career
so i think in this case what you're dealing with is a scarcity problem where you have a
scarcity of your own time that you're trying to meet meter measure meet mead meet what's the
right word here meet like meet out yeah that's what i was thinking m-e-t-e or something yeah
that's a word right yeah i think so it's basically a fancy way of saying like allocate and measure
dole huh is that right it uh dispense or allot justice a punishment or harsh treatment okay
that's not what i was thinking you gotta come down hard on this guy dispense the justice
okay let me rephrase that this is a scarcity problem your time is the scarce resource and
you're trying to figure out how to share it you know there's a reasonable amount of time that you
can spend helping a developer level up a single developer level up on a skill they don't have
right maybe that time is four hours per week or one hour per day i don't know it this is where
you have to make the call but i would sit down with this developer and say i love helping you
and i want to help teach you everything i possibly can i think that i need to set a time limit of
four hours per week to dedicate to this and then i expect you to put in that time outside that to
get up to speed on your own and i think if if we do that we can probably be i can be successful and
you can be successful right and then get i would start strike up a little agreement with them
and then uh you know offer some online resources books whatever and then let that play out and it
could very well be that this is a course that leads them to failure but don't let it lead you
of failure as well it could also be a course to huge success for both of you where you can
cross the finish line later and be really happy that you did it together
but i you can't put in more than you have right yeah yeah i like that approach of putting it back
on the learner to be a little more proactive and maybe come prepared to some learning time like if
you limit it to specific times it's it's different than if you're just the go-to person to ask
to ask questions that sometimes turn into really long answers.
I worked with someone who was,
I would say they were the best learner I ever worked with.
They were the most deliberate
and did the most on their own to learn things.
And we had a weekly meeting.
So I don't know what they did on their own.
I just know every week they knew a lot more.
But we had a weekly meeting.
They explicitly approached me and were like,
hey, I want to learn a bunch of stuff.
I want to meet with you every week.
I'll bring you this list of questions
that I've worked on over the week
and we can just go through them all.
um and so that's what they did every week there was this long long list of questions that they'd
come across during the week that they kind of batched up and we went through them and some of
them were short answers some of them were um kind of pointers to go learn larger things but it was
just so deliberate and focused on using time effectively and not being overly distracting
or overly burdensome on other people that's awesome yeah i don't know that that approach
would work for everyone this person was super motivated and driven to to do stuff on their own
and very capable of learning stuff on their own and lots of people learn differently than that but
but for me it was it was the lightest burden of like training up someone more junior yeah that
that shows like a great deal of respect on their part too to say you know i want to respect your
time and make sure i'm using not too much and what i am using i'm being very effective with it i think
that's awesome yeah have you have you stayed in contact with them yeah what what has their career
gone toward at this point like where are they well after they worked with me dave it just
took off no they've done fantastically well once you left the relationship it took off
did i read that right they got rid of the dead weight once they cut away the ballast holding
back no they've they've done really well they've they've learned an amazing amount of stuff they're
they're very accomplished and knowledgeable in their field that's awesome well that's fantastic
so it sounds to me like you know the put the reins in the hand of the learner
while also balancing with your own management's desires for you and then let let it play out
right like you can't can't you can lead a horse to water you can't make them drink
that's a metaphor i've heard once yeah i don't know what it means i've never led a horse to
water i act i literally have and you know what they drink every time horses are terrifying
they are i'm scared of them they're huge i have quite a bit of experience with horses from my
childhood believe it or not huh yeah i'll save that for a story for another day okay i was
trampled once what yeah oh my gosh yeah all right have we have we answered the question how on earth
did we just get to that i don't know uh i don't know that's just whatever start magic
the question is definitely answered i think okay do you want to read our next question dave yes
this comes from a listener named travis travis says i recently heard the concept of known unknowns
and unknown unknowns it's the unknown unknowns that get me sometimes i ask a question of a
seasoned developer and they seem annoyed because it's something that i could have looked up
they knew it but i didn't sometimes i ask a question and they are eager to help because
the question is interesting and they know it will be good for me to learn i struggle because i don't
want to waste my time or theirs but i want to work through things and learn how do i do this well
do you want to explain the idea of known unknowns and unknown unknowns really quick
i do want you to explain that idea oh okay so known unknowns are things that you know you do
not know okay like i give an example of you i think yeah i i don't know how far away the earth
is from the sun but i know that that's a thing that i could go learn okay i know that i know
that like the earth is some distance away from the sun okay um unknown unknowns are things you
do not know that you don't know like maybe there are secretly invisible aliens hovering around us
all the time and i don't know what their culture is like because i don't even know they exist
right like you don't even know to think about yeah or like in computery terms if you're a new
developer you might know that you don't know the syntax for like a for loop but you might not know
that like database replication is a thing and so you don't even know that that's a thing you
could go learn more about how to do or sometimes you might not know like that there's a name for
a style of programming like a yeah functional programming or something you might not might
not have even known there was a whole discipline called functional programming and yeah yeah yeah
that's a good way to describe it uh okay so that's an unknown unknown uh and then we have known
unknowns and so this guy's struggling with the unknown unknowns in other words we don't he doesn't
even know travis doesn't even know what question to ask sometimes is that what he's saying i think
so or maybe he's saying that sometimes he asks a question and doesn't even realize it's something
that he could have looked up because he didn't quite know how to search for it or something
i think all those apply it's even a little bit yeah to me this question is easier to answer
from the outside looking at travis than from then from travis's perspective because it's not always
true so if i'm if i'm if i'm on travis's team and i'm a more experienced developer
um it's it's a lot easier for me to notice well is it maybe yeah okay i think i'm just gonna start
to say nonsense and see how it feels coming out of my mouth yeah it's not bad already
when when you are struggling with something it's hard to think is this a known unknown or an unknown
unknown because you don't know it either way but i think it's a skill you can get better at
developing is knowing or realizing hey this thing i don't know like i could i could just look this
up somehow versus to me unknown unknowns you need some kind of outside perspective to tell you
hey database replication is a thing or hey invisible aliens are all around us or whatever
whatever just just hint to you that this concept exists and then you can go learn it yeah and like
Sometimes it just takes one word, one keyword, right?
Yeah, like, Hoobastank.
And then you have a vision, your mind is opened.
I don't know.
So if I am not Travis,
if I'm a more experienced developer on Travis's team,
I don't want to spend my time teaching known unknowns.
I want to spend time introducing unknown unknowns.
So I would want to say,
hey did you know that databases can replicate and sometimes when you need
uh better better failover or better read performance or a bunch of different reasons
you write stuff to different databases sometimes it does it for you in the back end like that's
a thing we do go check it out and then it'll make more sense why we use this i don't know
this particular library this specific way or i i think the disconnect here when between the
question asker and the question um what's asky is that uh the question asky the person who's
getting asked they they sometimes don't know what you don't know so if you say a question like why
do we write to two databases like it's a you know and and the person assumes you already know
what replication is and why we replicate but you do yeah then they're like oh you're an idiot
that's like what you want that's my fear yeah exactly every time i ask a question i'm like
i hope they don't think i'm an idiot i hope they just think i don't know this
and i think sometimes when people come to me with questions i'm like okay do they really not know
what replication is or you know like do i need to explain that and then sometimes i waste my breath
right because they already know what that is and i just misunderstood the question or something so
it's real this is just hard human communication is hard about especially about technical subjects
yeah i'm experiencing this at my new job there's a lot of stuff that's very familiar and there's a
lot of stuff that's very different so some things there'll be a conversation going on and i can
chop in and participate productively and some things i'll say a word that doesn't make any
sense or like i'll i'll be in a meeting and i'll be like there was this word in the title that
we've been saying over and over again what is that and then they'll realize like oh he doesn't even
know yep anything about this and but i don't feel bad about asking about unknown unknowns because
to me there's not really a way i could have known them without some outside intervention
or without being born an idiot yeah or just being born a smart person instead of a dumb person born
with knowledge and replication yeah i i would like to think that i'm more capable at dealing with
known unknowns than i was in the past but unknown unknowns i don't know any shortcuts besides just
like be willing to look real dumb and admit that i don't know stuff yeah and i think sometimes you
stumble into unknown unknowns by luck without being in a question asking context because you're
just reading something or following an email thread and you kind of put two and two together
or click a link to a wiki page that explains things you know and you kind of just stumble
into it and go oh there's a whole world here i didn't even know about this you know yeah those
are the lucky ones it's when you're in the meeting situation like you're describing and you're like
hey guys what's replication yeah those are the painful ones you keep using i see the the word
a lot they're like oh http is that what you mean yeah that's what i said what did you think i said
totally true so i think um one of the things i would say to travis is that this
basically never changes over the course of a career i've been i've been developing software
for 15 years and pretty much this still happens to me at a not necessarily maybe at the same rate
it's happened to me for about the last decade which is to say that i stumble into unknown
unknowns all the time still and and have you ever heard of greg lamond i have not he's a he's famous
among bicyclists he was a famous american road biker are you a bikesman i i am an occasional
bike smith i did not know that you didn't know i was a road biker no oh yeah i've been i am what
mode of transportation do you not use dave horses bicycles you got it all i took a train this
morning oh my goodness trains horses and bicycles those are the three main modes
yeah i think by per by volume of people moved
so greg lamon was a famous bicyclist and he commented once on the process of getting better
at riding bikes and riding bikes is exercise and it hurts right your muscles hurt it aches it
you know it's like any good exercise it's painful and uh someone asked him does it get any less
painful he said it never gets easier you just get faster and uh i really like that because it's like
oh yeah i'm just getting better at this even though my muscles still burn my legs still ache
and as a software developer the same thing happens like you never stop asking questions
you're just starting you just move into more and more challenging areas and it seems like it's
unbounded where you know once you peel back this layer of unknown unknowns and discover it there's
another one waiting under the surface with even more interesting challenges and then you start
to get into the business realm of things and it just grows and grows so there's always another
unknown unknown waiting around the corner for you and yeah once it can grow technically and also
grow organizationally like once you get into how different large groups interact oh yeah there
there are lots of unknowns there there are less i think there are less knowns than unknowns in
large group dynamics but you have huge unknown unknown muscles from your right prodigious amount
of exercise right and so you're no longer scared of them you know how the awkwardness feels you
know how to get through it um but like just like riding a bike you got to keep practicing and
for your unknown unknown muscles to get nice and nice and chiseled
yeah where would that make you be chiseled on your brain right your brain just have a six-pack
yep just furrow your brow and there's maybe yeah maybe it's your forehead when you lift your hair
back like you can see like your brain like bulging out of the top of your skull i think
that would yeah i would have a lot of questions that would produce a lot of known unknowns all
of a sudden for me okay do you remember the final boss on the teenage mutant ninja turtles video
game who was like this brain guy super big brain but like it was his brain was so big he had to
like put it in like a jar or something and he was in a dude it was krang yes krang yeah i know what
you're talking about he had this he had this big cyborg guy carry him around in his belly that's
right oh that's right he was in the belly krang he has explored so many unknown unknowns
clearly yeah around brain physiology and probably like blowing up the ocean i don't even know what
his evil plans were but he sure got foiled a lot by our heroes yes i still remember all four of
their names and the colors of their bandanas and the weapons that they wielded let's um let's move
on before i embarrass myself further okay it worked no one you haven't embarrassed yourself
it was all a dream i do you think we answered the question i really like this model of thinking
about knowledge and software it came from donald rumsfeld who lots of people hate um but but he
sure had a really good point when he said this and and i think it applies to a lot of stuff and it
it helps me have a better understanding of dealing with people that don't know what i know
yeah yeah i i think this whole thing has to do with context exchange between people
you know it's like you ask a question and when you ask that question you bring with it a whole
universe of context that you've piled up and the person you're asking the question of has their own
universe of context and they're not in they're not completely identical you know and and one is not
even necessarily a subset of the other so you have to do like this tcpip dance where you exchange
data to try to figure out what state you're in um in order to answer the question effectively and
learning how to minimize that state exchange that context exchange when you're asking a question is
a valuable skill and you can do that by basically putting everything out on the table and not being
ashamed of the fact that you have gaps in your knowledge yeah i want to say one last thing which
is i think this describes a lot of my day-to-day job as a manager i spent a lot of time trying to
figure out how to make unknown unknowns about my team into known unknowns oh basically there are
lots of things that i don't know that i don't know about how people are feeling how productive
they're being what's the progress on their tasks what tasks they're even working on and i could
just go up and tap them on the shoulder and say like give me give me you as a person give me
everything and that would spend all their time and then they wouldn't get any work done so i'm
trying to make it so that there there are ways that i can get this knowledge proactively instead
of just bug them and interrupt them and yeah i don't know make it something i can gather instead
have forced them to deliver to me i like that i heard i heard a great quote here at work not too
long ago that said that the software we build doesn't have to be perfect but it does have to
be perfectly understood and what that means is that it's okay if your software has weaknesses
as long as you know what they are and you can plan for them and deal with it but the the unknown
unknowns are the scary things that can happen to your software that you didn't even know could
happen the questions you didn't even think to ask yourself like what happens if our certificate
expires on our web servers or what happens if we get a sudden influx of traffic and it's not spread
across a wide geographical region or you know like that kind of thing and the only way to really
explore these unknown unknowns is to get super creative and just start thinking outside the box
and all the things that could happen and trying to then turn them into known unknowns you know
yeah because they can't become a known until they first start life as a known unknown
isn't that right is that a true statement uh i believe you
it sounds like that happens through crashes mostly
post-mortem something crashes and you're like oh that okay exactly it's like sometimes people
do pass in emojis instead of json exactly what happens if someone writes a json document that's
nothing but poop emojis and posts it to our web server yeah you know what that's fantastic so
the idea of a post-mortem or a retrospective is taking an event that gave you an opportunity to
discover an unknown unknown and turn it into a known unknown and then to eventually convert it
to a known right like you're supposed to like follow it along that process um that's cool i
like that i like that it's like a concrete objective for these kinds of events yeah cool
well i think we've answered the question i think so too where can people go if they want to get
their own question answered they can go to softskills.audio that's our website there's an
ask a question button please submit questions we love it when you do and we read them all and we
answer all of them as well just more slowly than we read them so please keep them coming we really
enjoy that it helps it helps keep the show going thanks everyone yeah we'll catch you next week
