The Fallacy of Tiny Modules

There is this myth, that if you break software into many tiny, super focused pieces, life is better. Bullshit.

Remember when object oriented languages were the shit? Breaking a complex system into small discrete pieces, exposing an abstracted interface, and reusing code by keeping everything highly specialized? Wasn’t it fun!

Call it what you like. Microservices, tiny modules, components, whatever. The bottom line is simple – at some point, someone has to put it all together and then, all the complexity is going to surface and the shit will hit the fan. Microservices are a nice idea and can be a valid architecture decision in some cases, but let’s not pretend that the people running the overall system are going to like it. Trading a large code based routing table for a large load balancer configuration isn’t better (actually, it is usually way worse).

Those promoting the idea of a utopia with a million tiny node modules living happily on npm keep using UNIX as their winning argument. The problem is that it is a false comparison. Small focused components making up the UNIX shell environment are only viable because UNIX is part of a curated distribution. Someone did the nasty hard work of picking a baseline functionality for you. More than that, that collection has been defined into a standard so that whatever UNIX flavor you are on, you can feel right at home.

Imagine if UNIX came with nothing but the kernel. No distributions. You install an empty kernel and then use some package manager to pick your copy, move, and list commands. Not much fun anymore, is it?. But wait, now go pick your flavor of grep, sed, and awk. Now make sure they all work well together and use the same flavor of regular expressions. Now make sure you keep everything up to date for security and stability.

This is what frameworks provide. In practice, a framework is a curated collection of functionality provided as a distribution. By picking a framework, you are picking a “single purpose node distribution” suitable for your application needs. The framework should allow you to swap the components with others but that baseline is the main value proposition. You buy into an ecosystem and in return you get a usable environment out of the box.

Tiny modules are a useful tool and a valuable design because they allow the construction of highly specific environments. But in most application development environments of any meaningful size, someone has to be the curator. Someone has to pick what’s being used and keep the collection both in sync and up to date, just like every UNIX distribution does.

You can argue that this someone is the developer building the application but that’s just not practical for the same reason you let others pick your operating system toolbox, your hardware toolbox, and even within node, your built-in toolbox. And this is just what’s under your web app. Don’t forget the entire front end side on top of it. Drawing the line at “everything on top of node” is an impractical and unproductive choice.

This is why frameworks matter. Go pick one.

(The author is highly biased as the maintainer of one such framework)

 

Don’t Be a Bully

I don’t know Brendan Eich. I don’t know much about him other than (1) Mr. Eich created JavaScript and (2) made a contribution to support proposition 8, aimed at taking away the right of gay couples to marry in California and voiding the marriages already taken place, including my own.

When the news about Brendan Eich’s contribution became public a couple years ago, the reaction within my community – the web development community – was pretty strong and one sided, deriding and marginalizing him. Brendan Eich didn’t do himself much favor with a blog post full of grand standing and lack of empathy. I did agree with his basic argument though.

Being a bully is never a productive strategy. It might be satisfying but it is counterproductive and shows the same lack of empathy that is at the root of the issue on the other side. If you limit your social and business circles to people who only share your exact social ideal, you are actually taking part in sustaining the status quo. There is nothing more powerful than an open dialog.

With his appointment to Mozilla CEO this week, the story got resurrected and many people I love and admire expressed their disagreement with the promotion solely on the base of his contribution. This is unfair. From all accounts, Mr. Eich has never applied his (assumed) personal belief to his work or to others, and pretty much everyone who chimed in has no real first-hand experience with Mr. Eich.

I don’t participate in parades or demonstrations. I am not very active beyond voting and making political contributions. But I am confident that by living my life in the open, by engaging those around me, I am making a positive impact on the lives of other gay people. I constantly invite my friends and coworkers to my house for dinner with their family, exposing them to what is often their first same sex family experience. I seek people and share my personal experiences, explaining why their positions are hurtful.

I strongly disagree with the claim that one can donate or vote to something like proposition 8, and be ignorance-free, hate-free, or bigotry-free. Try walk a mile in the shoes of most gay people, especially during their teen years in a society that still sucks today with its treatment of gay people and tell me you still stand behind that claim. But that’s also my point – it is very much my responsibility to share my feelings and experience with those who disagree with me in hope of seeding this understanding.

It is sad how many people lack true, actionable empathy for people who are still today being beaten, abused, derided, mocked, disowned, dismissed as an abomination, lynched, or executed. That even those who support gay rights are not sufficiently open minded about the wide range of gender expression that doesn’t fit their norms.

Instead of posting comments on Twitter aimed at specific individuals, consider sending those you disagree with an email explaining to them in  personal tones how their actions hurt you and impact your life. There is nothing more powerful than a personal interaction to change minds. I’m not saying you can change everyone’s mind, or that everyone would be open to engage, but you should at least try.

You don’t get to take the moral high ground unless you actually climb there first.

On Being (Mentally) Well

tl;dr – 1 in 4 people suffer from a mental disorder. If you feel depressed, anxious, or otherwise unhappy for more than a few days, please reach out to a friend, a family member, or a professional. If you feel alone or isolated, know that you are very much in good company with almost 60 million others (in the US alone). You might be surprised to know that many of your friends are (or have been) in therapy or use medication to help with their mental health. Regardless, educate yourself about mental health and make it known to your friends and family that seeking help is a sign of strength and that you are there for them. Please reach out today.

The past few weeks have been a sad and frustrating reminder of the painful toll depression and other mental disorders take. Right before New Year’s, our bay area community lost Conor Fahey-Latrope, a talented C++ developer. A few days later, Luke Arduini, a prominent node.js developer went missing. Sadly, they were not the only ones.

Continue reading

Speakers Creativity Budget

Node in the enterprise

TL;DR – if you are producing a conference, please offer your speakers a ‘creativity budget’ to make their presentations better.

I’m been a public speaker for a while. I derive great pleasure from speaking to a live audience, big or small. While preparing for and then delivering a talk takes huge amount of my time and energy, I keep accepting more speaking opportunities because it forces me to push the envelope on my craft. That is, my engineering, creative craft.

I set very high standard for myself (which I usually fall short of, but isn’t that the point?) which include:

Discovery

  • Talks should be entertaining first, educating second
  • Slides and props are meant to delight and excite, not document or narrate
  • Never repeat a talk (training sessions excluded)

For the same reason I believe most developers should not do design, I contract the artwork for my presentations. Over the past few years, I’ve enjoyed a fantastic artistic collaboration with Chris Carrasco who has created all the artwork used in my presentations. I have also learned to rely on props and other costly production elements. These all play a significant role in enhancing my talks.

They also cost money.

realtime

Most of my talks this year cost around $500 to produce. Some much more.

My ReatimeFood presentation cost over $5000 (which was paid for jointly by &yet, me, and the 24 participants who sat the special tables where food was served). My Fuck OAuth talk cost $1200 on artwork and shirts (and it would not have been as good without the shirts – it was absolutely an essential element). The Leek Seed bedtime story at NodeSummit cost $450 to produce (and it will be the main thing anyone will remember from that talk).

NodeSummit2013

Creativity is expensive and I’ve been fortunate enough to have the means to cover these costs out of my own pocket (I rarely ask my employer to cover these costs since they don’t really benefit from them). You can see a sample of my slides on the right and can find some of my decks here.

Quality conferences like NodeConf and RealtimeConf have long offered to cover speakers’ travel costs. They are produced by people who care deeply about quality and they recognize that top speaking talent demands top treatment. Conferences are business after all. But I think we need to go one step further.

I’d like to propose a new speaker benefit: a creativity budget.

Fuck OAuth

This is pretty simple. Each conference will make available a budget to reimburse speakers for costs such as artwork, props, hardware, or other materials that will enhance and elevate their presentations. For most conferences, I would set this at $300-500.

This will work similarly to how travel is covered today, by reimbursing speakers for submitted invoices, or by the event produce paying the costs directly. I would also encourage the organizers to promote and push speakers to spend the money. Almost every presentation can benefit from higher production value and the conference as a whole will be elevated. There is a reason so many people attend conferences these days, just to stare at their laptop all day.

Sled and OAuth 2.0

As for how to fund it, there are many creative ways. Asking for talk sponsorship, selling premium experiences, asking those with means to crowdfund it, or simply charging a bit more for tickets in exchange for a better conference experience. We’ve seen conferences with incredible production values over the last couple of years, but we have not seen any noticeable improvement in the quality of the talks. Let’s fix it.

Empathy

I’ve been asked by a few people for my thoughts regarding the ‘gendered pronoun’ incident that’s occupying the node community this week. I am purposely not linking to that thread. I appreciate Ben Noordhuis contribution to node, and I think that contribution merits a more nuanced response from me than a Twitter one-liner.

First, because it is worth saying, there is no argument that Ben is a very smart guy, has made a significant contribution to node and libuv, and has been tremendously generous with his time and talent. I do not believe the node community is “better off without him”. I hope he comes back.

To me, this is the core of the issue: Ben has an established history of dickishness. This attitude has been tolerated by the node community longer than anyone else’s inappropriate behavior because of Ben’s clear talent and contribution. But this is never sustainable and at some point, one more slip is enough to cause an uproar, and this is what happened here.

If the response from individuals and companies feel exaggerated and over the top, it is because for many insiders, this is not a single incident but the last straw. Whether that is fair or not is a matter of opinion.

I witnessed this behavior in a response to a node issue a member of my team opened a few months ago. I sent a private letter to Ben’s company explaining why I felt it was inappropriate and offensive. The response I received suggested that this was simply a result of Ben’s work load and his need to sort through many issues quickly. I was unsatisfied and expressed that. Shortly after, Ben corrected his behavior on that particular issue and provided thoughtful and patient feedback.

There wasn’t an apology or an acknowledgement of wrongdoing, and that stuck with me. Ignoring all the ‘gendered pronoun’ debate, what is really at the core of this incident is lack of empathy. It’s failing to say a simple ‘sorry’. It might sound trivial or petty but the incident a few months ago left enough bad taste in my mouth not to want to engage Ben further. I’ve actively directed my inquiries to other members of the node core team.

Ben is by no means unique in his attitude. I am sure half the people I interacted with when I was working on that “awful 2.0 security protocol” feel the same way about me. But when I offend people unintentionally, I immediately apologize publicly and privately, and when I choose not to, it is done with the clear understanding of the repercussions. When I quit that working group, the negative reaction I received was very much earned by my actions.

Every community has to decide what is acceptable behavior within its boundaries and especially what it allows its leaders to do. Whether it is an open source project or the workplace, there is always a balance between someone’s attitude and contribution. One often does counter-balance the other, but only to a point.

My behavior within the node community is in sharp contrast to that of my behavior in other communities. It’s not because I’ve changed, matured, or evolved. It is simply because it is the only acceptable behavior within the node community. Context matters.

Ben had multiple opportunities to back out of the corner he put himself in – and he still does. It really doesn’t take much. At least not in word count. People are just looking for some empathy, for acknowledgement that their feelings were hurt, and that the offender understands and regrets their actions, especially now that they know how offensive it was to people.

I hope Ben comes back from his break and continues to contribute. And when he does, it will be our turn to show empathy and move on.

Let’s Talk About Food

My life is split between two seemingly conflicting themes: software and food. I spend a great deal of time sitting in front of a screen moving my fingers. I also spend a great deal of time shoveling shit. Literally. I don’t like the “day job” and “personal life” dichotomy because it is just false. I love writing software. I love farm life. I work from home. Everything I do is out of passion. And as my passion grew deeper for both over the last 10 years, I started to realize the similarities, the shared values, and the harmony they create together.

After my speaking experience at Realtime Conf 2012, I knew this would be the right be venue to try and bring my worlds together on stage. My first pitch to Adam Brault back in May was centered around the idea of getting people’s hands dirty. With actual dirt. I wanted to get that simple universal experience (at least prior to the 20th century) of working with dirt back into our culture. I let the idea simmer in my head for a bit.

Adam and I talked about it some more at NodeConf in July and on the drive home, everything came together in my head. I realized that dirt is just one detail and that food is the creative force I am looking to share. When I got home I sat down and wrote my talk proposal. It was a little bit insane. Some of the ideas in there would have required the conference to increase their insurance policy. But the original pitch largely survived.

Then the insanity kicked in full force.

I am going to talk about food. The food, of course, being a metaphor for breaking through the mundane and seeing things with fresh eyes – rethinking of what it is like being an artist in a very mechanical and scientific craft. I would like to share some of my culinary experiences and studies from the world’s most innovative chefs to show how software engineers must deconstruct, simplify, reduce, and reconstruct our craft in new and creative ways.

I am not going to give away much else other than share some of the insanity with you:

This is by far the most ambitious talk I have ever attempted and probably one of my most ambitious undertakings. Whether a spectacular success or spectacular failure, it is going to be fun.

A few tickets are still available. Come and share my world.

 

Diversity

The biggest misconception about affirmative action is that it puts less qualified individuals ahead because of their gender or the color of their skin. If an affirmative action program results in lesser individuals getting ahead, it is poorly designed. This misconception is based on the misguided notion that we can score every person on a linear scale and simply pick off the top of the list. Human beings just don’t work that way.

In a rich, multidimensional reality, we must consider not only the attributes of the individuals, but also the makeup of the community we are trying to build. Setting a goal of more women, blacks, gays, etc. is pointless. That’s a stupid goal. Setting quotas is mechanical and more likely alienate others instead of bringing them in.

The point is to take a look at your community and ask yourself what would make it more open and accepting? Who are the people at the margin trying to join? Why don’t they feel comfortable and welcomed? This is not an academic, theoretical exercise. You actually have to ask and listen.

In geek culture at present time, that’s often women. When men hang out together, especially at a conference where alcohol is served, they create (without intention or malice) an environment that can be unwelcoming to women. This is something we’ve been hearing from many people trying to be part of our community.

Affirmative action is not about getting less qualified women to speak at a conference at the expense of more qualified men. That would be wrong and unsustainable. It is about finding the best female talent and showcasing it so that other women feel motivated and welcomed. So that everyone will benefit from a diverse range of opinions. When hiring a new engineer or curating a conference, the goal is to enrich the team or experience, not just to add a few skill sets.

I resent members of an outsider group (be it women, blacks, gays, etc.) use their own personal success story as a way of dismissing the real adversity others in their group still face. The fact that I have been very fortunate in my life as a gay man to never experience intolerance aimed at me does not, even for a second, diminish the real and painful challenges facing many gay men today. Drawing a conclusion that just because I found a welcoming home within my community means that it is no longer an issue for others is egotistical and hurtful. I wouldn’t even assume that the geek subculture I belong to is completely beyond bias, given that I don’t know more than a handful of other openly gay men within that subculture.

If you have been successful, you have a responsibility to help those who are still looking from the outside in. If you are a woman or a minority, just showing up can accomplish plenty. If you are gay, vegan, Mormon, etc., talk about it so that others will know and appreciate the unique perspective you bring in from that experience. You don’t need to perform an interpretive dance on stage or put it on a t-shirt. Just mention it in conversation, on Twitter, or in a blog post. Letting others know that they are not alone is an immensely powerful gesture.

The measurement of diversity isn’t in numbers. It is in the perception of those trying to join as to how welcoming a community is.

Realtime Conference, the Imagination Platform

Last year, if you recall, I was a bit upset about some specification I participated in… I wrote a blog post, followed by another post, then went silent. I felt very strongly that everything I had to say was right there in the posts and that an ongoing online feud will only weaken the points I was trying to make. For a couple of months I received weekly requests to come speak at conferences about it. These were all security, platform, or API conferences where this topic would be a perfect match. I turned them all down.

What bothered me was the feeling that if I were to do a talk about it, it has to be to a completely different audience. I would have to break out of the echo chamber and turn a very technical and procedural set of arguments into something more culturally and emotionally meaningful. And it must be funny, which none of the people my posts were aimed at found amusing.

So when the invitation from the Realtime Conference team showed up in my inbox, my first reaction was to turn it down like all the others. But then when I read it, something clicked. For the first time, I wasn’t invited to explain why the protocol sucked. I was asked if I was interested in “sharing some of what [I] feel are [my] ‘lessons learned’ from that experience”. Here was an invitation to engage in a meaningful, emotional exercise that wasn’t trying to recreate my posts. It was about moving on. I immediately replied “sure!”. Continue reading