On Family, Cranking and Changing.

by jesse in , ,


Introduction

Sometime on May 6th - over two weeks ago now - I shot out a innocuous tweet asking what might be a good blog topic. I think I said something like "python, family, ...." - the overwhelming majority of them responded with "write something on family", ironically, as I was reading those responses sitting at a stop light (yeah, I know - don't yell at me) I got a phone call from my wife asking me to come home immediately. You see, my wife is very, very pregnant with our second child, and it's not been an easy pregnancy for her. We've had a lot of scares, and we've spent a fair amount of time in and out of our local hospital - so when she said "come home right now" - you can expect that everything else pretty much evacuated my brain except that.

I guess the twitter responses acted as sort of a cosmic hint as to what was coming - the abbreviated version being that my wife, bless her soul, was deemed "high risk" and admitted to the hospital on the 6th - with the expectation that she would not leave until she gave birth. Fast forward two weeks in the hospital, a myriad of tests, blowing out budgets on gas (what the hell) and being a "Single Dad" for most of that that time, and I can happily report that mommy and baby are stable, but still hanging out inside my wife.

These past two weeks taught me a lot about myself, about my family - some things that I thought I knew were brought to task and tested - heck, some of the things I was going to write about were put to the ultimate test. You may not really care about any of this - I'd go someplace else at this point if that's the case. I do hope to outline my thoughts on balancing things (though I remain terrible at it) and finding the time. You're not going to find a cure all, or a hack that will "just make things work" - that doesn't exist.

Cranking

The original idea behind throwing the "family" topic out there to twitter was that I've been stewing a lot on a now (in)famous post by Merlin Mann (of 43 Folder fame) entitled "Cranking" that I've linked to a few times. In that post, Merlin gave me one of the best "perspective resets" ever. If you haven't read the piece, go, do it now - if you're not a parent, it still applies. If you are, I doubt you can make it through it without some tears in your eyes. It's as much about Merlin's own perspective reset as to "why am I doing this" as it is about taking a step back and looking down at the crank you've been turning and realizing it's not connected to anything.

"Cranking" refers to the idea of turning a crank (duh) - something that we all do - we wake up, flip on the computer and crank - we crank out code, documentation, we ship products and we build empires. We turn a crank to get the money, get some task done, we do it day in and day out - and then one day we may look around  and realize that maybe our daughter is grown up as asking for the keys to the car, or that we've just been turning a crank that really doesn't mean all that much. We're doing it for enjoyment, we're doing it because maybe we love it, but what else that we love are we missing out on? Do you really love it?

As a parent of a beautiful, impertinent, incredibly (frighteningly) intelligent and perceptive 3 turning 4 year old girl - Merlin's essay obviously struck my nerves like the hammers hitting the wires inside a piano. This quote hangs in my head still:

And, every single morning at almost exactly 6:00 AM Pacific Time, my three-year-old daughter wakes up, jumps out of her crank-free, regular, big-girl bed, tears out of her regular bedroom, and--even before she gets her hot milk or takes off her pull-up or tells us to turn on Toy Story 2--she dashes into our regular bedroom, runs up to our regular non-hospital bed, and screams, "DAD-dy! DAD-dy! DAD-dy!" until I wake up and say, "G'mornin', Sweet Bug! Did you have nice sleeps?"

...

Because an annoying, rambling, disagreeable little man like me gets to have this alarm clock in piggy-patterned footie jammies run up to a regular, crank-less, healthy-Dad, non-hospital bed and make him feel like he's The Greatest Thing in the Universe.

(Cranking, 2011, Merlin Mann)

So. Go, read it - if you're not a parent, it's still relevant - you know why? Because turning the crank has to have a purpose - I've spent most of the last year un-learning years of built up mental muscle memory trying to get this fact jammed into my tiny little lizard brain. You see, I'm Jesse - and I'm a workaholic. No, actually, I'm worse than that - I define myself by my works and how much those around me value them. Me without a "job" is not a "me" at all. I would happily sit there turning a crank as hard and as fast as I could if I believed in it, even if, in three years, it wouldn't matter.

Define "job" as loosely as you like - for me, it's as much the job that pays me money (something I am also "re-learning" how to use, manage and the true meaning of) - maybe it's working for the Python Software Foundation - maybe it's contributing to open source code. For me, I've got a number of cranks that I turn - some less effectively, others with more. Maybe this is part mental sweep (a  GTD term), it's certainly not meant to toot my own horn as you'll see soon enough, but the "high level" things are:

  • My Job - I get to do what I love, with awesome people, but I turn that crank. I turn it as hard and as fast as I can. It's a startup, and you win as a team, or you lose as one. You turn it hard and you turn it fast in hopes that you can build something amazing, something that changes some component of the (technology) world around you. I love it, I wouldn't trade it for anything. It is still, however, a crank.
  • Being a PSF board member. Another crank, one I volunteer for - one that I turn because I'm just as passionate about Python The Community as I am about Python the Language. This one has sub cranks - things that I spin because they (in my mind) must be done. Sprints work, outreach, funding things, work to get servers for projects, modernizing contributor agreements. I could cut out all of the other things and slow this one down - but why? If I'm not going to do the work that must be done, why am I there to begin with?
  • Being a Python Core contributor. This one, I am afraid, has suffered at the hands of the others. I've been terrible at turning the crank for the module I am the defacto maintainer for (though I have asked for help). I've managed to combine the PSF/Community and Core aspect into the mentorship program, something I value almost more than actually getting patches pushed in myself. In theory, the mentorship program will do more of Python as a project than anything I could ever hope to code.
  • Being PyCon chair. Last year, I was co-chair for the PyCon conference. For the next two years, I will be chairing the conference. I almost didn't. I still have my reservations - but again, I care, strongly about the community that welcomed me despite me being a horribly broken human being, and Van Lindberg, a good friend of mine showed me that it could be done without going insane. So I picked up that crank. I will be the chairman for PyCon 2012, and 2013 in Santa Clara. No seriously, I care about the community.
  • Being a "writer". Yes, I consider writing for my blog, and other things as much a crank as all of the above. I love writing - my wife things I'm good at it. I love doing it. I wish I could do it, in the way that I love to do it and get paid for it (oh well), but I love knowing that I've reached out and taught something, said something or helped someone. That, and I do it for me. My writing - turning this crank - is as much a selfish endeavor as it is a selfless one.
  • An outspoken community member. Also known as "someone is wrong on the internet" - I spend a lot of time staying up to date on thing involving everything I've listed above, and commenting on internet forums, mailing lists, etc trying to help and educate people. This crank is unhealthy - or rather - it can be. I can easily find myself feeding assholes or wasting time debating language semantics when, at the end of the day, it won't change a single thing in the universe. Like Jacob "I refuse to tolerate assholes" - but I pay the price in emotional currency.

I look at this not even close to exhaustive list of cranks (projects, themes, things) and in some ways, I'm proud. In others, I'm terrified. I am also ashamed. I look at them and then I look at the works of Jacob Kaplan-Moss, Raymond Hettinger, Kenneth Reitz, Georg Brandl, Armin Ronacher, Doug Hellmann and many others and I say to myself "I am not doing enough - I am not a good enough engineer" or I look at the things they have built and I worry my meager turning of the Python** cranks will be meaningless in the face of the ages (see also, "impostor syndrome"). So I turn those cranks harder.

And I turn. I love my job. I turn. I love my community, I turn. I love writing, discussing, debating. I love putting smile on peoples' faces and I love the people and the world around me. So I turn those cranks. My "expectational debt" (thanks again Merlin) load is so high as to be borderline insane. It's funny: I recently took on a project completed unrelated to all of this that's a paying gig because it felt like a mental vacation - and it has been, ironically keeping both me and my wife sane as we can work on it together. Cranks aren't bad. Cranks are cranks.

I've left something out - intentionally. I've left out the thing(s) that really matter - the things that should never, ever, ever be considered a "crank" - a duty, a job. I left out my family.

Family

IMG 2396

 

To some people, a family - a wife, a daughter, your mom, your dad, a brother or sister come naturally. For some people, your emotional ties to family run fast and deep naturally. I'm not one of those people. I have various reasons why (not something I'm willing to discuss in public) - but I have trouble turning the same passion, drive and energy into this one thing I know matters more than any of the other bullshit I've talked about. I have constant trouble knowing when to stop and simply watch my daughter grow up.

As I've worked to improve my awareness of this - I've noticed how bad I've been/gotten. This is why "Cranking" hit me so hard. My ability to balance my time and attention effectively, while also spending it on the things that matter most has been grossly out of alignment. My iPhone has been a surgical attachment - I reply almost in real time to email work, or non-work related. When I should be sitting on the couch comforting my wife, or watching a movie (even though we've seen Tinkerbell 900 times) with my daughter, I'm sitting on my laptop turning a crank of some sort (for what it's worth - I'm writing this while my wife and daughter are sleeping). Instead of focusing on them, though I love them dearly, I would do anything for them, I'm turning cranks because:

But, even when my shitty little crank was not attached to anything, I did keep cranking. Because, Dads do their job. It's what they do.

I've always allowed myself to be defined by my "job" - my cranks. My sense of self is derived from my works - that's just who I am. Family, for some reason, that emotional attachment is something that has always been broken in some way for me. So, while I've been here for my wife and daughter these past 4 years, and we've made some wonderful memories, and I love them dearly - I've not "been all I can be". I've not been there as I've needed to be, or I've let the shitstorms I run through stink things up for them. Nothing is worse, or more selfish than snapping at my wife or child because someone sent me an email on a mailing list that pissed me off.

My job is to run through the shitstorm, it is to be covered in poop, realize it will be stinky, but to keep running allowing my momentum to carry me through. Before I come home though - before I talk to my wife or my four year old daughter who knows the context and proper usage of the f-bomb for some odd reason, it's also my job to take a shower and rinse the poop off. Because they don't deserve it, and they are more important than any of the cranks I'm turning.

Along the same time of cranking - another post came along that was an additional sucker punch. I know you've read it - you had to have. It's called "The Last Post" - by Derek K. Miller - it was posted by his family, per his wishes, post-mortem. Derek knew he was dying, and so he wrote this piece in advance. It's a message to his family, his children - and to the world. It's the final post to his blog. When I read it, I was knocked on my ass. Despite all the changes I've made, and have been making (discussed later), this post also brought my failings, or rather, my priorities (or lack thereof) into a stark contrast.

Quoting Derek:

The world, indeed the whole universe, is a beautiful, astonishing, wondrous place. There is always more to find out. I don't look back and regret anything, and I hope my family can find a way to do the same.

I want to be able to say the same thing. In some dark, selfish place in my heart, I am jealous of Derek - for his ability to write those words, to come to that level of peace. His message - that post - is just another hammer blow on the bell in my head telling me to wake up. As I said on hacker news:

... and the fact I have a second child probably coming Very Soon Now, I have to admit I'm sitting back and thinking hard about where I've spent, and am spending my time. I'm thinking about all the wasted time and opportunities I've accrued over the past 31 years.

I'm thinking about all the time spent arguing with people on the internet and giving up my free time to change some small part of the world, and not playing with my almost four year old daughter, or talking with my beautiful wife.

Take stock in your life and make sure you're following your passions. Make sure you try to remember and capture every moment before it's gone. Change the world while you're still here.

Appreciate the world while you're still here.

My daughter is almost four. I love her and my wife more than anything, despite my frequent and persistent ability to lose focus or make that critical synaptic connection. The smile and laugh of my daughter - the smile and laugh of my wife. The sun poking through the trees while my daughter sits on a swing - these things are more beautiful than the code and community I crank so hard on - they're far more important. You say though - "But Jesse, you turn those cranks for them" - yes, I do. I work not just because I love it - but because it puts food on the table. I work on community building and efforts because I want to change some small part of the world my daughter will grow up in. I want to make programming/at least one programing community more welcoming for her. All of the things I do can be justified by self interest and in the name of supporting my family, and changing the "world" for them. Still though: It's not a justification to miss the laugh or smile or moment with her, or my soon-to-be-born second daughter or my wife.

So now, that I've admitted that no - I'm not super dad, I am a broken human being and I too am looking for that balance between cranking, work and everything else, I'll share some of what has helped, and some of what I've done and continue to do.

Changes

Changes are hard for me, sometimes they feel impossible. Especially when they require the fundamental re-wiring of things you've allowed to go on for over 30 years.

The process of change started for me about the same time I started at Nasuni - it was at that point I once again quit smoking (and haven't smoked since - anyone interested in buying my massive cigar collection?). So the process started with health. I'd grown tired of being sick, fat and edging towards death, especially watching the amount of life my daughter is infused with. Later, I picked up playing paintball for exercise/as a release - but then I ended up wrecking my knee, so after a cortisone shot and barely missing surgery on my knee I really kicked things into high gear. I needed exercise but it needed to be something low-impact. I chose Bikram Yoga which has turned out to be an amazingly good choice. The yoga not only helped my body (I've lost weight, become more flexible, etc) it's helped my mind. My focus and meditation has gotten better, and my mind has grown quieter - it's gotten much easier to focus on things, I'm calmer and generally more in control of my self.

I also changed my diet completely. No more carbs, no more sugar, proper vitamin supplements - it's part Ketogenic and part Paleo. Since I've started, I've gone from 275lbs (a year ago) to 181lbs (today). I feel better not only physically, but mentally (although, I can not drink so much as a drop of alcohol). I'm more healthy and prepared to tackle things in general, not only can I better engage with physical things, I'm less likely to die due to bad habits and miss out on my family. The mental aspects can't be lauded enough - I'm happier, more able to focus, more excited about life. More recently I've switched to (and am loving) a standing desk which has actually helped the physical aspects as well as the focus aspects (oddly enough).

The next step - the harder ones - have been mental/habit changes. I've started timing tasks - I work on just about everything in "sprints" or "pomodoros" - whatever you want to call them - I have a timer set for 45 minutes. When that timer is running, I close everything not related to that thing, that includes twitter, email, chat - everything. Total and complete blackout, if someone interrupts me, in person, I consider the sprint ended unless it was directly applicable to the task. When the time is up, I take a short break, and then set it again and go back to cranking on something. The important thing is to give up on multitasking.

I can juggle lots of things - I can't do it at once in the same window of time and hope to make any progress. Each 45 minute block is accounted for in a master spreadsheet - not only do I know what it was for (PyCon, Work, Personal) and how long, I also know what was done (Fix a bug, write a module, do research). I slip a lot - I forget to set the timer, or I get the urge to lie to myself on a spreadsheet only I will ever see, but by in large, it's helped me focus a hell of a lot more in general. Especially at work - I know where/what I'm tackling, and at what rate I'm making progress. The only things I tend not to time are writing sessions - like the one I am doing now - I still completely black everything else out though.

Things like Apimac Timer, or Rescuetime can help here. The important thing is a focused window - drop everything that is not part of the task your working on. Don't forget though, a given time window could be "deal with email". Being focused is no excuse to screwing the people you collaborate with by not being responsive. Breakup your tasks into digestible chunks - hell, pull the "Debt Snowball" method on projects/bigger tasks - do a bunch of the smaller things to reward yourself / give your brain the dopamine squirt of progress earlier in the cycle.

I know it may come off as vaguely fanboyish at this point - but listening to and reading lot of Merlin Mann's stuff has helped me - his time and attention talk is excellent. I really recommend listening to the 5x5 podcast - a lot of what he's said or mentioned has rung pretty loudly for me. I've cribbed some of his techniques, or rather - thoughts on how to approach things and applied them. Inbox Zero - Yup. I'm operating on the "respond, followup or nuke" method of email management. Track tasks / things you only intend on working on - the rest is junk you need to get rid of. It's emotional baggage.

Emotional control/reaction control is still the hard one for me. I'm a rocket-sled into the volcano type of guy. I react hot and fast to everyone, and everything. Getting that in check has been rough going - the yoga, writing, etc has helped in that regard, but it also takes a lot of pure willpower and effort. Lately, due to the higher stress levels, I've adopted the rubber band technique to stop myself / put myself in check - it's a rough, ugly hack, but it's better than snapping at someone, or reacting overly quickly. It's important to stay passionate about things, and I'll never stop sharing my opinion - just not in a way that shuts the people down around me.

So now, with all the emotional/project focus - a lot of which seems focused on getting things done rather than addressing the core problem of "not living" where does that leave the home front?

Being more effective when I do have time, more calm and meditative allows me to enjoy and connect with my wife, with my kid. It gives me the freedom to realize that the world won't burn down if I don't have my iPhone scream at me from across the house that I have a new email, or check twitter, or read my news feeds. No, those things will still be there when I am ready to engage them. I'm learning, the hard way, how not to be a slave to my cranks, my addictions, my passions.

No, instead, I've shut off automatic email checking on all my devices. I don't know when something comes in. When the laptop is open: I'm working on something, otherwise, the laptop is closed. I've muted all auto-notifications on my laptop, shut off growl, sounds, etc. I check email in between sprints, or once an hour (still working on that one) and when I do, I deal with the ones that must be dealt with, right then - or I do nothing, leaving it for a sprint. I batch my news reader gorging into blocks of time in the morning and afternoon (and make generous use of Instapaper and an iPad) . If I find myself hot under the collar about "something on the internet" - I'll stop, take a breath and remind myself that the people around me don't deserve that fire.

I've also set (small) goals to help me move certain things forward - something I've heard time and again is to "keep your hand moving" (from "Writing down the Bones") - so I've adopted a version of 750words - nothing hard and strict. Just a goal - write 750 words a day, on anything. This doesn't include code though it could be about code (maybe I should adopt a version for code). It could be about family, code, etc. It could be for the company blog, my own, or just in a journal (another thing I have started doing - keeping a physical journal).

As I've been doing all of the above, I've also been learning the components of personal finance and debt that I've been lacking (e.g. how to do a damned budget and stick to it, and that, yes - the borrower is in fact, slave to the lender) - this, plus all of this work has led me to the realization that time and attention are like money and a budget. They're finite resources you don't get back. You can grow them through discipline and you can control where they go, but it takes work. There is no get out of jail free card.

So; I've cut distractions - I'm focused on being a better Dad and husband when I am home, no more sitting there ignoring my daughter while I hack (unless of course, it is an agreed upon period of hacking). When I tackle projects, I do it sanely and on my own terms - and I do it on time I can afford to use, with the attention it deserves. I hack and work when my wife and daughter are sleeping, when they're out of the house, or when we've agreed it's "my time". All other time is off limits.

Unless I'm just sitting on the couch watching Tinkerbell for the 9000th time. Then I might read my news on my iPad while my daughter is curled up next to me. Maybe.

The Future

I don't know what the future holds: I've made a lot of changes in a short period of time: I'm literally half the man I used to be, and some days I don't stick to the path or the ideals I've laid out - I make mistakes, I forget to write, I get caught up in something and I miss my daughter trying to show me the fact she wrote her name (who is the asshole? This guy). I'm going to continue to turn the cranks I have adopted, maybe I'll turn them differently though, delegate more, push some tasks that come out of my mental grist mill off into the ether. I'm not sure.

More recently, I've started reading Mindfulness in Plain English - I don't know that I'll adopt meditation, but maybe some of the mental exercises involved can help me focus where I need to even more. Maybe it will help me realize new aspects of those cranks I turn. Hopefully, it would help me enjoy life - the life of my family that much more.

Who knows what's going to happen, I'm always interested in new approaches, thoughts, ideas and tools. Right now though, I'm going to push my fat pug off my couch and take my daughter to go see Barney live.

I think that's worth at least one hour of free time for Daddy later.

 


On Contribution

by jesse in ,


Preamble

A recent post on Hacker News entitled "Why I still don't contribute to open source" raised a series of thoughts in my head - but then, before I could even take the time to generate the smallest of replies, Brian Curtin swooped in and made probably one of the single best comments in reply, and on the subject of contribution that I've ever read. The original post; and Brian's excellent reply were enough to get me obsessing about this subject again - eager to share my thoughts and feelings on it.

A while ago (almost exactly a year, oddly enough) I posted a question here to my blog - "Why aren't You Contributing (to Python)" - the replies to that post, both in the original comments, Hacker News, Reddit and other thoughtful responses by Tim GoldenYaniv Aknin and Brian Curtin made me sit back and think for a long time what we - as a "python core" team could do to help reduce the friction and overall barrier to contributing to core itself. It also made me take a step back and ask myself why I contribute to Python - not just via core, but also to PyCon and the PSF.

In the replies; there was a common series of "barriers" cited - and as you read through those posts above, you will note that many of them aren't just applicable to Python-Core itself. They are applicable to open source in general. This is something important to note, as solutions to these problems identified by "us" and other projects can be globally applied to projects "suffering" from a "lack of new blood" and new contribution.

New contribution is the lifeblood of projects - it brings new, fresh perspectives and ideas, new solutions to old problems, in addition to adding bandwidth to a project's maintenance overall.

The key "barriers" were:

  • Time - this is the easiest to extract; all of us are incredibly busy people. Especially people with families, or hobbies outside of just hacking on code, technology. We have our day jobs, or school - or we have wonderful little children and beautiful spouses that absorb (deservedly so) our time. This leaves a finite amount of time wherein people can contribute if it's something they have any time to do at all. Most of us don't get paid to contribute to open source projects, and even then, if we do, once again it's a finite amount of time (let's say, 25%).
  • Knowledge - A lot of people cited difficulties in finding information about how to help and where help is needed. Still others mentioned they didn't even know there was a bug tracker, etc. Having a low barrier to entry - meaning a low friction method of having someone contribute something (a bug, a patch, a doc fix, etc) is critical. Hopefully the new Dev Guide helps, and hopefully the core-mentors project helps too.
  • Friction - Many people cited (both publicly and privately) that they felt that responses on the bug tracker and mailing lists were extremely hostile. Not only is there a perceived high barrier - it's a high barrier loaded with friction. Ignoring the hostility, real or perceived, there's also the friction of debate over changes, and the friction of time. If I submit a patch, and nothing happens for months, I am going to be less inclined to contribute anything.
  • Hostility - While I mention this in the friction part; it's important to note on it's own - people that don't feel welcome or that they can safely ask questions or explore ideas without being "yelled" at or judged harshly. Email is a terrible forum to transmit emotion, so even if the person writing the email didn't mean for it to come off as such, very frequently, emails that are short and to the point come off as cold, hard and sometimes insulting. Having a global developer community that spans cultures further complicates electronic exchanges.
  • Qualifications - many people felt that they were simply unqualified to contribute, in any way. People are daunted by projects like Python, and JQuery - anything with a user base or established "niche" seems to automatically generate higher barriers and more friction due to the simple fact people are scared they are not skilled enough to contribute.

Let's assume that all of these are real barriers (I feel they are) and there's a limited number of things to counter these things in place. Why bother?

Motivation

Brian's comment touches on something I think is important:

I strongly believe that everyone, and I mean everyone, is ready to contribute to OSS. On the Python project, Jesse Noller recently started a "core mentorship" group to help people put the rubber to the road. There's an almost endless amount of work to be done on CPython, and we'll literally take anyone with any amount of knowledge and help them contribute. Whether it's people contributing to OSS for the first time, or people new to contributing to Python, we can find something.

If you understand English, you can write documentation. If you can write Python code, which is obviously a common skill for someone interested in contributing to Python, there's plenty of work. If you know C, dig right in.

The group of core contributors ranges from 18 to the upper 60s, from the self-taught to multi-PhDs, from students to Googlers. I think the only people who aren't ready to contribute, wouldn't be interested in contributing in the first place.

(minor quibble: s/write documentation/improve documentation/ - see also JKM's post on great documentation, just like code, documentation contributions differ in scale)

Brian is dead right - I, like him, believe that everyone and anyone contribute to OSS, and in the local case - the Python case - everyone can contribute something no matter who they are, or what their skill set it. If you know english (especially better than I write it) then man, help with documentation - a seeming blind spot for many projects. If you're a designer, we both know most OSS needs some design help - web site designing, themeing, GUI work, and so on. The number of OSS projects out there with bad UI/UX and or just a bad interface (I'm looking at you, git) is astoundingly large.

I truly, fundamentally believe that OSS is is the perfect proof that anyone and everyone can contribute to something. Why? Code and projects are blind - or if they aren't, they should be. They don't care if you're a sentient ham sandwich, they don't care if you don't have the proper schooling, how old you are, the color of your skin, or your religious beliefs. They don't care where you are located or what you did before you contributed something. They just care about what you have contributed - doc patch, code patch or feature. That thing you have submitted should be able to stand on its own merits, regardless of anything outside of that atomic change. I'm not saying that what you've changed, proposed or patched won't be debated (see: bikesheds) - it will - but if it passes technical muster, then there should be nothing standing in the way of that change.

Why do I feel this way? Because - they (they being you - the Python community) welcomed me - I'm not qualified for contributing to something as large and amazing as Python! I'm barely qualified to raise my dog. I suffer from near constant impostor syndrome - I run across things inside of Python that frequently blow my mind, things I don't even grasp. I'm hot headed, brash and belligerent. I lead with my passion and my beliefs and I'll fight for something until I pass out from exhaustion. I overcommit, stretch myself thin. I signed up to maintain a module, then I had a kid and changed jobs. I'm not exactly a good programming citizen.

Even today, as I sit on the board of the Python Software Foundation, and I am now chair for PyCon, I look around in constant wonder and ask "why accept me"?

It's because OSS, and especially the Python community, of which I am very proud, truly doesn't care who you are - if you're a dog who can beat timsort, we'll take the patch if you can prove it. We accept social misanthropes, perfectly normal people with 2.5 kids, a dog and soccer practice on Sundays.

You've got to be passionate.

I'll admit - I'm not a cold, calculating mathematical engineer. Seriously, big surprise. What I am is insanely passionate about something, and the community around something most people consider "just a tool" (e.g. a language). I'm passionate about its community - I'm passionate about the language philosophy. My motivation comes from that very passion. The reason I am involved in OSS in any way is because I found myself incredibly passionate about something that changed my life. The reason why I steal time from my family, my job, and myself to work on these things is because they kindle a fire inside of me. Seeing something I've done help someone, make something better, change someone's life in some small way just feeds that fire.

I'm not in this due to a higher "human calling" - I don't contribute because I owe something to my fellow man - in fact, many times I've had to make the decision not to do something so I could spend more time putting food on the table for my family and myself. I contribute patches, ideas and what I can because it makes me feel good, it makes me feel rewarded and self-fulfilled.

If you're approaching contributing to a project - to a community - out of a sense that "you just should" or some broken ideal that you have to serve the greater good - it's just another job you're not passionate about. You're looking at contribution from the standpoint of a solemn duty, and not what it should be - something that is rewarding, exciting - something that when you look up and see someone using what you've made, fixed or improved you feel accomplished and awarded.

You have to pick a project, and something within that project that gives you that thrill, that fires up your passion (even if it's anger). You have to do it because you're inspired and you want to do it. Sure - there's a lot of drudge work at the end of the day - cleaning things up, fixing broken test suites, the equivalent to sweeping the floors once the party is over, but heck - you did something amazing, or some small thing that's going to change someone's life, go ahead and pick up a broom while you've still got that glow.

I contribute not from altruism; I contribute because I like to and I want to (and sometimes need to). Some part of me feels that yes, I am paying back some amount of debt - but no amount of social or moral debt will make you overcome the barriers I outlined in the preamble. Not amount of social extortion will make you pay the bill - only you can motivate you, and you have to want to do it. OSS is about scratching your itch; if something like python-core isn't itchy for you - find something that is.

Mechanics

After that little side rail into motivation - especially what drives me - I think it's important to go back to the mechanics. Those barriers are real - and as Brian points out, we (python-core) are working on them as a team, and the Python Software Foundation is working on them as a community. Since the original post I've been lucky to help spin up the python sprints project - the goal of which is to onboard new developers via face to face programming sprints. It's been pretty successful, and we still have lots we can and should do with it, but I like to think that we've done some work addressing the Knowledge, Friction and Qualifications issues on a local, sprint level.

People don't communicate face to face quite the same way they do on a mailing list, and a lot of people are much more comfortable sitting next to you asking questions then wading into/navigating the jungle of a mailing list. Especially when so many people expect negative "go look in the archives" and "RTFM". Mailing lists answer specific questions well, but tend to suck for getting big-picture information needed to get rolling on something.

Hence why we've also started the Python Core Mentorship program - which, if luck holds out, should be moderately successful in helping us ramp up new core developers in an environment that aims to remove the final barriers - we can't bend time. But I'll be damned if we can not lower the knowledge, friction, hostility barriers and make every person feel welcome and qualified, no matter who they are. I want the OSS world - even "my" own small corner of it to be welcoming when my children one day wander into it (if they want to).

We (as a community) have a long way to go - Python-Core as a team is still evolving - as a community, and as a development team - we have plenty of work to do to make conversations and discussions more civil, more welcoming. We have barriers that prevent us from being as diverse as we could be (notice I avoided should) - these are things we can help fix with outreach, leadership and guidance. We have to make it easy for people to contribute, and we have to make it friendly and fun. We have to take people who are afraid and make them feel confident and worthwhile (As Brian put it - "Having early success is key to having continued fun on the project.").

But Python-core isn't the center of the universe, nor should it be. The Python Software Foundation itself is simply a marketing and legal arm of a massive community. If language maintenance or community efforts aren't your thing - go find one of thousands of PyPi packages and help that project out, help it get a mentorship program, help it's docs, UX/UI. If you have a passion that's not solved - make a library and release it on github, bitbucket and PyPi and contribute that way. As I said in "Explaining the Python Software Foundation (Part 1)":

... Each and every Python programmer, author, and individual talking about Python right now is performing the mission of the PSF. Every bit of work (from writing code and documentation, to answering a question) moves Python's ecosystem forward. Every person reading this post or commenting about Python moves it forward. Essentially - if the ecosystem is a codebase - all of you have the commit bit.

Contribution can be "as small" as a documentation example (sometimes, more important than the code) - or it could be a PEP for a new language feature. Contribution could be organizing a conference, answering questions on a mailing list or introducing new people to the community and tools around you that you're passionate about. It has to be interesting and challenging to you.

You have to be fired up about it, maybe you're angry about a bug, maybe you love the tool, remember though a million bees with one sting can take down an elephant - you already know how to program, or how to write - this isn't monkeys at typewriters, this you, an intelligent and bright person working with other intelligent, bright people towards a common goal. You want to make, or contribute something awesome - you want to make the best damned hammer in history.

It can be daunting; it can feel like a shark tank - but trust in the fact that there are others out there that feel like you, and do want to help - and despite the fact that they won't express thanks (or don't know how) - everything you do contribute that's more than random nonconstructive criticism on a blog, email thread or bug report, or constantly telling people "you're doing it wrong" - is appreciated (Even when poorly expressed in an inappropriate location, constructive criticism can still prove useful in the long run).

At the end of the day, it is pretty cool to be able to do this on a modern, shipping operating system:

bender:~ jesse$ grep -r "Jesse Noller" /Library/Frameworks/Python.framework/

/Library/Frameworks/Python.framework/Resources/English.lproj/Documentation/_sources/whatsnew/2.6.txt:     PEP written by Jesse Noller and Richard Oudkerk;

And yes. You can help. All of you can, all of you do.

For further reading, you can also see:

Special thanks to my wife, Brian Curtin and Nick Coghlan for reading drafts of this post.


Getting to do what you love, with people that are awesome.

by jesse in , ,


On Friday of last week, a new post I wrote for my employer (Nasuni) went up - "Encryption Keys, User Data and Subpoenas". In that post, I got to outline, in clear "non slippery" language how my employer manages encryption keys, what data they have access to, etc. One of my favorite quotes:

If a customer has provided their own encryption key(s) - Nasuni, or the cloud provider, do not have those keys, and can not provide them as part of a subpoena or other legal process. We can not decrypt or access your data. We can not supply a key which we do not have. This is not policy or trust level protection: It’s impossible.

We offer auto-generated and escrowed keys as a convenience to the user - the benefits of having this feature outweigh the cost. A user or company who knows nothing about encryption keys and key escrow can still have strong data security and instantaneous disaster recovery, they can install a Filer in minutes and immediately be up and running.

Not only was I able to work with the team to get this post up - for those of you wondering how many layers of approval, legal cleansing or other "typical filtering" it went through - the answer is "none" (or close to it). We value honesty and being forthright above just about everything else, and so posts like this - or ones in the past on "5 Weaknesses of Cloud Storage Gateways", "Cloud Storage Isn’t Cheap: How the Price of Cloud Storage Compares to Traditional Storage", "What’s the Cost of a GB in the Cloud?" which are brutally honest and frankly, would probably never see the light of day in larger companies are actually encouraged, not discouraged. Does that mean that every little thing that could be controversial goes up? Obviously not, but we, as a team, have no problems  being honest with ourselves, our users and doing what we feel is the Right Thing.

It's one of those posts that makes me exceedingly proud to be part of a team that continually surprises me. Hence the actual subject of this post. I'm one of those lucky people who get to do something I really do love - actually, multiple things - with a team that surprises me on a daily basis. Of course we're a VC backed startup which means we're smaller and more intimate then most companies many people work for, and in turn means our interpersonal relationships are that much more amplified and intensified. You don't get into bed with a startup unless you know and trust the people (or at least a few of them people) involved - trust is an fundamentally critical component - it's akin to getting married.

I know - you've probably heard stuff like this before echoing from the west coast / silicon valley area - about how startups are magical lands of unicorns and fairies and how you're going to get a bajillion dollars data mining the social relationships of some poor floor waxing guy in south dakota - but these "families" - these startups where you can have these solid relationships with those you work with, and do multiple things exist well outside the silicon valley echo chamber (for example, we're Massachusetts based). You just have to look.

Sure, there's a lot of hype in tech about startups and getting rich quick - but having worked through the dot-com bubble, I've found that I value the team (the family) and the project much more than chasing down the latest IPO. The fact is, despite being at a startup that could fail at any moment (and many do) I feel more secure in my role, and with my paycheck than I would filed away in a cube at MegaCorp. I feel more secure in that I am not just another cog in a machine, and that it is within my power to change the face and direction of the company every single day.

Considering I've worked mainly for startups since I was 18 (some of which got acquired into much bigger companies) I have a bit of confirmation bias, admittedly. Sure, I could also find potentially even more freedom and go freelance, and build relationships that way, and sure - there's tons of people very happy working for massive companies, but right now, despite having one kid, and another on the way - I'm just not that type of person. I thrive on being able to go into work and find a new challenge every day, I thrive on trying on different roles, branching out into new things. Startups - especially ones where you trust those you work with, and those people support you and work with you are an excellent place to do these things.

For example - for some time now I've been leading the User Interface project for the product - we have an embedded web-based UI that allows for the management and administration of the device we sell (a data protection/storage device). Over two years ago, I was primarily focused on concurrency and parallel programming (fast is better) on a different team (this is when I was most active on multiprocessing) - now I'm writing a web application and a lot of middleware/management stuff on a device that has a much smaller amount of RAM and cores in most deployments. Before that, I was working on what is now called the HCP (Hitachi Content Platform) which is a ultra-large, highly scalable and distributed storage system (object store) which could be construed as a parent of the current cloud storage systems (it was originally built by Archivas).

Before that? I was doing work for Allaire/Macromedia on the ColdFusion and Flex teams.

You see, these startups, each in turn, has allowed me an amount of freedom to go places and learn things I don't think I would have otherwise had the opportunity to do. Sure, it's not all roses - there are hard times, layoffs, and sometimes outright failures. You know this (or you better know this) going into it.

I mention all this because as I was sitting here sipping my morning cup of coffee (only allowed one a day) - I was reading yet another visual design site and updating my list of books on my Amazon wish list and in looking at it, it struck me how much I, as a person and I, as an employee have changed due to the opportunities and challenges given to me. I get, on one hand, to learn UI/UX (and drool at the skills of someone like Idan Gazit). I get to think about distributed storage systems, CAP theorem, blocks versus files/objects, and the "cloud" every day - but then I get to sit down and work on images, CSS, user interface, experience and think about what analogies and abstractions work best for our users.

In less than two years, I went from "oh hai concurrency" to debating shades of blue and typography with Greg Newman. How awesome is that? That's not to say that the UI I'm leading/building/hacking on is a solo effort - it's not, we're a team, nor is to to say it's perfect (I'm still learning). It's just to show that a lot can change, and when you have a team you trust, management you trust and you work for a small, agile company you really can do just about anything. Our UI has clunky elements, and things we should clean up - but that is part of what's so great - I have the opportunity to do that. I can walk into my boss' office tomorrow and simply ask him "do you mind if I change X to Y, and here's why", and if it's a sound technical argument, about two minutes later I'll be doing it.

And that change will show up on every one of our customer and trial users boxes in pretty rapid succession. Did I mention I've also gotten to learn I enjoy writing a lot more than I thought I did before, and also - marketing is actually pretty damned interesting, and not such a filthy word as most hackers and programmers think (The joke is that I'm some sort of weird programming/marketing hybrid - not sure if it's an insult or not)? Yeah, I've gotten to do writing, UI/UX, learn web programming, and help out in marketing (and even sales and market strategy to a much lesser extent). It's a rocket sled flying through a forest of cool things to do and be a part of.

Interestingly, as an aside - this change of roles/changing of focus has also changed my focus and contributions in the Python Community - being part of the PSF Board, spinning up sprints/outreach, working on explaining what the PSF is, mentorship - taking on PyCon management - all of these things reflect a change in what my life is focused on, and it's pretty awesome.

Choose a job you love, and you will never have to work a day in your life. - Confucius

Find the right team - the team you trust, that knows what they're doing and where they're going (and that trusts you). Accept that you will probably fail - meaning, you will run out of money, or not get traction (and run out of money) but build that family, that team and have blast trying your best and just accepting all the new challenges and opportunities that come up. Find people who won't not challenge you - who won't ask you to adapt to new times and technology. Accept that you're no safer at MegaCorp because they literally only view you as a human resource and not as an individual.

Most of all - Find something you love doing, and do it with awesome people.

FWIW, here are some good design reads since I'm on the topic (feel free to mention ones you love):


Have you read your Python Docs Lately?

by jesse in ,


I - like most people comfortable with my relatively sane (yet limited) knowledge of Python - rarely go and read the python docs except when I know what I’m looking for. For example, I have a window open to itertools and collections open a lot more than I care to admit (I love you namedtuple. I loves you so much), but I rarely go off looking for new things/stuff that's changed.

For those few of you (and really, it should only be a few of you) who don’t know - Raymond Hettinger is a python core developer and author/maintainer of quite a few interesting modules within the standard library (and a constant stream of ASPN recipes). Raymond is also highly active on python-dev and other lists the subject of this post being python-list (the one list I refuse to join just due to the time/attention tradeoff).

Oh, he’s also a current member of the Python Software Foundation board of directors. To say he’s active would be an understatement.

Back to the subject at hand: Docs.

Raymond posted something I think should see a little bit more attention - as I stated in my opener, many of us are guilty of not reading much in the way of Python docs unless we are looking for something specific. We miss out on gems/updates to older docs that really make them shine. We also miss out on new examples, and other things that really help make Python’s docs some of the best out there.

As I said in my forward to Doug Hellmann’s “The Python Standard Library By Example” -

The standard library’s documentation is good, and constantly improving/evolving. Given the size and breadth of the standard library, it’s amazing for what it is. It’s awesome that we have hundreds of pages of documentation contributed by hundreds of developers and users that are used every single day by hundreds of thousands of people to create things – things as simple as one-off scripts, and as complex as the software that controls giant robotic arms.

In Raymond’s post to python-list, he listed some new/newly updated docs that are really interesting:

The newly added/revised logging howto by Vinay (author/maintainer of the logging module) is really good to note (You have visited the python docs howtos, right? It’s here.). The additional logging cookbook nicely compliments Vinay’s revised logging module documentation.

Oh, and if you were wondering - yes, there is an easy to read list in the “What’s new” document for 2.7 (curated by Raymond) that lists out all the new Python 3 features back ported to python 2.7 for your reading pleasure.

Last night, an additional resource popped up on my radar - pyth0n.org - a site, while needing some CSS love (oh, the CSS love it needs) is an excellent way to jump to just about anything within Python (docs, classes, methods, built-ins, etc). I think I killed it with load from tweeting about it last night, so be gentle. It really is a cool site, it's like a uber-index of Python.

As an addendum - Raymond has also become very active on posting interesting bit of python knowledge/protips on his twitter account, which have been a joy to see pop up in my tweet stream (Given how guilty I am of saying things that might be construed as “noise”). Some of highlights:

  • factoid: random.sample() automatically chooses an algorithm, remember-previous-picks or remove-picks-from-the-population
  • pro-tip: deque's optional maxlen argument useful for n most recent items, moving averages, sliding windows, tailing files
  • pro tip: def mean(s): return math.fsum(s)/len(s) # don't lose precision while adding large numbers of small values.
  • Dirt simple map/reduce utility for :

So, take a look around the latest docs and follow him, and other python developers such (Barry Warsaw, David Beazley, Nick Coghlan, R. David Murray, Guido Van Rossum) on twitter (you can follow me if you want). Brett Cannon (another core committer) has a twitter list of committers.

There’s been a lot of work done across the board to improve the docs, add to them and clean them up. A lot of excellent people contribute changes almost daily to them. They are a fantastic resource, and are greatly complimented by work like the Python Module of the Week (Doug Hellmann) and other tutorials spread across the web.

If you know of a particularly good tutorial, or explanation of a module, you might consider submitting a ticket citing it, and suggesting it be included into the standard library docs as well. What are some of your favorite documentation gems, or examples for Python?