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.

The Progressive (Profitable) Web

April 2, 2013 | 2 comments

Ryan Holiday laments the loss of Google Reader and RSS in general in Our Regressive Web, arguing that if someone came up with them today, we’d think they were brilliant ideas:

Nothing better has risen up to replace them. The underlying needs of a fairly large user base (that these services meet) still exist.

We’re just regressing.

[...] RSS is impervious to blogging’s worst, but most profitable traits. [...] No wonder nobody ever pushed for widespread adoption. Of course it died a slow death—along with Google Alerts and Delicious. Their mission is antithetical to the ethos of our new media age. Where noise, chatter and pushing—not pulling—rule the day.

Our Regressive Web by Ryan Holiday, on Medium

He’s right. Aggregated content – content on the reader’s terms – has a huge potential userbase, but it wasn’t profitable for either the bloggers or the aggregators, so it languished. Sure, you could tack some Google Ads onto the end of each post in a feed, but control over the form that the content is presented in is granted fully to the user. Where’s the opportunity to upsell? Where are the branding opportunities or the baked-in communities, carefully designed to maximize ongoing engagement?

The irony is that blogs have actually downgraded their on-page advertising over time. If you visit TechCrunch today, you’ll only see two ads above the fold. Check out io9, and you’ll see none at all. The redesigned ReadWrite has a few more: a giant banner above the fold, and then four small squares with another ad in the stream of content itself.

Wouldn’t it be nice if you could have your cake and eat it, too? Allow the user to consume content on his or her terms, while also allowing the content producer to make money?

Here’s an idea I’ve been working on in my own time. It’s a little technical, but bear with me:

  1. Add a simple social layer to the web. I still like the idea of the HTTP header I described in httpID. Your site may connect to my site with a mechanism like OpenID Connect and get an authentication token automatically. Think of it like a one-way friend request. Of course, I can then reciprocate by connecting to your site to create a two-way relationship.
  2. Add authentication to feeds. Each feed has just one URL. An aggregator may sign the request for a feed with an OAuth-like signature. (We’re sidestepping HTTP digest auth for obvious reasons.) The software producing the feed may choose to acknowledge the signature, or not; by default, you get all the public posts you’d normally get when accessing a feed.
  3. Manage connections and restrict access to content. I see everyone who’s connected to me from a control panel, and can reciprocate from there. More importantly, I can add any of my connections to access groups. So if I add you to a group and publish a piece of content so that it is only accessible by that group, when your site requests my feed using a signed request, you’ll see that content.
  4. Optionally: sell access to premium content. Once you can selectively broadcast content to a finite group of people, you can sell access to that group. (And of course, you can have more than one paid-access group.) For example, I’m a subscriber to NSFW, a paid publication with an online presence. They could push all their articles to me as a subscriber, while making a handful of taster articles available to everyone. You could even include a pointer to a subscription URL within that social handshake from part 1. If you decentralize the financial transactions (and why not?), you could even give a small cut to the platform owner.

All of the above is complementary to feed standards like RSS and Activity Streams, as well as to federated social web protocols and methodologies like OStatus. It’s super simple to both use and implement – but could add a layer of commerce to the content web, while also decreasing our dependence on large content silos whose interests are not in line with their customers.

Why 2012 was the best year ever – and how 2013 can be even better

December 26, 2012 | Leave a comment

Sunset silhouetteThe Spectator explains why 2012 was the best year in the history of the world:

It may not feel like it, but 2012 has been the greatest year in the history of the world. That sounds like an extravagant claim, but it is borne out by evidence. Never has there been less hunger, less disease or more prosperity. The West remains in the economic doldrums, but most developing countries are charging ahead, and people are being lifted out of poverty at the fastest rate ever recorded. The death toll inflicted by war and natural disasters is also mercifully low. We are living in a golden age.

This is a lovely piece of news to be greeted with at the end of the year. I disagree with the article in some ways – for example, it lauds fracking as delivering an era of energy abundance – but the message is one that’s easy to get behind. Our modern age is bringing about unprecedented human prosperity through connectedness and technology. One of the hallmarks of the Internet age is that national identity is being slowly replaced by an international identity – more and more, individuals are forming strong bonds with people in other nations, who they may never meet in person. It’s got a long way to go, but nationalism is slowly becoming extinct.

Wonderful! So, isn’t it time we dealt with the elephant in the room?

The level of carbon dioxide in the atmosphere is 54% higher than the 1990 baseline. That means it’s going to be almost impossible to limit global warming to the 2°C limit that was set just three years ago – which in itself wasn’t enough to prevent environmental disaster. That disaster isn’t abstract, and should worry you even if you don’t care about the environment itself: it translates directly to the death of at least 100 million people and severe economic troubles by 2030. Climate change touches everything, and again, even if you’re a money-orientated Randian who couldn’t give a jot about the rest of us, it will make you poorer. That should be enough to make even the staunchest conservatives sit up and take notice.

Of course, there are people who don’t believe in climate change at all, but the arguments against don’t hold water scientifically. (That last linked page is so good, so full of fact-filled resources, that I’ll link to it again. Go take a look.) There are fatuous religious arguments from the Christian right, which I’m not sure even adhere to their own internal logic. In general, the arguments against rip climate change into the realm of politics, when it stands pretty firmly in the realm of scientific fact.

So what can we do about it? Here, then, is how technologists like us can make 2013 even better than the year gone by, both for our own individual prosperity and for everyone’s. We can continue to make the world a more peaceful and prosperous place in the short term by doing all the things we already do – and additionally work towards making it a sustainable peace and prosperity, in all senses of that word. We should all be striving to minimize resource conflicts, and to make all of our communities sustainable in their own right without polluting anyone else’s – while ensuring that we don’t lose any of the wonderful things the last hundred years has brought human society. Global travel, the Internet, widely-accessible personal computing, medical advances – all of these things need to be here to stay (and should have the freedom to evolve and progress).

I strongly believe that while neither technology nor individual action can bring about this change by themselves, together they have a chance. I’m not alone: Google, for example, has invested nearly a billion dollars in clean energy, and green investors (when they have domain expertise) are thriving. VCs are warming up to energy efficiency platforms, and of course, Tesla Motors became cashflow positive this year, raising further interest in the space.

Customer interest in green technology is already increasing, due to high fuel prices and better general awareness. I think 2013 could be the year that investor interest in green technology takes off, and correspondingly, I think we’ll see a slew of new companies whose interests are aligned with their customers’, not just in the short term, but with a very long term view as well. That’s a great thing for the startup ecosystem, it’s a great thing for web customers, and it’s a great thing for every single person on the planet.

Recipes for startup failure

November 20, 2012 | 4 comments

Technical co-founderPaul Graham’s essay, How to Get Startup Ideas, is long but very much worth reading. Normally I’d pull a quote, but it’s a valuable piece from start to finish, and it’s hard to know what to choose. Go read it, then come back.

He makes clear that, more than anything else, if you want to be a tech entrepreneur you need to live in the future and build what’s missing. That’s an important idea, which we can break into parts:

  • Have a great idea
  • Build it.

Sounds simple, right? But that second bullet is the hard bit. It’s not anywhere near enough to come up with a great idea, although you can’t have a great startup without one. (Paul has some valuable thoughts on this, including turning off your “sexy” filter and allowing yourself to see problems whose solutions are going to be a pain in the ass for you, but valuable for your customers.) You also have to build it.

This is a complicated field, on which a lot has been written. But I think there are a couple of things that will never allow you to build a successful software-based startup.

If you’re not a geek, don’t outsource the product.

Forget what you may have heard about IT projects. Building a technology company isn’t as simple as coming up with the idea, sending a plan to an outsourcing company and then reselling the result. Not only will your technology be frozen in time, with the outsourcing company effectively holding all of your value (you’ll need to hire them again to make improvements, and it’s important to realize that software products are never actually done), and not only does it send a clear signal that you don’t really care about your product, but it’s also a certainty that no outsourcing company cares as much about your startup as you do. An outsourced software product will always be inferior to one produced in-house by a dedicated team.

There are no shortcuts. Your startup must know how to code. And you, as a startup founder, must learn enough about the technology to be able to make informed decisions. Don’t hand it off – and if you possibly can, learn to code yourself. It’ll be worth it, and as long as you can think logically, it isn’t as hard as you think.

(One quick special note: if you instinctively recoil from the idea of learning how code works, or DNS, or servers, or any of the fundamentals to running a technology company, don’t get involved in tech startups. Those things are the building blocks of your product.)

If you are a geek, don’t make the mistake of thinking it’s all about the code.

This is the mirror image of the above mistake. Building the product is important, as I’ve just laid out. But a startup isn’t a webpage, a service or an app: it’s a company. The temptation, particularly as a single founder or a small team of developers, is to spend all your time working on awesome code that works well. But, equally importantly, you need to nail down the fundamental framework of the business you’re creating.

How do you work? How is your company incorporated? How will you sell your product and market yourself to your potential customers? How will you find those customers? How can you grow? You can’t code the answers to these questions, and if you’ve never started a company before, you’ll find that they’re far harder than building software (because these are new challenges). You’ll need to be empathic, unless you’re building software for a million people who are just like you. (Hint: there aren’t a million people who are just like you.)

As far as the product goes: get something working, fast, and then iterate on it, while you work on the tough stuff. You’re a coder, so you probably don’t read manuals, but get used to not knowing stuff and having to test it in the real world. That’s how companies work. There’s no such thing as sitting in a dark room and – ta da! – coming up with a world-beating company that’ll make you millions. Any story that says otherwise is a lie (because the company in question will have worked out that it’s a great way to sell people their product).

(The geeks get a special note, too: design is marketing. It’s how people perceive your product. If you’re a back-end coder, not only will you need to learn the spreadsheet side of your startup, but you’ll need to learn how to make a clean design, too. You can’t outsource this, but luckily, projects like Bootstrap and Glyphicons help. Get a real in-house designer as soon as you can.)

Your business is the product, and your product is the business.

You can’t do just one. Starting a technology company is an amazing experience – but if you’re a spreadsheet person, you’re going to have to get used to looking at the technicals. And if you’re a technical person, you’re going to have to get used to looking at the spreadsheets. That’s just how it works.

Next Page »