Author: Duke Greene

I'm a singer-songwriter-rapper-coder-gamer-dad from Michigan attending Dev Bootcamp in Chicago and blogging my experience. My favorite food is pesto and Charlie Kelly is the songbird of our generation. In five years I plan to be writing code that makes IRL community building easier and more fun.


Which is it? Out, or alive? What is it all for?

It doesn’t matter what your “it” is.

One of the most frequently asked questions at DBC is “wait, should I bias toward completion of challenges, or deep understanding of the stuff I complete?”

And the teacher’s answer is always the same,  and always kinda frustrating: “Both. You should get it all done and know what was happening while you were doing it.”

That’s the most important lesson DBC taught me: that it’s not enough to stack dusty artifacts of Done Things in the corner, and it’s also not enough to avoid letting Things get Done by languishing in ego-boosting rabbit holes.

Sometimes, when a Thing is exhausting and you know it’ll be over at some point anyway, you just want to shut off and let the thing end and take what comes, because it’s easier than trying anymore.

And sometimes, you enjoy a Thing-In-Progress so much you don’t want the fun to end and laser in on the process of the work, ignoring the scary truth that someday there will be another Thing and it will need to replace this one, no matter how much you’d put into it.

Balancing between those extremes is hard even with the little stuff, and the big panicky stuff is almost guaranteed to throw it off.

And as I careen between my intrinsic desires to Do Things and my externally imposed needs to get Done with Things, I am soothed by the realization that I am alive right now, and this life is happening whether I’m here with it or not, and I can choose to dig in and engage in this moment, even if I’m scared or self-conscious.

And I need that soothe sometimes, because the proud and cowardly parts of my brain have a permanent death impulse, a nasty little internal desire to get Done with Things, no matter how momentous or trivial, so the rest of my brain doesn’t need to engage with the raw emotion that Doing often requires.

You know what? The song says it better. Lyrics below the folk.


You can open your mind
And carry hope for a time

But the shiver inside
It says just survive, just get out alive

You focus your eyes
And hold your head high

But nothing is fine
Til you get out alive, so get out alive

What if you saw through the pain

What if you thought it could change

What if you meant to be strong
Meant to stay calm
Meant to hold on
And then it was gone

You ain’t got the time
To wait out the fight

So maybe it’s fine
If you wither and hide, til you get out alive

Your shivering side
Your prison of pride

It might treat you kind
If you get out alive, so get out alive

Cause what if you saw through the pain

And what if you thought you could change

What if you meant to be strong
Meant to stay calm
Meant to hold on
Went for so long
And then it was gone

You could dig out of your dig down if you hit ground and you give up

Oh but what if you miss digging down

Cuz maybe living’s when you dig in to your digging til you dig up

What your digging was all about

Open your mind
To the end of the line

There’s no better time
To dig-deep and try, to live out a life

Cause no one survives
We live til we die

And the living provides
What you get out of life, so live out a life

Just live out your life
And live while alive
You can’t get out alive


Proof Like Comey (Moves Like Jagger Parody) – Annotated

I wrote a parody of “Moves Like Jagger”.

It’s about the Comey memos.

I put the lyrics below the video, and I put lots of links inside the lyrics.

I’ve emphasized the timeliest link, which points to a list of ways you can watch the Comey testimony live on June 8, 2017. (That’s tomorrow, as of this writing.)



Proof Like Comey

-whistling intro-

Collude in the dark

Cause it seems right

When wannabe Tsars

Hold your strings tight

And take me aside

With something to hide

Cause Flynn’s a good guy…

You wanted control

Of my process

But I did not fold

To your nonsense

You say I’m a nut

I showboat and stuff

I don’t give a fuck…

Cause of notes like this

You wanted me to stop and just let go

But I wrote it down in my memo

Building proof like Comey

I got that proof like Comey

I got that proooooof like Comey

I did not deny or condone you

But when I testify I might own you

With my proof like Comey

I got that proof like Comey

I got that proooooof

But maybe you’re raw

Cause you realize

You can’t rule us all

Like a real tyrant

Cause we have press

And balance and checks

So may I suggest


Just get in your lane

And then stay there

I know you’ve been trained

Not to play fair

But I’m on alert

So if you subvert

I will bring the hurt

With some notes like this

You thought that I would stop if you said so

Instead I’ll take you down like fresh memos

With my proof like Comey

I got that proof like Comey

I got that proooooof like Comey

The power of my pen is like old news

A reading man would know that I’d quote you

With this proof like Comey

I got this proof like Comey

I got this proooooof like Comey


You wanna know

How to be my goon

Just wait a second

(Friends, can you leave the room?)

Now if I share this secret

You’re gonna have to keep it

Nobody else can see this

Now listen hard

To my hushed advice

Call off the guards targeting my Russian ties

But don’t record what we said

And never ever leak it

Cause this is almost treason

Hey, wait! James, wait!

But I wrote that shit!

Try to tell a lie and I’ll roll you

I know a couple crimes that you spoke to

And there’s proof like Comey

I got that proof like Comey

I got that proooooof like Comey

You’re strung up by the tongue that controls you

I really hope your party disowns you

Over proof from Comey

They’ll get that proof from Comey

They’ll hear the truuuuuuth from Comey

P.S. If you’ve enjoyed reading any of the articles linked above, consider supporting the journalists who wrote them. A monthly subscription to a quality journalistic outlet you trust is a pretty small price to pay if you want to cut through the disinformative noise chamber that is social media and/or read articles that are (generally) less riddled with clickbait headlines, editing missteps, and plain old typos.

So You Just Graduated From Dev Bootcamp…

Welcome to the final, longest, and most difficult phase of the DBC curriculum: the rest of your life.


“Life Up Until Graduation” by Reddit user milksperfect

I saw that picture online and thought of how scary it felt after I got my dog tags, knowing I no longer had “stairs” pre-built by curriculum writers and explained with verbose READMES; the “ladders” of the less explicit, more open-ended challenges of P3 (faced alongside peers who could boost me up when my arms got tired); or “ramps” in the form of mentor advice and face-to-face sessions with instructors devoted to helping me succeed.

I felt excitedly lost. Terrifyingly open to all possibilities ahead. Exhausted. Thrilled. Grown up. Self-responsible. Unbound. Unsupported.

And I also felt kind of…alone.

Maybe you feel that way too right now. I think that’s about as normal as any DBC-adjacent feeling can be.

What got me feeling less alone was the realization that I didn’t have to uncouple from the relationships that sustained me as a boot. What got me feeling less unsupported was the knowledge that I had careers folks I could reach out to, commiserate with, and get feedback from.

What got me feeling less terrifyingly lost was a return to a realization I’d had back in my week one, when I had to implement Array#map.

“Everything that exists as code was created by a human being trying to solve a specific problem. If I can empathize with how that creator felt, then I, too, can create new things to solve my problems.”

I hope you have also learned that the path ahead is only as barren as you decide to make it.

Need a ramp? Hit up a meetup or two and ask your nagging questions. Maybe you’ll find a simpler answer than the one you were afraid you’d have to search for. Maybe you’ll find a new community of peers with different lessons to impart. Maybe you’ll find a mentor.

Need a ladder? Decide on a cool thing to build and work on it every day until it’s a real thing on the real web. A sloppy thing, an incomplete thing, a poorly-tested thing, but a real thing. A thing you built without an explicit README guiding you toward each next shaky step.

Need stairs? Google “<thing_i_want_to_learn> tutorial” and discover a brand new set of curricula shimmering beneath the surface of a sea of blue links.

Not having structure after structure helped you get where you are is a scary thing. But always remember that, within that structure, you’ve learned more than stuff.

You’ve learned about yourself.

You’ve learned what coding environments feels good for you. You’ve learned which of your debugging strategies tend to yawn open into cavernous rabbit holes that aren’t worth the time it takes to detour into them. You’ve learned how to collaborate and sustain positive energy through difficult work, teaching and learning from your teammates.

You’ve learned how to learn.

Probably you don’t yet know how you learn best, but probably you do know a few approaches that don’t work, hazards and sticking points to avoid when you want to keep your chin up and press forward at a steady pace.

So go do that. Go get to learning, and never stop.

And when you feel that dizzying, freezing, liberated terrorfeel of so much I could do do but how should I begin start to creep up from your gut through your heart and toward your brain stem, take a deep breath and repeat after me:

“Everything that exists as curriculum was created by a human being trying to teach a specific skill. If I can empathize with how that creator felt, then I, too, can create new curriculum to learn whatever skill I need.”

Or, as a friend of mine from Michigan once rapped,

“If you don’t like the road you’re on, then build a new one.”

And don’t forget that the most beautiful and meaningful thing you’ll be building is yourself.

Welcome to the community.

Embrace it.

Welcome to uncertainty.

Embrace it.

May you find your next error very soon.

With all of the love,

Rockets’ Red Glare

Action and reaction. Fire and force. In order to soar in one direction, a rocket has to burn furiously against the space it wishes to leave behind.

I’m a lover, not a fighter. I’ve always been a little miffed that my country’s anthem-choosers went with “bursting in air” over “sea to shining sea”. The shining seas are really nice. Bursting is…upsetting.

I remember sitting in classrooms and being told about taxation without representation. About people who were tired of giving so much to a king who cared so little about what they really needed, people who chose to risk what stability they had to fight for something better. And the story always seemed unreal to me, a touch too epic and yet a little too simple, like a fairy tale. Or a koan. Or a parable.

And it was too simple. A 2016 Google search demolishes the distortions and oversimplifications of a 1996 textbook. There was deep loyalism and colonial infighting and there were issues of distance and time and administrative friction and there was religious fervor and exclusion and there were countless tortured slaves and slaughtered indigenous people casting ugly shadows all over the Founders’ stated ideals.

There was also the fact that the colonies were doing alright by themselves in the years leading up to 1776. Why revolt when life isn’t revolting?

But anyway, I’ve been thinking about how rockets work.

So there’s this game called Just Cause 3, and it’s basically GTA meets James Bond meets Batman meets Tropico. You push various buttons in various sequences to make uber-badass Rico Rodriguez run and drive and fly around a sun-soaked archipelago that cowers under a dictator’s iron fist, and you shoot this and blow up that and grapple-tether those two other things into a collapsing heap and rinse and repeat until a town is liberated.

And then you liberate all the towns in a province. And then you liberate all the provinces in a region. If you were wearing a tan shirt instead of a blue shirt, you’d say “conquer” instead of “liberate”. You’re not really a good guy here, so much as the most violent person in the world, whose violence happens to oppose the violence to which most other people in that world have resigned themselves.

The game’s creators understand this grey area they’ve put you in. It’s right there in the name.

For what did you blow up everything in that police station?

A just cause.

And why did you tether a deer to the back of a stolen sports coupe and use it to sideswipe that military motorcycle at 160 km/h while shouting “meat nunchucks, baby!”?

Just ’cause.

The game gives you an unlimited supply of remote mines; you stick a few to a statue of the Evil Bad Tyrant Dictator Guy, grapple up to a rooftop for a better view, trigger the explosion. After enough mayhem, you unlock rocket boosters on the mines, and you can stick them to the back of an empty car, set them off, and watch them propel the car forward (towards the entrance to a heavily-guarded base, perhaps) before detonating after a few seconds.

Fire and force. Action and reaction.

To push forward, you have to put things behind you.

And I’m writing this post so I can hear myself admit to myself that there are things in my life that I am afraid to put behind me, because I’m afraid of moving forward.

I’ve been doing alright by myself, more than alright by any modern standard, but I don’t feel free at all.

In the wide world outside the video game, where my potential for movement and exploration far exceeds the 400 square miles of Rico’s sandbox, I still find myself on the couch, dutifully spending another weeknight living out someone else’s power fantasy. I’ve used a helicopter to hit the ceiling of the game’s skybox, just to see if I could, but there are streets in my own neighborhood that I’ve never set foot on.

I spend 7 hours a week on a train to or from work. 28 hours a month. 330 a year. Between right now and when I’m nearing retirement age, I could potentially spend 10,000 hours getting better at any number of things. All I’d have to do is quit zoning out on Twitter, stop hate-reading bad editorials or idly browsing deal sites, and maybe open a book or a notepad instead.

I get 90 minutes to eat lunch. I keep telling myself I’ll bring my Maschine to work and spend 60 of them figuring out how to make music on it. Instead I hop online again and drink at the bottomless content trough while overeating McDonalds and trying to convince myself that what I’m doing is self care.

I have four waking hours every weekday that aren’t devoted to work or commuting, and my daughter gets one of them, and dinner gets another, so how the hell am I making time to keep up with multiple shows on Netflix and Hulu?

I am losing too much time and energy to things that don’t have my best interests at heart.

I am being taxed without representation. By myself.

And I’ve consented to this taxation. I love these shiny toys that eat up my free time and stall my creative drive. And Twitter is dope. And Mickey D’s is delicious.

I am the tyrant king of an island nation of one, and I’ve spent a year caring so little about what I really need that I’ve almost forgotten what it is.

But I haven’t forgotten completely. I’ve tasted better food before. And I used to have more conversations with real people, and no one ever got cut off at 140. And there was a time not that long ago when I made my own toys, created my own worlds to fly around in, wrote my own stories, told my own story.

I put all of that behind me for a good reason: I needed to move very far, very quickly, in a new direction.

Two years ago, over the course of an exceptionally frantic and joyful summer, I moved to Chicago and learned how to build beautiful and meaningful things on the web. It was a lot to learn, perhaps too much for the time I had given myself to learn it. Tyrants set high bars for success.

But I learned it anyway, by casting aside everything else. No TV, just restorative sleep. No hate-reads, just reflective writing. No vidya, just code and code and code and code. I had left my wife and daughter in another state, and some days I forgot to call them to check in.

I was a rocket, and my trajectory was true, and that meant there had to be a million directions I wasn’t going.

I graduated and stumbled into the most challenging and rewarding and fulfilling job I’ve ever worked, and for a while it felt like I had finally arrived.

I mean, on paper, that’s exactly what I did. I don’t have to grind 60 hours to make ends meet anymore. I can afford date nights and pay the sitter a living wage. My work is recognized and appreciated within a community of like minded people whom I admire and respect. I no longer feel like I have to apologize for or explain away my two college dropouts at family functions; they are now prologue to an adventure instead of a tragedy’s motif.

The changes I’ve gone through felt like arrival for quite a while.

But what is arrival to a rocket?

I press R1 and Rico sticks a mine to the top of an unmanned enemy helicopter. In a couple minutes, I’ll have raised enough hell to raise my Heat Level and they’ll call in air support. Someone’s gonna man this chopper and right as they track me down and start opening fire, I plan to press and hold R1, which should trigger the extreme downward pressure of the pre-splosion rockets and cause the chopper to politely “land” before detonating.

Comically, I hope.

And tragically, I realize that I’ve spent the last year and a half doing the same thing to myself. The bladed bird is my creative life, soaring and explosive and hard to control and dangerous, brought to a standstill by a dramatic push to set my future on more solid ground.

But I hadn’t planned for the explosion after, the glut of timekilling consumer joys that would make me forget how good it felt to record something brand new and share it with the world.

In real life, the detonation is agonizingly slow. You ignite the boosters while playing your songs for 50 bucks a night and feeling like the brokest dude who ever conquered the world (or did you liberate it?); a few months later, you’re planning on writing an Internet radio app to help boost album sales for yourself and your artist friends back home; half a year on and you still haven’t put any new music out but it’s cool because you’ll hit 1000 followers soon and you’re getting really good at teaching and the school’s tri-weekly open mics feel like enough of an outlet for that gasping but ever-quieter voice deep inside; another year gone and Aesop Rock’s “Rings” hits your eardrums for the first time and you realize, holy shit, this song is about you. Or at least, it will be if you don’t change your trajectory, find some different stuff to put behind you.

It’s hard to admit, but I used to rap. And sing, and blog, and strum, and fold paper, and cook, and daydream about big stages in faraway places. I used to go to open mics every week and play billed slots on shows every month. I used to spend train rides refining couplets and reshaping clauses. I used to need to restring my guitar five times in a single summer.

And I was flying high, too high to reliably bring enough money home to my family or spend enough time with them when I got there. So I made my plans and set my mind and set my mines and pulled the trigger and found a more down-to-earth way of living.

But something’s bound to burst pretty soon.

And I’m hoping the pastimes to which I once pledged allegiance are still there.

Because I used to be braver than this. I used to be freer than this.

So I’m declaring my independence – from crafting and polishing my image on social media, from refreshing my feed in search of another like or update or aghast quote tweet to get riled up about, from Netflix binges and memorizing Hulu episode release days, from shopping instead of writing, from critiquing instead of practicing, from blowing up digital regimes instead of making the music that helps me stand up to real ones.

I’m declaring independence from trying to love a little bit of everything as a defense mechanism against forcing myself to fight for the few things I really care about. I’m a lover and a fighter. Some bursts are far more upsetting than others.

The easiest way for Rico to bring down a helicopter isn’t to blow it up or shoot it. All he has to do is grapple tether it to the ground and it will crash all on its own. The pilot AI is too rigidly aggressive to adjust to the tether, and it will pull at the line until it collides with earth and bursts into flames.

But humans aren’t coded like that. We can adapt.

So let’s say you were born yearning to soar, but reality has tied you down to an earth bursting with easy but hollow pleasures.

If you choose to stay where you are, you’ll surely rust from the inside out. But if you choose to fly, you’ll never break that tether, and you won’t be able to get as high up as you’d hoped, and changing direction too quickly or pushing too hard on the attack could disturb your vessel’s delicate balance and put an end to everything.

Why would you risk flight? Why would you even play the game at all?

Maybe you would if you had a good enough reason.

Or maybe the game is its own reward, and you’d give it a shot just ’cause you could.

Happy Fourth. Put something behind you so you can battle for something better. And don’t give up the fight.


Bugs and the Brown Line


The machine won’t. But maybe I can.

It’s February 2016 and I’m running like two minutes late. The train’s scheduled to arrive in two minutes. I hustle into the station. I tap my card at the turnstile.

Red. Insufficient. Shit.

I dart to the machine, tap card to reader, agonize for 1.5 seconds. The machine is so fucking slow.

Finally, the menu screen. Balance negative $1.75, thanks, I’d figured.

Ok, scan the screen, find the button. I was hurrying the last three times I had to do this, so it takes another precious second to spot it. Add value. Five bucks – crap, no, that’s too low, and it’s too late to go back now.

So I mash the up arrow a bunch of times until it’s $20ish, then watch in horror as the machine – so fucking slow – continues to tally the output of my queued button presses in fits and starts.

$34. Fuck it. Close enough. I glance at the sign, at some point it’s switched from 2 min to Due.

But I’ve got it from here. I’ve memorized this part. I can do it really fast. The letter I is debit. Press as you stage the card for a quick insert in a half second. Boom, screen changes right on time. Card in at that exact moment, card out at the exact moment the prompt switches, bang bang bang bang hit ENTER on the PIN pad, and holy shit the transaction could not be processed.

I was too quick on the card removal. Or maybe one of the pad presses didn’t register and I submitted a three-digit pin, I wouldn’t know, I’d been moving too fast to look up and count asterisks on the screen. No time to reflect, though, the train’s headlights are peeking over the horizon and I have to do this all over again.

Add transit value. This time, I just hit the $20. No need to button mash the number upwards, and anyway I’ll just get a pass next week when the money runs out.

Dimly, grimly, I become aware that I should have just picked a pass from the start.

But it’s too late to go back now. The train is slowing into the station. Debit, wait, card in, wait, card out.

One of the buttons for my PIN is sticky. It takes about a second to notice this, plus one to jam on it hard enough to get output, plus five to clear the accidental extra presses, get it right, hit ENTER.

During the next two seconds, while the order finishes processing, the *DOORS CLOSING** bells sound and I realize I’m now going to be fifteen minutes late.

Receipt Desired? Oh, who gives a shit. No, I guess. I’d prefer not to remember this.


Bears. Beets. Banes of my existence.

My debugging process is like this sometimes.

I start out feeling like I’m already running late. I convince myself that I should have started this task as a smarter person, or a better-prepared person, or a more emotionally resilient person.

And then I project my inadequacies onto two ever-present and crystal-clear mental images.

There’s Best Possible Me, who exercised and meditated this morning before reading 200 lines of production code over a balanced breakfast, and who has likely already finished whatever thing I’ve yet to start.

And then there’s Shittiest Possible Me, who never does anything right and is going to fuck this whole thing up and get called out for it and spiral into a deep depression and probably, I don’t know, cause some dozen faceless strangers to fail at life through some act of criminally negligent remissness that will absolutely happen in the future, all because Real Life Me can’t get his shit together and code this code.

There are several things wrong with this line of thinking, like the fact that neither Best Possible Me or Shittiest Possible Me are real people.

But the fatal glitch in my code happens one step earlier, right before I conjure my angel/devil duo, at the moment I start my work anxious about and fixated on this idea of whom I should be by now.

That’s an expectation. “Expectation” is a hilarious word, and I’m using “hilarious” in the literal, eponymous-Louis-CK-standup-bit sense: so funny it causes you to lose your sanity.

“Expectation” is a hilarious word, and it’s so funny because, in real life as we live it, it means the same thing as “assumption”. Or “dream”.

An expectation is an idea your mind has about how things ought to be at some moment in time. That’s it.

Not all ideas are realistic. Not all expectations can become real.

But our typical usage of the word carries this implicit notion that an expectation must become reality; if it couldn’t, why would we expect it?

And when a given expectation – “I should have started this task as a better-prepared human being” – could only ever become reality if I happen to own a time machine, and I don’t immediately recognize this and adjust my expectations accordingly, then whatever I do to serve that expectation from this point forward is going to chip away at my sanity.

Hilarious, right?

If I’m running late, I’m running late. If I’m underprepared, I’m underprepared. And if I’m wasting brain cycles trying to impose some expectation – some dream – on that unflinching reality, it’s that much harder for me to interface with my waking world in a way that will turn me into a quicker or more prepared person the next time around.

In fact, all that frustrated anxiety is more likely to push me deeper into the habit energy that got me here in the first place.

Shittiest Possible Me will never be real, but I will definitely slide toward a pretty reasonable facsimile by sitting still and thinking myself ragged instead of making my best effort in this moment.

And I’ll slide even faster if I use my angry flailing as a defense against admitting mistakes I’ve made, separating them from who I am, and accepting reality on its own terms.



It’s August 2014 and my pair and I are running like half a core challenge late. Everyone around us seems to have finished the first core an hour ago. We’re just now starting on the second one, which involves importing a huge collection of strings into a database, inflating them into ActiveRecord model objects, and running some methods on them in Sinatra controllers.

We repurpose a well-tested method we’d written a few weeks ago, and call it on a sample string to populate a collection called @results within our post route. We know how the method should work: the view needs to render the three results that we expect(!) to be there, assuming(!) everything’s running ok.

Error message. Undefined method `text' for nilClass.


We dart to the controller, tap fingers to keys, add a couple puts statements to the top of the post route, which is hard to spot at first, because we were hurrying the last couple of times we edited the controller file.

We hop back into the browser, go back a page, refresh the page, fill out the form, hit “Submit”. Check the terminal output.

Ok, so @results is empty. Did we forget to even populate the database? We’d been running behind and feeling too much internal catch-up pressure to pay close attention to our process, so yeah, you bet your ass we forgot to populate the database. Figures.

This human embodiment of all my unspoken feelings of inadequacy disguised as a well-meaning cohort mate strolls by, says “yeah, might as well get coffee or whatever, it takes like 10 minutes to seed the db” and so that’s what we do.

We get back, the terminal screen is full of rake task spaghetti that neither of us stop to read because some people in the kitchen had been strategizing their way around the challenge two after the one we’re stuck on. There’s no time to read. I mash CMD+K until the words go away. The blank screen helps me clear my head a little.

Looking back, reading the terminal output in horror would have been the smart move right here.

The database is seeded, but the method call still isn’t populating the collection. Every time we try something new in the view or controller and agonize through another back-refresh-reenter-pray-submit cycle – the feedback loop is so fucking slow – nothing changes.

Somewhere in all this, lunch happens.

I eat too much. Emotions are goddamn delicious.

And now, after changing every instance variable and route name in our app, switching the method attribute back and forth in our form tag, and reading our migration fields out loud, character by character, we have come to this: reexamining a method that works, trying to convince ourselves we’d written it wrong.

We refactor it over and over, and each thing we try works on our test strings but not in the app itself. We are stumped and exhausted and a little pissed off. Most pairs are two challenges ahead of us by now.

It finally occurs to us, two grown adult humans who each paid a small boatload (a kayakload?) of money to be here and learn from people who had done this stuff before, to ask for help from someone who had done this stuff before.

The instructor is patient and kind. He speaks softly and slowly. Cons: My belly is too full and I am burnt out and now I kinda feel like I need a nap. Pros: It is impossible for my thoughts to race as fast as they’ve been racing when the person I’m speaking to refuses to be in a rush about anything.

Another pro: he’s encouraging as hell. As we talk through our understanding of how the pieces of this CRUD app are communicating with one another – an understanding that we’d spent the last 2.5 hours solidifying with our repeated renaming and rewriting – he is constantly affirming our shaky knowledge with earnest positivity. He shows us that we already know how the thing should work in a general sense, and then turns the focus to a detail that he’s probably been considering since we called him over.

“So, have you two checked how your method runs in the console yet?”

We had, and it hadn’t worked when we applied it directly to our ActiveRecord objects. And instead of figuring out why, we had back to adding Sinatra’s abstraction layers to our problem space. It’s a lot of extra noise to debug through. But we – okay, back that up, I’ll only speak for myself here – I already had so much other noise in my head at that point, so many expectations, so much shitty self-talk, that I never thought to dig deeper at the console level.

Ok, so now we’re back in the console. We run the method on our sample string, no results. We search the database for the first word that should have come back. No results.

We run a query to return the last 20 words in the database, come up with a new and nonsensical sample string that should bring one of them back, run our original, weeks-old, well-tested method, and holy shit there it is.

Then we try something so crazy it’s almost sane: we search the db for the first of the three words we’d started out looking for. Not as a method return, just finding by the attribute name that held the string.

And nothing comes back. The word hadn’t made it into the database. Neither had the other two.

Dimly, grimly, I become aware that we should have just read the fucking terminal output after we got our coffee. Or we could have used create! instead of create. Or we could have hopped into the console to search for words as soon as the seed file had finished running.

But we hadn’t, because we were feeling rushed and insecure. And people who feel rushed and insecure make silly decisions.

Re-seeding the database takes 10 minutes. Three minutes after that, we have a fully functioning app.

Usually, pairs at DBC high five at this point. We don’t. There’s nothing that feels celebration-worthy about this. Because celebrating means reflecting on what just happened.

Reflection desired? After wasting half a day on a stupid rookie mistake?

Oh, who gives a shit…


Bears. Beets. Back-breaking self doubt.

Here are a few things I’ve learned about myself.

I don’t do my best singing while I’m planning how I’ll spend the tips after my set.

I don’t do my best blogging while I’m daydreaming about how big the traffic spike will be on tomorrow’s stats page.

I don’t do my best parenting while I’m worrying about what my daughter’s adulthood will be like.

I don’t do my best debugging when I’m thinking about my timebox for this commit.

I don’t do my best anything while I’m thinking about being done instead of focusing on what I’m doing.


Don’t count your touchdowns before they hatch.

I can only find the joy in my work if I’m present while I’m working. Once I start to obsess over the results I want, I lose focus on the process that can get those results, and my work suffers.

I learned how to be an adult from a culture that labels people – smart, dumb, emotional, cold, disobedient, flighty, funny, lazy, gifted, good, evil – and subtly reinforces those labels from early childhood until death. “She’s totally a type A.” “People never really change.” “I yam what I yam!”

We grow up with stories, and those stories all have heroes, and most of the time, the heroes are heroes because they’re special. Katniss has special aim. Mario has special glutes and quads. Ender has special tactical awareness. Pocahontas has special empathy. Rey has a special sensitivity to the Force. Superheroes have special everything.

Neo has special debugging skills. I don’t. No one I know does. The best debuggers I’ve met have some combination of a few things:

  1. a habit of reading error messages slowly and carefully
  2. a willingness to accept that the first two or ten Google searches might be fruitless
  3. enough mindfulness to stay calm, humble, and attentive in the face of stress, uncertainty, and deadlines
  4. snacks on hand
  5. the memories of hundreds of hours lost to silly mistakes, and the lessons learned
  6. gentleness with themselves

My go-tos are 2, 4, and 6. I’m working on 5, which seems like the only permanent one, but I haven’t yet put in enough hours to have wasted hundreds of them.

This one time, I was leading a breakout for Phase 1, and a student asked a question that no one asks in their first week unless they’ve had some prior programming experience. It was a clever, insightful question that anticipated the edgiest of edge cases.

The moment they asked the question, I could sense the collective tensing up of 80% of the cohort. I could almost hear them beating themselves up – “Jeez, if that person can ask a question on that level, does that mean I missed out on something in Phase 0? Should I have walked into this breakout as a better-prepared human being?”

So I answered the question, gave the student kudos for thinking on that level, and then I added this: “That one must have stung you a few times before, huh?”

As he laughed and nodded, I could almost hear the sighs of relief. “Oh, so this isn’t magic at all, then. If this work hurts today, maybe that’s just the discomfort that will lead me to mastery tomorrow.”



Pictured above (left to right): Me coding in 2016, me coding in 2014.

There’s so much content now. We spend tons of time consuming the finished products of hard work, and eventually we end up assuming that the finished products are the rule and not miraculous exceptions: the few poems that weren’t crumpled up and thrown into the bin, the few thinkpiece ideas that weren’t iced by the editor, the few apps that didn’t die before the index page was styled.

We celebrate others, and judge ourselves, based on how easily the most excellent outcomes seem to arrive. We rarely take the time to consider the processes that helped make those outcomes so excellent, hard work done behind closed doors, incrementally, often painfully.

But when we do take the time, it’s obvious that arrival is just the result of the last steps we take. Before we can arrive, we have to walk. And if we lose sight of the path by fixating on the finish line, we not only trip over our feet, but we refuse to look back at the things that tripped us up, and we end up making the same mistakes all over again.

When I left home to start DBC’s Phase 1, I left my wife and daughter behind, and I promised them I’d be done in nine weeks. I knew repeating phases was a thing, but I refused to plan for that eventuality because I thought it would give me an excuse to slow down.

I was in a hurry.

So while other boots seemed fully engaged with the material and one another, I was constantly looking ahead to the next assessment, wondering whether I was moving fast enough to crush it in one shot, obsessed with my impending arrival.

With that attitude, what ended up happening was that every error I encountered, every mistake I made, every hour I wasted spinning my wheels without asking for help, felt like a threat to my expected(!!!) nine-week timeline. I couldn’t learn at my best pace because I was never fully in the moment, always wasting brain cycles on comparing myself to the fastest students in the room, those human embodiments of my inadequacies disguised as well-meaning cohort mates.

Those humans, real people I could have spent more time connecting with, working with, and learning from, became projections of my own hurry worry and negative self-talk. I started to see them as avatars of my own Best Possible Me, fixed quantities of awesomeness that I felt I could never leap high enough to touch.

My inner critic is an asshole.


I couldn’t resist the pun. I’m so sorry.

Recovering addicts know that living beyond the present moment is an exercise in futility. Any fixation on a long-term goal becomes a trap.

Each day of sobriety you get under your belt adds pressure: what if you throw away three whole months with one bad decision? And each day you continue the journey toward your self-defined goal – your expectation – applies pressure from the other end: “I’m so, so, so close to putting a year together, and only a fucking failure would stumble with the finish line in sight.”

Also, there is no finish line for a recovering addict. There is no point on a timeline that represents the result an addict really wants – total freedom from the compulsion to relapse, forever and ever.

All you get is this moment, and the next moment always depends on how well you manage to take good care of the moment you’re in now.

But it’s really hard to be mindful in every moment, so by convention, recovery groups offer advice that pads the timeframe a bit: “Take it one day at a time.”

If you can forget about how far you’ve come and how far you would like to go, you have a better shot at listening to your body and mind today, and finding alternatives to relapse whenever a craving comes roaring back into your soul, uninvited and unannounced.


And if I see you tomorrow…well, that’s a tomorrow problem.

An addiction is a thing you can’t stop clinging to, even as your life falls apart. We tend to tie the term to drugs, but ideas can be just as dangerous.

So can priorities.

And if that’s the case, I believe American culture is both a masterful drug dealer and a tireless enabler.

Compulsory education gets us addicted to results and shortcuts; if I can figure out how to ace the test, by cramming or cheating or sucking up to the teacher, I’ll “succeed”, and if I never really learn anything in the process, who cares? I’m not here to learn – I’m here for a GPA and a piece of paper.

Rugged individualism gets us addicted to seeking self-worth through comparison and disconnection; if I can figure out how to live as a lone wolf, by separating myself from the sheeple and arriving(!) at good ideas first and fastest, I’ll be “unique”, and if I can only feel worthy by comparing myself to people I see as less worthy, who cares? I’m not here to make friends – I’m here to win.

The 24-hour news/social media/advertising cerberus gets us addicted to wanting things. If I can come to notice every imperfection in myself and the world around me, and the flaws keep me neck-deep in a feeling of not-enough, I’ll be “motivated”, and if all I can do with my restless energy is explode in the direction of the next consumable item placed in front of me, who cares? I’m not here for fulfillment – I’m here to chase my desires.

If I’m addicted to results, comparisons, and desiring things, how can I ever be ok with myself in this moment? Result addiction takes me out of the moment. Comparison addiction takes me out of myself. And desire addiction takes me out of being ok with where I am and what I have right now.

If I’m trying to quit smoking, my Best Possible Me seems like the imaginary version of myself who never picked up a pack in the first place. Or maybe he’s the version who goes cold turkey and swats down every craving for a decade straight, through sheer force of will. It’s an expectation, a dream, a figment. Best Possible Me will never exist.

But I’m finally starting to realize that I might be wrong about that.

Maybe Best Possible Me is a real person, but I’ve been looking for him in the wrong place. Maybe Best Possible Me is not something I can aim for, or compare myself to, or desire, because maybe he’s been here all along.

Maybe Best Possible Me is Real Life Me, but only when he’s actually living in real life. When he’s awake and attending to this moment, focused and flexible and willing to see things as they are, even if they violate some unspoken expectation.

Maybe Best Possible Me isn’t a person, but a pattern – a habit of staying mindful enough to discern the next thing I need to do.

Addicts say that all the time, too: “Do the next right thing.”

And then the next one. And then the next one. There are no sunk costs. There is no long term. The only way to honor the past is to take care of the present. The only way to make tomorrow awesome is to take good care of today. This, right here, right now, this is all we get.

Everything else is just so much dreaming, and your dreams are useless unless you wake up and do something about them.


“But I’m still asleep right now, Roto-Richard.”

Sometimes, when I’m coding, my next right thing is to read an error message.

Sometimes my next right thing is to make my best guess, change one thing, and see what happens.

Sometimes my next right thing is to read the docs.

Sometimes my next right thing is to ask for help.

Sometimes my next right thing is to take a break, like when I catch myself losing sight of what the next right thing is.

Sometimes my next right thing is to reflect on what I’ve just learned.

A lot of times, my next right thing is to figure out what my next right thing is.


Next right thing, don’t go berserk after handing down your life lessons.

I’m 18 months removed from that Phase 2 challenge, and I have never forgotten to use create! in my seed file since. I’ve also developed a habit of proving concepts in the console before I try to get them online. And I’ve gotten way better at actually reading terminal outputs instead of simply glancing at them to see if they look similar to things I’ve seen before.

I still fall into the pattern of banging my head against a problem for way too long before admitting defeat and asking for help, but it doesn’t happen as often anymore, and I don’t bang my head quite as long as I used to.

That hurried, harried, awful debugging session was formative for me in a way I couldn’t have anticipated in the moment. I thought I had lost half a day to a stupid mistake. But I’ve probably saved myself from facing at least a dozen half days since.

That afternoon, I had no desire to reflect on what I’d learned – I’d have preferred not to remember the day at all – but I had been blogging regularly for the previous four months, nightly for the previous three weeks, and so evening reflection had become a habit by that point.

So I did: As it turns out, my pair and I actually stumbled into a pretty solid understanding of how instance vars and params are getting passed back and forth, and damned if we didn’t solidify the shit out of that understanding today. Not bad, on balance. I still kinda feel like a failure, but I guess I got some good work done.

And it helped a little.

But what helped a little more was waking up the next day to find…that I had woken up. The world hadn’t ended. I wasn’t cosmically branded as Shittiest Possible Duke until the end of time. It was a new day, and yesterday had died, and looking ahead, I wasn’t sure where I’d stack up compared to my cohort on the upcoming challenges, but I didn’t care as much anymore.

Because there was new stuff to work on that day, and I knew I needed to stay present and ask for help if I wanted to make the most of my work.

My next right thing was to dust myself off and start again fresh.


The next step? Refactor.

It’s March 2016, and I’m not running late, because I listened to my alarm this morning instead of trying to clutch my dissipating dreams, and then I took a shower before aimlessly browsing Twitter as my family slept. The next train is scheduled to arrive in 2 minutes.

I hustle into the station. I tap my card at the turnstile.

Red. Insufficient.


Wait. Breathe.

This is where I am, right now, and I’ve been here before.

I walk to the machine, tap card to reader, give it the time it needs. I can’t will the machine to change how it does its work.

Menu screen. Read every option carefully. Find the next right button.

Add pass this time.

I select my duration, read the output. Select debit, wait, card in, wait, card out. I let myself glance left. In the distance, I see headlights peeking over the horizon.

Maybe I’ll make this one, maybe not. That’s a future concern.

I decide to return to the present. I do better work here.

I take my sweet time with the PIN pad. It’s strange, how when you look up at the screen to check your inputs, the buttons don’t seem to stick at all.

Receipt desired? Nah. No need to waste paper.

Besides, machines don’t make mistakes nearly as often as their users do.

I amble through the turnstile, through the door, onto the platform. The doors open just as I reach the end of the first rain shelter, which is exactly where I need to be. Without breaking my stride, I pivot left, step into the second car of the train, snag a solo seat – when you get on at Rockwell before oh-shit-I’m-almost-late-o-clock, there’s always an open solo seat in the second car – and I take my phone out of my pocket.

Normally, this is where I find a lot of stuff on social media to be angry at (why isn’t the world the way I expect it to be?!), but today I’m reflecting. Thinking about why this morning went so much smoother than that last time.

Thinking about lots of things.

I close Twitter, open Music, press play on Young Mountain, return to the home screen, open Notes, and start thinking out loud.

Who Wants To Rule The World? (How I Got Over Not Writing Love Songs For Donald Trump)

A mashup of Sara Bareilles’ “Love Song”, The Roots’ “How I Got Over”, Tears for Fears’ “Everybody Wants to Rule the World”, and Mac Miller’s “Donald Trump”.


(((Shoot! — Garden apartment 😛

So, I put together some thoughts…)))

La la la…

Head under water
And you tell me to breathe easy for awhile
But breathing gets harder
Even I know that
Made room for me
But it’s too soon to see
If I’m happy in your hands
I’m unusually hard to hold on to

Blank stares at
Blank faces
No easy way to say this
You mean well
But you make this hard on me…

Out in the streets
Where I grew up
First thing they teach is how to hide your love
That thinking can’t get you nowhere
Someone has to care
In these streets
Where I grew up
First thing they teach is how to hide our love
That thinking can’t get us nowhere

Someone wants you to write them a love song
They won’t ask for it
But they need one
And you’ll see if you write them a love song
You can help them with the pain of living another day
You can write them to stay
There’s no need for leaving when life has a meaning
So write them
A song about

Love, love, love…
The world could use your

But everybody wants to rule the word-

And I learned the hard way
See they all say
Things we wanna hear
And our heavy hearts sink deep down from the truth
That their twisted words
Their help just hurts
They are just who they thought we were
I’m high and I don’t care

Cause I swear it isn’t fair
Tryna rule the population
Can’t nobody go nowhere
In these streets
Everybody’s for themselves
They ain’t helpin’ no one else
It’s a hazard to our health in these streets, hey-
Who would worry about you babe
If you cried out
From these cold streets
Yeah, who’s worrying…

Someone wants you to give them a love song
They won’t ask for it
But they need one
And you’ll see if you live out your love song
You can help them through the pain of living another day
You can help them to stay
There’s no need for leaving when love has a meaning but

Nothing ever lasts forever
We trade freedom for quick pleasure
Everybody wants to

Take over the world
Cause look at all that money!
It pays to take over the world
When the crooks get all the money
But love can take over the world
Cause it’s bigger than the money
Our love can take over the world
We don’t need the money

All we need is
Love, love, love…
Daddy! daddy!
Love, love, love…
Daddy? DAD?
Love, love lov-


Why aren’t you listening to the words I say?

I didn’t hear you, I was singing a song. What are you doing?

Well, the TV turned off, and could you get me some win… and could you get me my wings, and where’s my stuffed Pikachu?

I don’t know where your stuffed Pikachu is! Should we go find him?


Ok, I’ll be right there.)))

Someone has to care…

(((Alright I gotta go find this Pikachu))).


We found it. It was under my nightstand.

“Is Five Hours A Day in Phase 0 Enough To Get Me Ready For Phase 1?”

This question, or some variant of it, comes up often, as students in Dev Bootcamp’s Phase 0 work mostly solo through a curriculum covering everything from HTML/CSS to JS to Ruby to SQL. It’s daunting, especially if you’re so new to code that you don’t even know if you don’t know what you don’t know!

So naturally, there’s this desire to put a timer on the work and hope that you’ll be all set when the bell rings, as long as you took enough time.

Most traditional education plays to this desire really nicely. X amount of credits. Y amount of years. Z number of certifications. And then, voila, you’re Educated, and it’s time to go do one thing on autopilot, for 50 years, until you die!


Let’s refactor that expectation a bit. This isn’t college, for better and for worse. A typical boot can lock in some concepts way faster here than there, but they’ll have to own more responsibility in order to make that happen.

Phase 0 is all about getting a solid grasp on the bare-bones fundamentals of a couple languages. It’s also necessarily an intro to some of the workflow patterns you’ll encounter over and over again while submitting code onsite at DBC and beyond. Understanding all the curriculum in those offsite weeks will leave you well-prepared for Phase 1.

Here’s the scary part, if years of traditional schooling did the same number on you that they did on me:

In the world of code, “understanding” is not the same thing as memorization.

It’s not the same thing as being able to talk your way through it.

It’s not the same thing as “oh, I get it now,” right after your pair codes it on their own.

It’s not the same thing as having read lots of books or attended lots of classes.

It’s not even the same thing as reviewing the last solution you personally coded and understanding all of it. Can you code it again? Right now? Without the cheat sheet you just created?

Maybe Alonzo from Training Day was in the wrong business! As someone who trades in the craft of code, understanding is not about what you “know,” it’s what you can prove.

Denzel as Alonzo, looking iconic and menacing in the film Training Day.

“To be truly effective, a good coder must know and love code. In fact, a good coder should have code in their blood. (Or, at minimum, their muscle memory.)”

Is 4 hours a day enough to bring you to that level of understanding? It might be, as long as time worked isn’t your only end goal. Some people need less time to understand concepts than others. Some need more.

Either way, what tends to eat up an unfair chunk of most novices’ time is simply the act of sitting there, befuddled by how something works, but too proud or scared or embarrassed to reach out and ask for help. The strategy I used to combat this was twofold: figure out how the thing works, and/or figure out how to ask for help.


When you write code, can you understand what it’s doing? Could you predict what lines of code a given program will run, in which order? Can you pseudocode every single step of your app? When you get something working, if you were to delete your code and go eat a snack, could you come back and do it all again from scratch? Even if all the variable names had changed in the tests/driver code?

You may not be there just yet, but you can definitely strive to get there in due time, as long as you realize that the above approach is the place where real learning happens, and chase that feeling every day you sit down to code.

And it’ll feel way less comfortable than “yay, 120 minutes until my learning is guaranteed to be locked in.”

And it should.

But it’s better to fight tooth and nail for that solid understanding right now, because your bias will need to shift away from understanding and closer to completion during a faster-paced P1 and ludicrous-speed P2.


I think I hear a deeper need in this question, and I’ve heard it before, and I’ve held it before, and it is a need that is screaming “HELP! I am not at all sure if I’m doing ok right now, and I don’t know how to find out , and I’m really scared that asking will somehow make everything worse.”

If that feels like your need at all, don’t stuff it beneath hours of work, as if time alone will lead you to mastery.

Drag that need out into the light of day, by getting outside info about your understanding as often as possible. Pair more than you’re required to. Ask for frank and honest feedback on how strong you seemed during your pairing session and what areas you could still use work on. If they aren’t comfortable giving feedback face-to-face, encourage and remind them to use the anonymous feedback app, and then make a habit of pairing with so many people that their feedback is truly anonymous.

The world-class beginner’s goal is not to set the right timer for themselves. The world-class beginner’s goal is to spend the right time with others. 

Don’t lone wolf it! Your peers’ camaraderie and feedback will help keep you out of your head and in your fingertips, where the only real learning ever happens.

There is nothing I have come to understand on my own in 5 hours that I couldn’t have picked up in 1.5 hours with a communicative pair.

If your plan is to practice 5 hours a day, my recommendation is to see if you can make at least one of those hours a paired one. Don’t make the pairing minimum your personal maximum. Why not pair every day if you already have the time?

Be greedy for human contact! It’s all the people around us who can help us see where we really stand, here and everywhere else in life. Besides, you signed on to a program like this because at least a part of you didn’t want to learn alone. Don’t start now!

So yes, to answer your original question, it sounds like you’re definitely putting in good time.

But make sure the time you’re putting in is good.

Happy coding! May you find your next error very soon.