Social Enterprises and the Single-Responsibility Principle

I recently had the privilege of being a judge for Cruz Cares, which describes itself as “a pitch contest for social change.” Four non-profits and two for-profit companies competed. Each entrant had an idea about how to make the world a better place. The judges were instructed to rate each pitch on the basis of its potential social impact, financial viability, and the likelihood that the project could be successfully implemented.

The winner was unanimously agreed by the five judges to be Rising International, a non-profit that is fighting female poverty by organizing an analog to Tupperware Parties. Instead of selling plasticware, Rising International’s parties feature goods made by women in Afghanistan and other poor countries, and are sold by women in the United States who are themselves in difficult circumstances. Both sets of women make money, and the women in the United States develop skills and connections that help them transition to more traditional employment. It’s a very clever idea, has already attracted over 19,000 foreign artisans, and seems to have the potential to scale.

The second- and third-place companies were also non-profits, despite the fact that both for-profit companies are competently managed, have reasonable business plans, and are led by people with the sincere desire to do good. The experience reinforced one of my long-held beliefs: the only goal of a for-profit company should be to make as much money as possible.

Continue reading

Thinking Like an Engineer Considered Harmful

Disc Gun

Recently, a family friend gave my two children disc guns.  The boys were thrilled; what could be possibly more fun than shooting your sibling? Our friend handed one gun to Blaine and one to Larrabee. Both found the on switch, pointed their guns at one another, and pulled their respective triggers. The guns made satisfying electronic beeping noises. The children felt the vibration of small electric motors. And, almost immediately, the guns sent foam discs flying at surprisingly high speed from their muzzles.

At least, that’s what Blaine’s gun did. Larrabee’s gun made the beeping noise. Larrabee could feel the motor whirring. But, to his great disappointment, no disc emerged from the gun. So, while Blaine could fire a steady stream of discs at his younger brother, Larrabee was completely unable to return fire. While I would have been unafraid to face a steady simultaneous barrage from both disc guns, I was now petrified; two brothers with only one disc gun between them seemed unlikely to lead to a happy, relaxing afternoon.

Fortunately, I am an engineer. True, as a computer scientist, I dealt mostly with abstractions (zeros, ones, algorithmic complexity, category theory, etc.), but as a software developer I dealt with slightly less abstract abstractions. After all, I have crafted real actual software used by real actual people. Software may be intangible, but, still, we call it software engineering, don’t we? The mere fact that the system in question was physical, rather than logical, did not dissuade me from debugging it.

By which, of course, I mean “taking it apart.”

Continue reading

My Undoing as an Advisor

Undo Software

During my time at Mentor Graphics, I was always looking for technologies and technology companies that could be integrated into the product lines for which I was responsible. In a start-up, one generally looks to build new things; in an established company, it’s often possible to create value by combining multiple things into a more comprehensive solution. Since I was managing C and C++ software development tools for embedded developers, I was interested in anything that could make those tools better.

Debugging software programs (i.e., fixing them when they’re broken, which is almost always) is hard. In fact, some engineers say that debugging drives them crazy, which is sometimes literally true. Engineers tend to have conversations with their debuggers that go like this:

ENGINEER: What is the value of x?

DEBUGGER: The value of x is 3.

ENGINEER: That can’t be! The set_x function makes sure that x is always even!

The engineer is now denying reality, a classic sign of insanity.

And, so, I became interested in Undo Software.

Continue reading