What’s really different about “Enterprise”

(I wrote this in 2011 as a draft and then forgot about it. It still reads OK, so here it is, basically unchanged, and without the extra sections I’d probably originally planned to add.)

Even though big web sites use lots of so-called “enterprise” technology, and big companies and government departments create browser-based applications, there’s still a huge chasm between web developers and enterprise developers.

We’ve been flooded with clichés and stereotypes about both sides — enterprise developers do everything the hard way, web developers don’t understand security and reliability, etc. — but it’s best not to take that too seriously. A lot of my consulting work and personal projects straddle the line between Enterprise and Web, so I’ve had a decade and a half to observe people and processes on both sides.

I’ll post more about this later, but here are two differences that strike me right away:

  1. Enterprise does a lot of integration
  2. Enterprise doesn’t have many rock stars

Enterprise does a lot of integration

Enterprise IT projects are always about integration. We’re not talking about fun integration with a REST API on the web, but nasty, ugly integration with legacy systems as old as your parents, using custom data formats and unpronounceable character encodings out of the Mad Men era, like EBCDIC (if you’re lucky).

In web dev, whether you’re using SQL or a noSQL approach, you almost certainly own and manage your application’s data (unless you’re building one of those doomed Twitter or Facebook mashups). In an enterprise project, most of your data is coming from somewhere else (the 1970s mainframe at the Oakland data centre, the 1995 PowerBuilder app used by 350 analysts in Hong Kong, etc.). It comes veeeeery slooooowly, and it’s unreliable, and it’s almost guaranteed to be out of sync with the data you’re receiving from other sources (so forget about strict referential integrity). There’s nothing you can do about that, because huge parts of the enterprise are based around those legacy systems, and there’s no one left alive who knows how to change them anyway. Your whole $50M system might depend on data sent as a CSV email attachment every Tuesday night, and rejected 55% of the time because it’s malformed.

There’s a lot of snake oil out there that promises to “fix” this problem — ESB products, ETL products, WS-* products, etc. — but these all address the easy parts, near the middle, not the hard parts, at the edges (and sometimes they make even the middle more difficult than it needs to be).

The benefit of all this mess, though, is that an enterprise application designer is always thinking about distributed data, something that web developers talk about don’t always really get. It’s hard to imagine a CMS like Drupal or WordPress — that naively assumes it can keep all the information that it presents in its own (preferably MySQL) database — coming out of the enterprise.

Enterprise doesn’t have many rock stars

Really, it’s true. Developers working for government, or Fortune 500 companies, on average, aren’t very good. Of course, there must be some real talent hiding here and there, but on balance, coding for most enterprise employees (as opposed to outside contractors) is a 9–5 drudge job that they’re happy to leave at the end of the day. They’re nice people, but they’re not passionate about IT the way you and I are, and they’re not interested in becoming so.

This talent deficit has pretty serious implications for building projects in-house and for maintaining projects from any source — it means that enterprises micro-manage their developers in a way that a hotshot web developer would never tolerate. Part of that is just the overhead of working in a big team — even web companies do code reviews and write detailed requirements when they get big enough — but a lot of it is just a matter of not trusting developers to do the right thing on their own. There are huge numbers of tools out there to count, manage, audit, poke, prod, and otherwise abuse enterprise developers, and those tools are more widely-available in Java than in any other environment, hence the enterprise’s love of Java.

It’s hard to know where the fault is here: would good developers work for enterprise if the working conditions were better, or would they still run off to small startups or consulting for the variety and adrenaline rush? Would bad enterprise developers grow into average or even good ones if they were given more trust and autonomy? In any case, if you’re designing an application for enterprise, don’t expect things that seem trivially simple to you to seem simple to the developers.

The result of all this is that, even if you have a hotshot team of consultants and developers initially building an enterprise system, you have to design it so that mediocre technicians and developers can maintain it for the 10-30 years after you all leave. The enterprise has to be able to hire people with (generally useless) certifications as “Sharepoint specialist,” “Oracle DBA”, or whatever, and the system has to contain few surprises for them. Nothing cutting-edge, please, because they probably didn’t cover it in their certification courses.

Posted in General | 34 Comments

An easy break-up

Google Reader is going away soon, so, with tears in my eyes, I decided to break up with Reader before it could break up with me.  My rebound Android app is Feedly, which seems refreshingly easy-going — Feedly asked for only two taps to import all my stuff from Google, it started syncing my phone and tablet without being asked, and it let me pick up reading RSS and Atom feeds with it exactly where I’d left off a few minutes earlier with Reader.

This post isn’t really about Feedly, though, but about open specs and standards. The reason I can still keep reading all the same blogs, newspaper headlines, and status updates is that Google Reader didn’t control them — they’re publicly available on dozens or hundreds of independent web sites, all following the same set of simple, free syndication standards. Even the way Feedly imported my list of feeds is standards-based.

If I’d been reading all that information on Twitter, Facebook, Google+, Tumblr, or any other similar proprietary, centrally-controlled service, I wouldn’t be able to rebound so easily; even worse, if I’d been relying on one of those locked-in services to publish my content, it would have stolen my audience as well. Think of it as the equivalent of your ex knowing your bank card PIN, and emptying your accounts before running off.

I’ll stick with Feedly as long as we’re both having fun, but as soon as the relationship gets stale, we can part ways as friends and move on. While there may be only one Twitter or Facebook, there are lots of RSS/Atom feed readers out there.

Posted in General | Tagged , , , | 8 Comments

A handgun is like a smartphone, but with bullets

http://m.dailykos.com/story/2013/05/17/1208474/-GunFAIL-XVIII?showAll=yes

Think – how often do you hear  of someone dropping a laptop computer into a toilet or leaving it in a restaurant? How often do you see spider-web cracks on a laptop screen from a fall? Small, hand-sized computing devices are much-more likely be involved in accidents than larger ones, because we carry them around with us all the time, in pockets, purses, glove compartments, etc.

Reading this list (via John Hardy on G+), I think the same kind of distinction applies to long firearms vs handguns – handguns seem to have a lot more stupid/accidental discharges than long firearms like shotguns and rifles, because they’re the smartphones of the gun world. The problem is that the consequences can be much more serious than having to leave a smartphone in a bowl of rice overnight to dry out.

Posted in General | Tagged | Leave a comment

How government subsidies become censorship

«Pure science research drops sharply at National Research Council» (Ottawa Citizen, 2013-05-08)

We’re learning the danger in Canada of having let too many sectors become dependent on federal money. When the arts, NGOs, scientific research, many kinds of R&D business, and even our main national broadcaster all rely on government subsidies or funding, they’re all immediately vulnerable to any ideological shift in the government that doles out their money.

The Liberals created this dependency to ensure that the sectors would reflect their (central-Canadian, urban, moderate left) values in the 1990s, 70s, 60s, and earlier, but in doing so, they’ve handed a powerful weapon to their (western, suburban/rural, moderate right) successors and ideological opponents.

The US system has many problems of its own, but its relatively-independent arts sector — especially film, TV, and music — and the widespread existence of private universities and foundations, ensures that their government can’t entirely turn off the tap for arts, research, or NGO work that it doesn’t like.

Posted in General | Leave a comment

How to declare a conflict of interest in 140 characters?

How do you declare a conflict of interest in Twitter, when you have only 140 characters for your whole message?

The trigger discussion

The question came up after this Twitter exchange with Walter Robinson, an intelligent and moderate small-c conservative blogger and tweeter who later became a lobbyist for the pharmaceutical industry:

tweets

The irony, of course, is that Mr. Robinson himself was accusing the Ottawa Citizen of not including enough context in what it wrote.

How many characters for a disclaimer?

I believe that it’s right that someone should include a disclaimer when there’s a clear conflict of interest (e.g. you’re being paid specifically to defend an industry), but to be fair to Mr. Robinson, how, exactly, can you do that in 140 characters? “Disclaimer: I am a paid lobbyist for the pharmaceutical industry” would use almost half of the space available in any tweet.

Mr. Robinson suggested in his reply above that there’s no hidden conflict, because someone can visit his web site or read old tweets and see who he works for; but if someone retweets his tweet, etc., they don’t have that context, and it looks like this is independent evidence from an informed pundit who wanted to weigh into the discussion.

Let’s make a hash of it

Given the limitations of Twitter, I think the right solution is to flag your tweet with a disclaimer hashtag that indicates that it is not independent (that doesn’t mean that it’s dishonest or misleading; just that you’re in a potentially ethically-compromised position). The hashtag wouldn’t tell anyone exactly what the conflict is, but it would at least tell them that they should go looking. Then, a person could (for example) look at Mr. Robinson’s Twitter profile, visit his personal site, and see that the pharmaceutical industry pays him.

Do any such tags already exist? They need to be short, and not conflict with an existing popular tag. Here are some suggestions: “#COI” (conflict of interest), “#conflict“, “#disclaimer“, “#disclaim“, or even “#paid“.

Suggestions?

(For the record, I believe that what Mr. Robinson wrote in his original Tweet is true, but I still think it’s important to disclose a major conflict in the tweet itself.)

Posted in General | 5 Comments

WebDAV and POST

Over the past decade and a half, I’ve known that WebDAV exists (and been grateful for that fact), but I have mostly ignored it. Today, as an experiment, I set up an Apache WebDAV server on my laptop. It’s great, except that it’s missing one thing I’d always assumed it would have: the ability to upload a file and let the server decide the URL.

This is an important feature for any web repository that’s shared among multiple users or client systems. For example, let’s say that User A wants to upload a file named funny-cat-pic.jpg and User B also wants to upload a file named funny-cat-pic.jpg.

Using HTTP PUT, they can both specify that it belongs in /pix/funny-cat-pic.jpg, but then the second one will simply overwrite the first one.

Using HTTP POST, on the other hand, they could each upload their files, and then receive HTTP 303 (See Other) 201 (Created) responses providing the URLs that the WebDAV server chose, e.g. /pix/funny-cat-pic-001.jpg and /pix/funny-cat-pic-002.jpg. The server could guarantee that a POSTed file never overwrote an existing one.

I know I can just write a short Python or PHP script to do the posting, but before I do that, am I missing anything? Supporting POST seems like it should have been an obvious choice from the start.

Update: Thanks to Tim Bray for the HTTP status correction. Tim also mentioned that AtomPub supports POST, but not, unfortunately, hierarchical organisation of resources (e.g. directories).

Posted in General | 3 Comments

Understanding Canada’s Conservatives

Portrait of Niccolò Machiavelli

Less like the US Tea Party or Religious Right, and more like this guy.

Canada’s federal Conservative government isn’t like American small-c social conservatives — for example, it seems to have no issues with teaching evolution in Canadian schools, it muzzles any of its backbenchers who oppose marriage equality or women’s reproductive rights, and it speaks out in support of gay and lesbian rights at every international gathering (less so for transgendered). On the other hand, it is ruthlessly slashing environmental scientific research and regulations, it supports Israel so boisterously against the Palestinians that even the Israeli government seems a bit embarrassed, and it has a strange obsession (dare we say, “fetish”?) concerning the Monarchy.

In fact, I believe that Prime Minister Harper’s decision-making process is fairly predictable, as illustrated in the following flowchart:

Conservative policy flowchart

Try it out for yourself — take any major policy decision or position of PM Harper’s government over the past few years, and see if it fits the chart.

(Note: for the benefit of non-Canadian readers, John Baird is a Canadian cabinet minister.)

Posted in General | Leave a comment