Extroverted Developer

A colleague of mine today sent me this link from Hackernews that explains options ownership. I think it's great! More people need to understand this stuff, and I'm very happy this is out there. It does remind me however of how complicated everything has gotten and that always makes me ask why?

My colleague had a great observation:

I used to grant people options and I thought I understood most of it, but it seems like in an effort to get billion dollar valuations later stage companies have added all sorts of complicated conditions

When I was younger (so much younger than today) - I used to think that complexity was a sign of how smart everyone was, and I had a bit of imposter syndrome thinking I was not smart enough to be in the real world because I didn't understand all of this stuff.

Now that I am older (perhaps wiser? tbd) I now am more confident in my intelligence and what I see instead is people hiding in complexity.. specifically in levels of abstraction. Dan Ariely did a test that I think is illustrative if not conclusive. He put 6 - $1 bills on a plate in a shared fridge in a college dorm. A week later he came back and they were all still there. He then put 6 cokes in the fridge and a few hours later they were all gone! No one would steal money (that would be wrong!), but move the level of abstraction up 1 level (a coke = $1), and people suddenly have fewer issues taking the cokes.

I see the same thing in finance. People trade all these derivatives, each one of which is another layer of abstraction away from money. Options are a layer of abstraction above shares (they abstract time), while shares are an abstraction over ownership, which is an abstraction over assets, which is an abstraction over money which is itself an abstraction. It's a long way between that awesome trade you made and the person paying real money for their mortgage whom you just screwed over. It enables them to do some shady things they would never do to a real person (they would never go into a real person's wallet and take their money physically).

I see the same with private companies and stock, stock options, etc. I think people just assume they are not smart enough to understand, they just hear stories that stock is what you want, that's how you get rich! But I agree with my colleague above, people are using levels of abstraction to confuse people so they can play games.

Once upon a time a stock would pay dividends because as a partial owner in a company you were entitled to a partial share of the profits. That dividend was that share of the profit! You could then turn around and use that dividend to buy more shares, and then the next time it was paid you'd get even more money! This is essentially the proof Benjamin Graham used to show that stocks would outstrip bonds back in The Intelligent Investor and kicked off the era of value investing where calculating the price a company should be trading at was based on the profitability of the company and the number of shares outstanding. Until the 1980s.. where you can blame Microsoft for coming up with the idea of "growth" companies that don't pay dividends but instead pay back their shareholders with the growth of the value of the share price. Where it's worth more because more people want it? <-- This is some people's definition of value, but I can't use that to make a prediction about what the share price should be and so to me this is useless

The following are a set of thoughts I've had watching a company grow from 60 people to 600 people - it's not a complete thesis, but I wanted to put it out there to start getting feedback from people.

Thoughts on Organizations

Processes are sets of rules in the same way that computer programs are just sets of rules. In the case of programs, it's the computer doing the work of executing the rules of the program and they have no choice but to take what you wrote literally. In the case of processes, it's people executing them. However, both have bugs - unexpected outcomes of the rules. With humans, you get some leeway because you can explain what you meant or you can say we're implementing the 'intent' rather than what's actually written but you will run into people who execute policies like they are computer programs and follow exactly what's written, as opposed to what is intended.

Making matters worse, policies often have very long feedback loops before the bugs are detected and can be addressed. As such I think we should try and avoid process until absolutely necessary. Too many people want to rush to create a process every time someone makes a mistake so that mistake can never happen again, without regard for the bugs that can be introduced as a result.

Trust, Talent and Communication vs Rules

Why create rules at all? I think this is the same as asking why society has laws and I think the reason is because you can't trust people to do the right thing. More specifically, there's a limit to the number of people whose reputation you can keep in your head at any one time. This limit is called the Dunbar number, named after the social scientist who studied why tribes separate into two tribes. He found that after about ~120 relationships, we can no longer keep track of who owes whom money, who is trust worthy, who likes to short change people, etc. Rules are an abstraction over behavior. If we all agree to follow the rules, we can use them as a short cut for knowing someone's reputation. The reason I can go to the store and buy a bacon, egg and cheese from a complete stranger is because I have trust in the rules for proper food storage and preparation.

I think that organizations that are growing don't need any policies until they reach this 120 size. After that we start seeing faces around the office that we don't recognize, and we hear about projects starting up being lead by people we have never heard of. People who's reputations we don't know/trust.

Minimum Viable Process

So what do we do? Policies (and laws) are really useful abstractions. They allow us to trust each other without actually knowing the individual's reputation the same way I trust the food cart guy is not going to poison me because of the FDA. However, policies like all rules - have bugs.

The #1 predictor of bugs in code is the number of lines of code. Each line is a little rule, and the more rules you have the more likely you are to introduce bugs. Since policies are rules that often contain more rules (the entire workflow is a set of rules to follow), the more policies you have (or the more complicated they are) the more likely they are to introduce bugs, and so the goal is to have the smallest set of effective policies possible.

How do you accomplish this?

Developers find bugs by compiling and executing their code, thus seeing that it does not do quite what they expected. It's a tight feedback loop that allows them to identify and resolve bugs quickly. What we need from policies is a similar feedback loop and the easiest way to do that is with this 1 weird trick.

Make people feel the consequences of their decisions.

That's it. Ok maybe the golden rule is nice too, do unto others as you would have them do to you is probably always a good rule.

What does this mean? It means one can never make a rule for someone else, that they themselves don't have to follow. The reason is so they can get immediate feedback on both the good and the bad of the rule and make adjustments accordingly. This is remarkably difficult in practice. People really really don't like feeling the pain of their decisions, and we set up all sorts of elaborate systems to protect ourselves from get that feedback. I don't think anyone making other people's lives hell on purpose, we do this almost subconsciously.

Paul Grahm has decided to take up the old torch of more H1B immigration because "there are not enough great programmers". In the second paragraph he says that people who disagree with him are "anti-immigration" people who don't understand the difference between good and great programmers.

I'm all for completely open immigration; let people who want to work do so wherever they'd like. However, I am tired of hearing this false rationale that "it's because there are not enough good programmers". All I'm asking is for people who make this argument, not to base it on provably false accusations/assumptions. Make an economic argument for completely open borders. Talk about lifting the employer restrictions for H1B... but when you do it the way Paul has done, it's completely transparent that what you want is NOT that.. what you want are cheaper programmers who can't leave your company when you abuse them, or find a higher paying job elsewhere. You want indentured servants, and it's unethical and gross to me.

Is it really too much to ask that people base their opinions on evidence (data rather than anecdote)? The problem is the evidence doesn't support the "not enough great programmers" claim:

But while we're talking about immigration, I've always wondered why it's so important that the developers be great? What about great business people? Where's the call for H1B CEOs? Why is the onus of failed startups that they couldn't get enough *great* developers, as opposed to the mediocre business idea that failed in the market?

Why do I never hear this argument for immigration? Why is it only STEM?

And why does this myth persist in the face of evidence?

Eric Sink is disturbed by the tone of people's reaction but I think it's perfectly reasonable for people to be upset when someone starts off accusing anyone who disagrees with him as being anti-immigration, or questioning their knowledge.

1. Make something of value2. Charge money for it3. Spend less than you make

I call it “business”. Thoughts?

— https://twitter.com/awilkinson/status/517393404888875008

I've been confused for a long time about why this isn't how modern startups are run. This is the exact model I had in my head in 2001 when I wanted to start my own business, and for every startup idea I've had. However, I've seen so many multi-billion dollar valuations of companies that essentially have no revenue that I'm starting to wonder...

Is this a class thing?

I've gotten to know a few rich people in NY, and I can tell you that none of them thinks this way. I can't tell if they're rich because they see the world differently from other people (I sure see the world differently than my parents and have a lot more money) or are these people crazy and excited about no revenue business models because they don't have to worry about making money?

It is difficult for me to maintain my view of the world (businesses should make money) with the data I'm getting about 0 revenue businesses being valued in the billions. I've heard it put this way: Having zero revenue is great because it allows you to sell the dream of, when we monazite, just imagine how much money we'll make. Where as having a single dollar of revenue changes the conversation to why do you only have $1? And then the dream is *poof* gone when it's confronted by actual data" (mostly I've heard this from Felix Salmon) This makes me think that it's about duping people and not about creating value at all. :-/

This winter in NYC was particularly long. I am SOOO happy that it's finally summer. But season of polar vortex after polar vortex combined to make me really quite depressed, and I started wondering... why are we here? Specifically I mean, why are we coding physically in NYC?

It's crazy expensive, the weather in the winter sucks, it can be crowded and smelly. Given that we can code from anyplace we'd like that has power and internet access I understand a bit why silicon valley happened in California. Who wouldn't choose nice weather?

Well it seems like a few others in the NY community have had the same exact though (even the same exact location I was contemplating) :

Sounds like a blast, but even though I'm a freelancer I am at the whim of my current largest client who wants me to basically be a full time employee, on location and all. The reality is that even though we technically can work remotely, there's plusses and minuses to all of it and the powers that be have decided that it's in the best interest of any particular company to make sure everyone is in the same place at approximately the same time.

I've never worked for a company that let you work remotely the majority of the time, but it would sure be nice to be able to set my own schedule and location... at least for a few months... in beautiful Costa Rica!

The most recent trend in interviewing developer candidates is the normal phone screen, but with a live window in which you can type and the interviewer can see what you've typed. Something as simple as Skype with a chat window open, or a more complex website like collabedit which gives nice syntax highlighting and auto-indentation, etc. (but not VIM key bindings, grr). I've noticed with this new method the questions are more difficult, closer to standard whiteboard questions than standard phone screen questions where you do not share a code editor. I've also noticed with this new method that I'm suddenly doing much worse on interviews than when they were phone only and/or in person on a whiteboard but I think I've finally figured out why.

Human behavior is complex and determined by lots of factors. All kinds of things can bias your decision making and your performance on tasks like this. I think the specific bug that's being triggered is something called priming.

Priming is when something (usually unnoticed) in your environment changes your perception and thus your behavior. When psychologists were testing to see if irrelevant details affected our behavior, it turned out they do. The most famous example is that people who are holding hot cups (coffee) have a more favorable opinion of an interview candidate (hey, maybe should ask my phone screeners to grab a cup of coffee before we begin ;)) as compared to those who had no beverage. The exact opposite happens when people are holding cold beverages, they have a more negative view of a candidate.

I think the fact that I'm sitting in front of a computer with a text editor open is affecting the way I think about problems. I type very quickly, and normally when I have my editor up I already know how to solve the problem I'm attempting to solve because I've already white boarded it with a colleague. Basically my instinct in this environment is to code, not think (if that makes sense), and this is hurting me. When I'm at a whiteboard, I know that hand writing out the code is going to be slow and so I want to make sure that what I'm going to be writing out is already the near optimal solution before I start writing. This isn't the case with the text editor open, my unconscious instinct is to start coding something that works quickly, and optimize later.

Hopefully now that I recognize what's happening, I'll be able to override my unconscious instincts and behave more like I'm in front of a white board, because I don't think my request to not code live will go over so well ;)

Every now and then I receive emails from various recruiters trying to find technology people for their company. I was surprised when I came to New York that there were head hunters, and that they were looking for tech people. I had heard of executive head hunters, but as far as I can tell there's not really a head hunting/recruiting market on the west coast. But the second I started working in NYC, the calls from LinkedIn started pouring in.

Most of these recruiters are terrible, and know nothing about the technology they're for which they're recruiting. In general, anecdotally I've seen that most founders of startups in NYC are not technical but rather sales/marketing people in Publishing, Marketing, or Fashion.

Anyway, I'm at the point in my career where I'm interviewing companies just as much as they're interviewing me so I like to send back to these blanket emails some questions of my own.

Here's the most recent letter I received from Perka

Hi Jim,

I am reaching out because our engineering team is very interested in your engineering background. We are currently looking for Sr. Java Engineers to work with our Sr. team in building new frameworks, improving our architecture with sophistication and advancement and mentoring our engineers with projects. I would like to know if you would be open to a chat about Perka - I’ve included some info below. We are also looking for mid-level Java, Android, Software Developer in Test and JavaScript Engineers.

Perka is on it’s way to conquering one of those categories yet to be conquered - Loyalty.Here is some info about us to give you an idea of where we are headed and why…

Our current Engineering team scaled from 5 at acquisition to currently 13 and we will be adding 10 Engineers to support our Platform/Architecture, build new frameworks and tools, Mobile Products and Merchant web products. We are a relatively flat organization and this position reports directly into our CTO/Co-founder as well as work along side him and our other Sr. Engineers all like yourself with impressive backgrounds. This is a very smart team and we need to add to our talent in helping us deliver the world’s mobile loyalty brand and keeping up with the brand and trust as we grow.

About Us

Perka is a customer loyalty platform started in 2011. Our mobile and web apps have made millions of days a little brighter in free coffees, yoga classes, ice cream cones, and thousands of other ways of saying thanks.

In October 2013, we were acquired by First Data — one of the world’s largest payment processors — as an independent subsidiary. That gives us access to enormous resources and infrastructure, while retaining our startup culture and values.

Now we’re deploying our product at a scale that we could previously have only dreamt of. We’re building a team of inspired problem-solvers who want to help us reimagine the way that people all over the world interact with their favorite shops and restaurants. Join us.

What we offerA clear product direction with a solid growth plan and balance and the extraordinary opportunity to work under the direction of very successful co-foundersReally really really good company culture-you’ll be saying it’s your favorite place to work too!We open source and big fans of community development and events.Competitive salary according to market and experienceUnique annual cash bonus programFull benefits (health, dental and vision)Life insurance coverageFlexible spending account optionsGenerous PTO and paid holidaysSuper duper MacBook Pros and 27” thunderboltsPlenty of snacks for you and your super smart teammates along with super fun tees and great swag!In August 2014, we are expecting our swanky new loft build out in SoHo to be complete with yes a ping pong table!

— Email from recruiter

And here was my response questions

Hello,

Thanks for getting in touch. A few questions:

You say your engineers have impressive backgrounds, but you don’t mention what they are. Can you elaborate?How big is the loyalty program market place and what percentage does your company have?What is the most pressing technological challenge your company currently faces?What is the most pressing business challenge that’s preventing you from having explosive growth?Would you describe your company as primarily technology driven (ideas for new products and services come from the engineering team who also implements them once vetted for soundness by the business) or sales and marketing driven (engineers are told what to do by the business)?When you have an idea for a new product or service, how do you test the idea in the marketplace?What does your technology stack look like today? What does it look like 5 years from now?

Thanks,Jim

It's been a couple days and I haven't heard anything, which makes me think they have little interest in an engineer who cares about the business and how it's run but are rather just looking for someone who will do what they're told. After all they're the geniuses with all the brilliant ideas, and you're just some code monkey who should be GRATEFUL for the OPPORTUNITY to be paid in fake money (shares/options) for working on such a great idea! Know your place engineers, you're the blue collar workers of the information economy and they're the smart management.

I'm being a bit hyperbolic here, but I don't think I'm too far off the mark based on conversations and general discourse with 'idea guys' in NYC. I can't help but feel that computer programming is definitely seen as a second class citizen (if only subconsciously).

One of the most surprising things to me when moving to NYC was how often I would NEED CASH. It seems, anecdotally, that most restaurants and bars in the village are CASH ONLY (also most cabs prefer you pay in cash, and can be real dicks if you try to pay with a card even though legally required to accept them)

Personally I would rather not carry cash for security reasons, as well as convenience reasons and it seems like the rest of the world is headed in that direction (I remember when it was a big deal that McDonald's started accepting credit cards).

The other day I heard a story on Marketplace about how no one in Africa uses cash anymore, instead they all do mobile to mobile payments.

NYC has always seemed a little techno-phobic to me (also obsessed with OLD things: antiques, old apartments, etc.) and I think this explains why many businesses here don't accept mobile (or even credit card) payments just as much as the additional overhead cost (not to mention that you can better hide cash transactions from the tax man)

But now I'm just embarrassed that Africa seems to have better payment and p2p transfer technology than NYC in the country that invented the mobile phone.

MOCKINGJAY

A crazy simple python web server and javascript chat client that enables group chat over the LAN via a browser. Intended for use when security policies or politics or whatever get in the way of using IRC or Hipchat and such. Also intended to only be used on a Local Area Network (LAN) due to the lack of security features.

Basically I want to use Hipchat at work, but due to information security policies we can't use external services. Sad panda. So I wrote this.. extremely easy to install, no database required No Redis install (looking at you Hubot). But with great features for programmers: