Negotiating Your Startup Job Offer

| Comments

Over the last three years I’ve been on both ends of job offers at startups. One thing that’s struck me is how little most applicants know about what to expect in a job offer, and in many cases, what the written offer they’ve received actually means. I was extremely fortunate that the first startup job offer I received was written by a pair of founders who had the utmost integrity and explained things very clearly. Since then I’ve learned that not every employee is so lucky.

This post doesn’t aim to teach you negotiation itself, but rather to acclimate you to the standards and vernacular of startup negotiations. It assumes you’re a startup newcomer.

Remove Merged Branches From Git

| Comments

I wrote a bash function that prunes a git repository’s ancestral branches, helping you keep your local and remote repos tidy.

This function removes all branches, local and remote, that have been merged into your current branch. Simply run “rmb” from the command line. Don’t worry - prompt safeguards are in place to show you what you’ll be removing before it deletes anything. And it won’t let you delete “master.”

Add this to your ~/.profile, run “source ~/.profile” and you’re good to go.

rmb.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function rmb {
  current_branch=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
  if [ "$current_branch" != "master" ]; then
    echo "WARNING: You are on branch $current_branch, NOT master."
  fi
    echo "Fetching merged branches..."
  git remote prune origin
  remote_branches=$(git branch -r --merged | grep -v '/master$' | grep -v "/$current_branch$")
  local_branches=$(git branch --merged | grep -v 'master$' | grep -v "$current_branch$")
  if [ -z "$remote_branches" ] && [ -z "$local_branches" ]; then
    echo "No existing branches have been merged into $current_branch."
  else
    echo "This will remove the following branches:"
    if [ -n "$remote_branches" ]; then
      echo "$remote_branches"
    fi
    if [ -n "$local_branches" ]; then
      echo "$local_branches"
    fi
    read -p "Continue? (y/n): " -n 1 choice
    echo
    if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
      # Remove remote branches
      git push origin `git branch -r --merged | grep -v '/master$' | grep -v "/$current_branch$" | sed 's/origin\//:/g' | tr -d '\n'`
      # Remove local branches
      git branch -d `git branch --merged | grep -v 'master$' | grep -v "$current_branch$" | sed 's/origin\///g' | tr -d '\n'`
    else
      echo "No branches removed."
    fi
  fi
}

Migrating to Riak at Shareaholic

| Comments

Last night I presented “Migrating to Riak @Shareaholic” at the first Boston Riak meetup

Below are my slides from the talk.

One correction that I’ve updated in the slides: I mistakenly referenced Shareaholic using Hadoop MapReduce. Shareaholic uses Amazon’s Elastic MapReduce, which works similarly to Hadoop but is a separate implementation. My reference is intended only to distinguish it from Riak’s MapReduce implementation, which is substantially different.

Responding to Criticism

| Comments

In 2006 I participated in NOLS’ Summer Semester in Alaska, a 75-day kayaking, backpacking and mountaineering course, which helps students gain wilderness and leadership skills.

A few days in I got my first review. I was a wreck. I packed my backpack as if I were paying homage to the Leaning Tower of Pisa. The most palatable meals I cooked were the ones that were burned beyond recognition. I might have been able to properly affix a rainfly to a tent, but I’ll never know because nobody trusted me to keep their tent dry. You know that guy who played on your middle school basketball team who had great hustle and personality but couldn’t make a layup? The guy the coach wanted to do well, but would never take chances with in the 4th quarter? That was me at the start of my first NOLS course.

Writing for People, Part 2

| Comments

Last year I wrote about the importance of writing for people rather than search engines, two target audiences that often compete with each other on the web.

A similar problem occurs when authors write for companies instead of people. I see this most at business-to-business companies, where the customer is another company rather than a human. It’s important to remember that it’s always a human who will be reading your copy.

Leadership

| Comments

Leaders show themselves in various forms. There are rhetorical magicians (Barack Obama) and iconic revolutionaries (Steve Jobs). There are also workplace leaders - the silver-tongued employee who can articulate issues several steps beyond what others are thinking, or the clever, diligent coworker whose performance alone encourages others.

Whatever the kind, leaders have three priceless skills: they’re doers, they persuade, and they inspire.

Helping Blogs Be Blogs

| Comments

As Wordpress has evolved from a writing platform into a full-blown CMS, theme developers have followed suit by using big header images, multi-level navigation and dozens of widgets that make sites look bigger they actually are and more complex than they need to be. It’s unclear to me how any of these things make blogs a better experience to read or authr. Do you click on tag clouds? Do you read embedded Twitter feeds? Do you browse old content by clicking on individual months listed under past years? For me, the answer to each of these questions is a resounding “no.” Blog design has become superfluous and distracting.

Wordpress and the GPL

| Comments

Yesterday, Wordpress founder Matt Mullenweg debated Thesis Wordpress Theme founder Chris Pearson over the ethics, legality and benefits of using the GPL license for the Thesis theme. Matt argued that by not using the GPL license, Thesis is disrespecting the Wordpress community, violating the Wordpress license agreement and hurting its own business. Chris contends that Matt has no right to tell him how to license something that Chris built himself, even though he built it on top of the Wordpress platform.

I’m not an attorney, but I am a human capable of reading and inferencing. The legal issues concerning the GPL seem pretty clear to me. There’s a reason why Dan Rivcher is cited by the Software Freedom Law Center’s compliance guide. There’s a reason why the SFLC sides with Wordpress. There’s a reason why lawyers at big companies tell their engineers not to use GPL open source projects. There’s a reason why the LGPL exists. There’s a reason why many communities, like the Ruby community, have moved to use the MIT license instead of the GPL. All of these reasons are the same: the GPL is a highly viral license that infects everything it touches. If your code uses GPL, your code needs to be GPL. I don’t know this because I’m a lawyer; I know it because every credible lawyer I talk to or read about or am influenced by reaches the same conclusion.

And I’m reminded of how well I know this, because I gave up healthy means of income in order to abide by it.

Writing for People

| Comments

Nearly all commercial web sites perform Search Engine Optimization (SEO), whereby they alter their site to be more Google-friendly, with the hope of receiving higher search rankings. Many of these changes are purely structural and invisible to users. For instance, using tags like <h1> or microformats like “hreview” can help Google make more sense of existing content without any changes being made to the text.

Mature, profitable sites often take SEO to the next level by altering their visible content as well. In effect, they write their copy for machines instead of for people. From a user experience perspective, it shows. There is often an inherent conflict between what is best for a user and what is best for Google.

Facebook, Google and the Value of Trust

| Comments

Facebook is in many ways the hedge to Google’s bet that social machines are oiled with the trust of their users. As competition between Facebook and Google becomes increasingly visible, so too will the issues of trust that separate them.

Chirp: Goals and Expectations

| Comments

The kerfuffle between Twitter and its third party developers has been discussed, analyzed and debated ad nauseum over the past week. But aside from jokes of awkwardness, there has been surprisingly little talk about what it means for Chirp. What do third party developers want from the conference in light of recent events? What’s a win for Twitter?

Twitter, Facebook and Viral Traffic

| Comments

On the evening of the House health care reform vote, I built didtheypasshealthcarereform.com, a single serve site, to report the status of the bill. Prior to the vote it read “no.” After the bill’s passage it read “yes!,” and celebrated the occasion with randomly-placed animated unicorns (courtesy of Cornify).

I posted links to the site on my Twitter and Facebook accounts. As soon as the bill passed, traffic skyrocketed. 48 hours later, the dust settled.