Archive by Author

Product “Can Has” Personality and Innovation

2 Oct

I came across a great post on Hacker News today by Jason Shen, How to Give Your Product Personality, a response to a great post on Fred Wilson’s blog Minimum Viable Personality. Shen’s post gives a lot of great specific examples of personality in product.

Fred Wilson’s post features Grimlock, a fictitious online character with caveman grammar, who influenced the title of this post. According to Grimlock, the main steps to establishing a personality, or “HOW NOT BE BORING”, are as follows:

1. HOW YOU CHANGE CUSTOMER’S LIFE?

The way I see it, there are two ways in which you can change a customer’s life:

  1. React to a customer’s needs to give them the best possible experience. This is competition, in the sense that you are competing with other companies who provide a similar product or service.
  2. Give a customer an entirely new experience that never existed before. This is innovation.

2. WHAT YOU STAND FOR?

The core of what you stand for are your values and Zappos Core Values provides a great example. If your company does not have values: create a spreadsheet, ask everyone to add what they think are company values to it and take a vote.

3. WHO OR WHAT YOU HATE?

If you are focusing on competition, it makes sense to identify an enemy. However, if you are focused on innovation there should be no competition, at least NOT YET, for the product or service that you are creating.

Grimlock does actually touch on innovation, whether he realizes it or not, when he writes:

NO BE CHICKEN

CHICKEN LIVE IN CAGE. NO CAN HAVE PERSONALITY INSIDE CAGE.

LAST STEP IS SMASH CAGE, LIGHT BARN ON FIRE.

DO THAT, YOU WIN.

If every other chicken is inside the cage and you focus on competing with other chickens, you may never break out of your cage. If you smash the cage and burn down the barn, you’ve changed the world of all the other chickens, you’ve innovated.

A git revert alternative

26 Aug

We use gitflow for our branching model. Yesterday we ran into an issue where a front-end redesign was finished, merged into develop and pushed to remote, prior to being approved. This would cause a problem if we wanted to create new releases from develop because they would include the front-end redesign that wasn’t ready just yet. The immediate reaction was to use git-revert to rollback each individual commit, but it seemed like a bit of a sloppy solution for 20 or so commits.

The solution we came up with was the following:

  1. branch from the commit prior to the first unwanted commit, we named it develop_new
  2. cherry pick any commits you do want from develop into develop_new
  3. rename develop to feature/redesign
  4. rename develop_new to develop
  5. update .git/config to ensure the renamed branches point to the correct remote references
  6. force push develop to remote
  7. push feature/redesign to remote
This is obviously only a good solution if you catch the problem in time and thus only require a few cherry picks.
A bit of Googling produced a similar alternative using git-rebasehttp://stackoverflow.com/questions/4434787/git-how-to-undo-a-merge