Engineering manager, Kotlin enthusiast, speaker, and dad. Writing about tech, work, and life.
I’m on my way back home from Google I/O 2016. It was a fantastic conference — I met some great people and learned a lot.
But while I was there, I saw something horrifying, something I couldn’t shake from the moment I saw it…

“Eat. Sleep. Code. Repeat.” was printed on everything. I’d seen the phrase before, but this time it burned into my brain, probably because it was being so actively marketed at a large conference. I literally let out an “ugh” when I saw it.
Look, I get it — Google I/O is a developer conference, and the “eat, sleep, code, repeat” phrase is intended to be a clever way (albeit a completely unoriginal one) of saying “coding is awesome and we want to do it all the time!” I appreciate the enthusiasm, I do.
But there’s a damaging subtext, and that’s what bothers me. The phrase promotes an unhealthy perspective that programming is an all or nothing endeavor — that to excel at it, you have to go all in. It must be all consuming and the focus of your life.
Such bullshit. In fact it’s the exact opposite.
A truly balanced lifestyle — one that gives your brain and your soul some space to breathe non-programming air — actually makes you a better programmer.
Life outside of code helps nurture important qualities: inspiration, creative thinking, patience, flexibility, empathy, and many more. All of these skills make you a better programmer, and you can’t fully realize them by just coding.
It’s no secret that the tech industry loves hyperbole. How will you ever reach the coveted title of ninja, rock star, or wizard if you don’t spend all your waking, non-eating hours programming?!
I’ll give my standard advice: ignore the hype.
It’s wonderful to be so dedicated to your craft that programming is all you ever want to do. I love that enthusiasm. It can carry you to great heights.
But if you want to become the very best programmer you can be, make space for some non-programming activities. Let your brain stretch its legs and you might find a whole new level of flow.
For all its warts, Java has served me well. And as Android’s native language, it’s been a true blessing in disguise. Who knew all those years of writing webapps would turn into such an awesome mobile opportunity?
But I’ve never had strong feelings about Java itself. I liked some things about it, and I hated others. Whatever…it did the job. It was fine. For many years my perspective was simple — I didn’t have to love Java (or whatever programming language) to do my work well. That all changed a few months ago when I wrote my first Kotlin class.
It was a popup adapter in just 86 lines (17 of which were package and import statements), and I couldn’t get over how concise and readable it was. I could barely comprehend how little I wrote to get something to work. It took me a few passes, but all of a sudden, I sensed the difference. This wasn’t just about language features or what the FAQ said the language was capable of. This was about how I felt.
It was genuinely fun. I found myself smiling. I found myself saying “holy shit” more than a few times. I’d read code over and over and couldn’t believe how much I was accomplishing in so few lines. I couldn’t believe the clarity of the writing. Over the next few days, I wrote more and more Kotlin. I wrote my first extension. Then I converted an existing helper class and instantly cut 94 lines. I wanted to write more!
With just a few hours of effort, I cut 94 lines without breaking a sweat. I was amazed, excited, and having a ton of fun. I was also slightly freaked out by this weird new experience brought on by a programming language.
Then it finally dawned on me. Oh my God, this is it. This is what loving a programming language is like.
Over the next couple of weeks, that warm fuzzy feeling just grew and grew. Whenever I’d have to work with Java, it was painful. I’d find myself rushing through it and making stupid mistakes because I had more important Kotlin files to attend to. But when I opened the Kotlin files, I felt at home, relaxed. The code was beautiful and expressive. It was concise but powerful. I kept finding new ways to write more clearly, more directly. And I was happy!
And so that’s where we’re at in the love story. It’s still really early, and who knows if this is just infatuation or true love. For all I know it’ll all come crumbling down. But no matter how it turns out, I learned this very valuable lesson (and it only took me 15+ years)…
Nobody can truly decipher a programming language‘s greatness for you. No amount of explanation will help you feel a great language at your fingertips. They may try, but it won’t fully click. You have to experience it for yourself.
If you’re programming now, but don’t love the language you’re writing, I’d encourage you to try one that has a reputation for positive vibes: Ruby, Kotlin, Swift, or Coffeescript. And don’t just read the docs and do tutorials — pick one and try building something real.
A couple years ago I attended a conference in Austin. There were a lot of great speakers, but the one I really wanted to see was Mike Monteiro. I’ve admired Mike’s work from afar for many years because it’s so honest and direct.
I watched Mike’s entire talk, What Clients Don’t Know (and Why It’s Your Fault), and enjoyed it thoroughly. It was so great, I wanted to say thanks — it’s the least I could do for something I liked so much. I looked through the crowd for a while, but was never able to find him.
But I still wanted to say thanks, so I took a shot and sent him an email, fully assuming he wouldn’t read it. I kept it brief — I introduced myself, let him know that I’ve admired his work for many years, and thanked him for a great talk.

My email to Mike wasn’t anything special. Brief, friendly, and with a dash of personality. That’s it! Later that morning as we hung around the lobby, Mike walked up to me and said hello. We shook hands, and he mentioned he got my email and said thanks for that. The whole interaction was maybe 30 seconds, and I probably made a fool of myself.
But my foolishness aside, I got to meet someone who I admired. All it took was the simple act of saying thank you in an email.
So if you admire someone, want to say thank you, or just want to strike up a conversation, don’t be afraid to send a nice email. All the headlines keep declaring that email is dead, but it absolutely isn’t. Let your ideas, genuine gratitude, and personality shine in an email. You might be surprised what it leads to.
I have a confession to make — I’m not a rock star programmer. Nor am I a hacker. I don’t know ninjutsu. Nobody has ever called me a wizard.
Still, I take pride in the fact that I’m a good, solid programmer. One who works hard at his craft and really enjoys it, even without the fancy labels.
Yet every week I see a call for ninja programmers, who I assume slice lines of code with incredible precision. I read about tech rock stars, who I imagine write functions as beautiful as the “Stairway to Heaven” solo. I hear people throw around the word hacker (and the associated hack, hackfest, and hackathon) as if haphazardly chopping something into little bits or prying your way into an unauthorized system is a good thing.
And lest we forget about those amazing wizards, who can turn nothing into something with their…

There are no magical spells that will fix your code’s ills. With such cool sounding names and implied mystical skills, it sure sounds like these are the archetypes that all programmers should model themselves after.
But what if, like me, you don’t relate to these labels at all? If you don’t share the sensibilities of a rock star-ninja-hacker-wizard, you must be doing something wrong, right? Nope.
I’ll admit it — instead of ego-filled, high-risk, thrill-seeking badasses who can conjure up magical solutions, I have much lower key role models. I’m more akin to a librarian, scientist, artist, and carpenter.
Compared to a rock star-ninja-hacker-wizard, those labels do sound a little boring. But you know what? There’s absolutely nothing wrong with that.
Because when it comes to programming and building great products, I don’t want a rock star-ninja-hacker-wizard lifestyle. I don’t need the spotlight or fame. I don’t want to stay up until 4 a.m. every night and burn out. There are no magical spells to cure my code’s ills.
Instead, like a librarian I enjoy quiet and order. When code is well organized, things are easy to find and less likely to break, avoiding a bunch of noise and heartache.
Like a scientist I enjoy analyzing problems, trying different angles to solve them, and then sharing my findings. I want to understand how things work, and I want others to benefit from that understanding.
Like an artist I need to occasionally think outside the box, tap my creativity, and be able to see in abstracts. I want to embrace imperfection.
And like a carpenter, I really enjoy building things. Sometimes that means following a specific plan, and other times you just work with what you’ve got.
I bet there are a lot of you out there who’ve thought along the same lines. You see these silly terms used so casually — they make no sense, yet are often used to describe seemingly attractive job postings. Part of you scoffs, wondering how the use of this lingo ever got started. But a small part of you wonders why you can’t relate to being a rock star-ninja-hacker-wizard.
For those of you who feel that way, I say this — don’t listen to it. Ignore it. If you see a job posting with those words, run away fast and far. Relish the fact that you’re not a rock star-ninja-hacker-wizard. You’re probably already a great programmer doing great work, just without all the unnecessary glitz and glamour.
And whether you know it or not, everyone around you appreciates how much of a quiet badass you really are.
If you think building a software product is tough, try building a legendary car from scratch.
I recently watched A Faster Horse, a documentary about the development of the 2015 Ford Mustang. It examines how that Mustang, whose nameplate is an icon in Ford’s history (and America’s), went from idea to final shipping product — a five year process.
The amount of work it takes to produce a new car is absolutely dizzying. Take the following list for example, which is just a small sampling of the thousands of high-level items the Ford team is tasked with:
And if all that weren’t enough, once the car ships, it’s out of your hands. Recalls occasionally happen, but even those are typically for tweaks and safety, not reshaping the car itself.
Compare that to what we do in modern software development:
When I sat back and thought about how vastly different these industries are, a few things jumped out at me:
It’s that last point that really stuck in my head.
We (myself included) can sometimes get bogged down by the challenges in building software. If you’ve ever had a frustrating day of programming, team battles, or a tough interaction with a customer, you know the heavy feeling I’m talking about.
But compared to building a car from scratch, we’ve got it so good — writing software is easy!
Of course I don’t mean to trivialize our work or make reductive statements about our day to day problems. We all have tons of responsibilities on our shoulders to make great products that our customers love. On a daily basis we work on problems we don’t fully understand, critical bugs, and important features, all within a set of team dynamics and personalities.
But as hard as it is to tackle those issues, our struggles are relatively tame. If you take a look at the world around you, I bet you can find products that were insanely hard to ship, arguably much harder than software.
I personally think about the engineers at Boeing who are building massive jumbo jets every day. I’m in awe of construction crews who regularly build 50 story high-rises in Chicago. I’m fascinated by the amount of work that went into building my Nexus 6P so precisely.
A car or airplane has to be near perfect when it ships. A building must have every detail planned and triple checked. A phone must be engineered to the millimeter.
But modern software doesn’t have to be any of those things. We have a huge advantage — we can ship imperfection.
Software development brings us incredible freedom — freedom to build and ship things in days, not months; freedom to iterate and tune until our heart’s content; freedom to plan a little, but not excessively; freedom to be imperfect.
I am all for being detail oriented, but perfection is unobtainable in software. I’ll look closely at every detail of a feature and consider all the angles. Often there are imperfections, but if it’s a close call and the feature is good enough, I’ll always vote for shipping instead of holding it back.
This is not to say you should take shipping lightly. You should always consider the impact to your customers and understand any risks you might be taking by shipping an imperfect feature. And I’m not saying you should go rogue and ship things that fall outside the acceptable standards of your team or company.
But it’s also healthy for you and your brain to ship regularly— to put something out there, feel a sense of accomplishment, and let your customers react to it. You can hem and haw all day, but ultimately your customers will be the true judge of your work, not you or the people on your team.
And hey, if it doesn’t work out, just be glad you weren’t building a car. If something goes really haywire, you don’t have to institute a global recall. Refocus on the problem, reconsider it, fix your app, and ship it again.
Recently there have been a lot of people out there quitting Facebook, myself included. Some are upset by the experiments that Facebook ran to see how users would react to changes in stories they were fed. Others, like me, are simply realizing how much pent up frustration Facebook is causing.
A few recent examples of people coming to their senses…
That’s just a few examples among many, many other people who’ve left but haven’t written about it.
But the theme is the same throughout - there’s growing discontent about how Facebook is using our information to advertise to us, and even experiment on us. And more importantly, it’s becoming clear that Facebook is just plain making us unhappy.
That was my reason for leaving. My goal has been to cut anything out of my life that annoys me or makes me unhappy. When I was on Facebook, I was annoyed by all the ads and irrelevant content being shown to me. Everything about it just made me feel bad.
Part of it was that nothing seemed under my control. Stories I had no interest in would constantly pop up. People I didn’t know at all would show up in my stream because someone I barely knew commented on one of their photos. Even if I defriended a bunch of people, it was like winning the battle, but losing the war.
It was a constant cycle of being presented a bunch of news I didn’t care about, a bunch of people I didn’t know, and photos of picture-perfect lives (of which, I am 100% guilty of as well).
Perhaps more than anything though, I didn’t feel any type of actual social connection with any of my real friends. Everything was rushed - like or get liked, and move on. It gave me the perception that I knew what was going on with my friends, but I really didn’t. Facebook personas are mostly just the shiny coating that people present, nothing more.
I decided to try and stir things up a bit. To a group of my real friends, I wrote the following manifesto (slightly edited for privacy).
(A little backstory: before Facebook existed, I ran discussion forum software on my personal domain. The references to dankim.org/forums in the letter are to that forum software we used for a couple of years).
Hey friends,
You may have noticed I deactivated my Facebook account. But most likely you didn’t, because Facebook is a shitstorm of noise.
Harken back to 2000 (or whenever it was) when the actual dankim.org/forums existed. It was just that - a forum, a place for conversation. We had lots of lively, fun discussions and we felt connected. And Gary had a place to write a daily poll.
I’d argue that fun and that feeling of being connected is completely gone on Facebook. And I miss that, a lot. All of our lives are busier than they’ve ever been. I desperately want to keep up with you guys, not every God damn person I’ve ever met.
When it was 15-20 of us on dankim.org/forums, it was a place just for us, nobody else. It wasn’t about acquaintances, it was about real friends. We discussed way more, and so we connected way more.
Facebook claims to keep us connected with our friends, but it doesn’t. Instead we post a picture, a link, or a one-sentence status. People drive by and give you a like, and they move along to their 500 other friends.
These voice of our real friends are drowned out among all the other less important voices (and ads). Think about it - out of all your Facebook friends, how many do you really care about?
And even if there is something awesome you say or do, we don’t comment because we’d expose ourselves to your hundreds of friends (and probably most of their friends, depending on the utterly impossible to understand privacy settings). We don’t comment or discuss because we don’t want everyone to hear us - just our friends. Another missed connection.
By contrast, the forums were way more engaging and fun because they were safe. Nobody could get in without my permission. There was zero chance of an accidental photo tagging, or posting to your wall instead of the group. And because it was safe, we talked about whatever. We made fun of each other. We wondered how Gary came up with a new poll daily. Nobody read our shit, guaranteed, except the group of friends.
And maybe last, but certainly not least - Facebook is horrible for long form writing like this. There is no chance I could write anything like this on Facebook.
Writing on Facebook is painful. If you write more than a paragraph, it gets truncated so people can move onto the next story. Comments are trimmed and hidden so you can’t read what your friends wrote. Nowhere else in life are conversations built with “likes”. It’s fucked up.
I’ve now been away from Facebook for a couple of weeks, and I don’t miss it at all. And I’m not just saying that to prove a point or to rationalize the choice I made - I genuinely feel better, every day.
At the ripe age of 36 - a modest 18 years after starting to do my own finances - I think I’ve finally figured how to budget my money properly.
It’s not that I’ve ever been in a bad financial situation. I’ve always had positive cash flow, reasonable debt, and a decent retirement account. So it’d be easy to say that my budgeting systems must’ve been working.
But I never felt like I really understood budgeting that well. I knew what I did was working OK, but my system felt wishy-washy, even unstable. And with two kids, you don’t want things to be unstable!
Recently I started using You Need A Budget - known as “YNAB” to its loyal customers. I’ve heard people say great things about it, but never tried it. But boy am I glad I did. It’s been truly eye-opening.
YNAB is not only a nice piece of budgeting software, but more importantly it’s a method. It’s a philosophy about how to realistically budget your money each month, built around a very simple idea: give every dollar a job. That guiding principal, combined with rule three: roll with the punches, has really make clear what was once fuzzy.
YNAB works because it runs counter to traditional, strict budgeting methods. With conventional bugeting, you’re told to set dollar amounts for everything you expect to spend money on, and never to go over those amounts. But that kind of budgeting has a common result: you routinely blow through a budget category (or your entire budget), then chalk it up as a failure. And after a couple of months like that, it’s easy to get frustrated and give up.
YNAB doesn’t do that. It actually encourages the exact opposite. It recognizes that you’re likely to blow a budget category month to month. As Jesse, the founder of YNAB says:
My wife and I have been married almost ten years, and we have operated using the YNAB Rules of Cash Flow the entire time. We have never, ever stayed within budget for every spending category.
The key, instead, is to roll with the punches. If you go over in one category in a given month, that’s OK - just make sure to adjust accordingly. Maybe that means next month spending less in that category. Maybe it means reducing your overall spending next month. Or, do what I do - I move money out of another category that has a surplus, and zero out the category I’ve overspent on. I’m Even Steven going into the next month.
How ever you choose to manage it, flexibility and recognition are the important strategies to remember. By allowing and encouraging adjustments, YNAB helps you see your spending habits develop. You can really monitor and consider where your hard earned cash goes.
And of course, YNAB’s excellent software helps you along the way. Moving money between categories is easy. Entering new transactions is simple, either on a smartphone or computer. And it identifies where you need to make adjustments - either in a category, or for the month.
YNAB is very focused on cash flow, and I think that’s why it works so well for me. By keeping an eye on my cash flow and assigning every dollar a job, there’s no guesswork. Long term stuff like savings, vacations, and college funds take care of themselves because cash has been assigned to them. And in conjunction with something like Mint, I can watch my YNAB cash convert into long term investments as well.
YNAB is really, really fantastic. I finally feel like I have true clarity on my spending. No matter what your budget size or financial status, implementating YNAB could really make a huge difference in your life.
The Spring 2013 quarter at The Starter League has begun, and we’re excited to get started!
Part of that excitement is the chance to make every quarter successively better. Everyone on The Starter League team takes teaching and learning seriously. We’re always looking to improve so that we can build the best learning experience for our students.
Recently I ran across a fascinating article about how people learn. It’s worth reading in full, but there were a few key insights that really stood out.
Your capacity to learn in a given session is limited to just a few ideas. When more is covered, less is retained.
We think about this a lot. We have eleven weeks to build your core skills, get you coding, and sustain your confidence. We focus on teaching within your capacity so you can retain what’s important.
We know we can’t cover everything in eleven weeks. Our goal is to give you the practical skills to code confidently, build, ship, and continue your journey.
Memorizing facts and techniques is necessary, but applying that knowledge to a real problem is crucial to learning and retention.
This is why we believe so much in Starter Night. It’s a chance to take what you’ve learned and build an app to solve a problem you care about. It’s the culmination of many weeks of hard work, and it’s an experience that will help you learn more deeply.
Having been a student last quarter, I can attest to the value of building something real. Our team was frustrated with friends who forgot to return our stuff. In four weeks we built an app from the ground up and shipped it. It was a proud moment, and one that I can’t wait for each of you to experience.
Everyone has different backgrounds, so it’s important that we make a connection with you.
When we understand where you’re coming from, we can help answer the questions that will help you learn – why is this worth learning, and how is it applicable in the real world?
The best thing you can do is be present.
This doesn’t mean you need to be the loudest voice in the room. Find what works for you. Pair up during class. Ask questions to your classmates or instructors. Participate during in-class exercises. Grab a beer and talk code. Come to office hours for one on one help. Do your homework. Code alone. Code often. Read ahead. Write about your experiences.
We’re students too. We want to keep learning and getting better at what we do. And we can’t wait to start learning with you.
Today I had some time to reflect on the changes I made in the past two months. I came to a simple conclusion: Life isn’t just good. It’s great.
The reason is astoundingly simple. I recognized a part of my life that made me unhappy and changed it. For me that was work.
Work is a huge part of our lives. It consumes (at least) 40% of our non-sleeping hours a week. That’s a lot of time to spend being unhappy.
So I made a drastic change. I quit my job in management and decided to learn to code again. I wanted to build my ideas, not just talk about them. I wanted to surround myself with like-minded people.
Being accepted to The Starter Leaguewas where the positive change started for me. I’ve been encouraged and challenged since day one.
In just six weeks I’ve learned practical coding skills through fun projects – an animated solar system, a weather app using responsive design, and CSS3 for awesome things like creating logos. Outside of class I’ve used those skills to rebuild my personal site.
I’ve also learned about the importance of writing, which is highly encouraged at The Starter League. Problem solving and making real software is immensely fulfilling, and writing helps it sink in. Both aspects have helped me to think more clearly about everything.
Most importantly my life is in order. I’m happier so I’m healthier. I have an amazing, supportive wife. My twin boys are healthy, happy, and learning. I get to see them grow up every day – more than I ever would have if I stayed in my old job.
It may sound corny, but I realize now how important it is to be happy. And it only took me 35 years to figure that out.