Software factories vs software universities

April 29, 2013 | Leave a comment

I’ve worked in startups for almost my entire career – sometimes my own, sometimes companies started by other people. I’m good at what I do, and I love it: I get to create tools that empower people to do things they previously couldn’t, or that were substantial obstacles. Usually that involves some kind of democratization; a righting of an inequality of access. I love creating these platforms, I love watching people use them, and I love evolving them in partnership with the people who use them.

I’ve become more aware that some of my friends in technology startups aren’t having the same experience. We all love technology, but while I find working on it liberating, they find it soul-destroying. They complain about disconnects with management, and that their opinions aren’t listened to. (It makes me feel lucky to work in the environment I do.)

I’m contacted by a lot of recruiters and IT consultants (spoiler: I don’t think I’ve ever used any of them), and over time I’ve become aware that the way in which they talk about technologists is another side of the same coin. They complain about – or often solutions that address – the same disconnects, but from a management perspective.

It’s a mistake to create a them-and-us divide, and it’s impossible to say “this is what developers need; this is what management needs”. Nonetheless, a little empathy goes a long way, and with very little thought about the requirements of the different positions, it’s easy to see why these disconnects occur, and mitigate them.

Great developers are experts in discrete logic. They sit and write logical expressions that represent a desired experience, and don’t just have to think about how that logic resolves, but also about every single thing that could possibly go wrong. It’s not a million miles away from being a lawyer, and computer programs aren’t a million miles away from contracts. Both need to be logically watertight even given contextual circumstances that the author hasn’t thought of; both need to be usable; making a complicated program/contract simple to understand and use is not a simple challenge. Both professions have a reputation for being difficult to get along with.

Finally and most importantly, writing both software and contracts is a creative act. If you want a high quality product, you don’t just do it by numbers. Great developers and great lawyers are artists who are constantly learning and building on their skills. (The distinction blurs even further with user experience developers, whose job is, in part, to translate discrete logic into an emotional response.) They are not simply back-room technicians, and their ideal workplace is something akin to a well-paid university, where they can learn, create and innovate in a nurturing environment.

Startup founders and managers are, in my experience, significantly more financially motivated than developers. (You need to pay everyone competitively, but founders want to sell, whereas developers are often happy finding new, interesting ways to make something work.) This is important. While, depending on their background, they may not have the same grounding in logic as a developer, this isn’t to diminish them: they’ve probably got lots of other skills that the developer might not have, not least an ability to market and sell, and hopefully, a strong sense of vision. (Indeed, if your founders don’t possess these properties, you’re probably in trouble.) Nonetheless, often their ideal workplace is more like a factory, where a decision is made and everybody falls in line.

It’s silly, in a way, because everyone should be – and should feel like they are – all working on the products and services they’re trying to create together. The problems lie in how these two perspectives collide. Inexperienced managers, particularly in smaller startups, micromanage. They want to know every little thing, and want approval on every decision, which in turn means that developers will need to explain the logical underpinning behind their decisions. Worse, they may have to explain why a proposed solution won’t work. Unless these situations are handled delicately, the former has a high chance of making the developer feel undervalued, while the latter may make the manager feel like his or her authority is being undermined.

This is one of the reasons that so much startup literature focuses on hiring correctly. It’s not that some people are wrong and shouldn’t be hired; it’s that you, as a manager, need to feel like you trust them to make the right decision. A hands-off approach (combined with both clear communication and discussion about goals) for a creative, skilled knowledge worker will empower them to make stronger decisions, and make better software. Your main jobs as a manager are hiring correctly and maintaining infrastructure and an environment where your employees can be productive.

Meanwhile, on the other side of the spectrum, a professional developer needs to understand that everyone is a part of the business, and keeping the company afloat is something everyone needs to be concerned with. It’s important to bear those management motivations in mind – they have a fiscal responsibility to the company and its employees – and not think of business considerations as somebody else’s problem.

Given the right environment, that shouldn’t be a problem. If a developer feels like they are trusted to be creative, and to make the right decisions to create software of a very high standard; if their skills are a correct fit for the job that needs to be done; and the environment is such that they can ask questions and provide feedback without fear, and comfortably get work done; if you promote a culture of empathy and try to make sure everybody is valued; then you’re already a long way down the road of reducing that friction and making sure that people love to make great software with you.

It’s a tall order. But nobody said running a startup would be easy.

Living sustainably in a digital society: is it even possible?

August 23, 2012 | 2 comments

Desert tankI had an interesting conversation about sustainable lifestyles on Twitter this morning.

I believe that climate change is a major threat to our planet, and that we’re in danger of reaching a tipping point beyond which there is no return. More generally, because my personal mission statement is to have a positive impact on the world, I’m conscious that I don’t want to make an unsustainable amount of waste.

Which of course, I do. Although I try to be a good citizen – I consume locally-produced products, I take public transport rather than driving whenever possible – I’m aware of my relatively large carbon footprint. In particular, I fly a fair amount, often across large distances, I run computer servers, which by necessity are switched on all the time, and I buy electronics, which have an appalling environmental impact. (It’s sometimes easy to forget how much of an impact computing has, because it feels clean – the impacts are out of sight, out of mind. Truthiness in consumption.)

I travel less than I could, of course. A lot of my meetings happen over Google+ Hangouts or Skype, which let me see people without having to actually be in the same room with them. BART makes traveling across the bay to San Francisco simple and relatively clean (PDF link). But I do own a car, which I drive two or three times a week, and I will be flying both to XOXO in Portland, and to Austin, next month. It’s by far the cheapest way to get there.

And that’s the kicker. I could run the server that powers this website through a renewably-powered web host like AISO, for example, but I don’t. A dedicated server through a green host is simply much more expensive than through my existing host. Every financial transaction counts, particularly in the midst of a financial crisis, and I need to think about my costs.

Because flying is cheaper than taking the train – a ludicrous state of affairs – people will fly. It’s as simple as that. Making any other decision is solely the domain of people who don’t need to worry about money, and that’s not most of us. Anyone who’s run a startup knows that the bottom line is important. The key is making products and services available that don’t kill the earth, but are also economically competitive. They’ve got to be affordable. That’s the real-world requirement for most people.

A lot of our environmentally unsustainable practices are due to the economies of bulk production. My hope is that the web can help with this: because it’s now easier to connect ourselves together than ever before, and take payments through awesome services like Square, theoretically local producers can make themselves more available to local customers than ever before. There’s less of a need to ship many products – particularly food – from half a world away, or to make many things in very centralized ways. But the reality is also that, without a Stargate at our disposal, materials still need to be shipped. Everything isn’t available everywhere. That’s just how the world is. (I’m lucky that I live in California, which is a major food producer – there are a great deal more local resources than there were, for example, when I lived in Scotland.)

Technology can help in other ways. Meat is unsustainable. I’m not a vegetarian, but I’ve tried Beyond Meat, and I like it. I also like their mission, which is to create a product that is healthier and more environmentally sustainable than meat, but also cheaper. That’s smart, and is exactly the kind of pragmatic thinking that will change peoples’ lifestyles. I don’t think that people are going to be moving from chicken to reclaimed pea protein in droves, at least not immediately, but I respect that they’ve considered peoples’ real-life needs, and aren’t creating an elitist product. (And I do honestly think it’s pretty tasty.)

Ultimately, though, we’ve created a society based around production and consumption, and we’re all active participants. In fact, we love it – and that’s okay. What we can do, though, is understand that a more efficient infrastructure is also more sustainable – both economically and environmentally. Well-built public transport would lower our costs as business people, stimulate economic growth by encouraging trade, and would also lower our emissions. Better datacenters and less wasteful methods of production would reduce our costs, and also reduce the impact of the products and services we consume.

But it also requires longer-term thinking. Products that consume less electricity cost less in the long term, but might have a higher up-front price. We might pay a little more tax as a percentage to get a high-speed rail link up and running, but we will be repaid by the economic benefits. Modern distribution methods require money to install, but they eventually more than pay for themselves. We need a more efficient infrastructure to do business in the 21st century, and it just so happens that establishing that will be better for our planet – which in turn will result in fewer of the negative effects of climate change and resource depletion, and will also leave us correspondingly wealthier.

The politicians and businessmen who stand in the way of this are in it for the short-term, and are in it for themselves. It’s not just that they want to spend the money on infrastructure upgrades – they want to keep economic value locked up legacy gatekeeper structures, and prevent us from doing business on our terms. I’m not sure it’s possible to live sustainably in a digital society, but it can be, and it should be.

We’ve got to keep moving forward.