Hey Civic Hackers! How about leaving the ninja skills at home and building really useful applications?

Caveat: this post was written and staged before the CfA summit - so it does not include any developments announced at the Summit.

Greetings Shifters!

Today I am going to share some thoughts on the way I see programmers approaching Civic Hacking. These ideas were inspired by a discussion I had with the CTO of Code for America while at OSCON. The main point coming out of the discussion for me was:

The current crop of civic hacking apps are largely built to make life easy for hackers, rather than getting the widest adoption, or long-term deployment for the apps.

There are two users for your civic hacking applications; you are doing a great job of building more usable applications for the general public, but I think you are doing a lousy job for the small governments that have to actually deploy, maintain, and modify your application.

As you may guess, I think the real world is not quite so black and white BUT for today I am going to state the case strongly so we can get a good 'ole discussion going.

Background

My background coming into this is that, in a former working life, I worked as an Applied Technology consultant at an environmental firm. I worked with several city and county governments in the Bay Area, usually in the planning department or an agency responsible for implementing a habitat conservation plan. I also interacted with quite a few local conservation NGOs as well. On a few projects, I interacted with the central IT groups for some city and county governments. Don't forget this is one of the most tech rich areas in the world and generally well funded government organizations.

In almost all of these organizations, the central IT group was basically doing all they could to keep the email, file servers, and central web site up and running.

At Red Hat, I lead the effort to get OpenShift and CFA to partner. I strongly believe in the merits of civic hacking, and in CFA in particular, and in the potential to change the way the government interacts with its constituents. Bringing some of the best in the technology world to work with governments in need is a great collabortion. The work CFA has also done with their Brigades effort is really amazing. So please don't read this post as a condemnation of civic hacking or of CFA. It's more a criticism based on wanting to see civic hacking maximize its impact.

An Analogy

To illustrate my point I would like to start with an analogy using cars.

RVs

The state of affairs before wide spread civic hacking is what I would like to call the "RV Phase" of government applications.

Big Luxury RV

If there was enough money, IT would hire a consulting firm or some large IT company to come in and do formal requirements documents, recommend some large piece of enterprise software, do a waterfall style project, and build some huge thing that met everyones needs in a mediocre fashion with no particular need in a great experience.

Most of the departments I worked with wanted some small focused application - a parcel viewer or a protected lands viewer or a table for filling out a single form. Neither the process nor the resulting applications ever made them happy (as a matter of fact, most of them were quite cynical of any value coming from the consultants or their central IT group).

For the smaller governments, these large projects were also a drain on their budget (like the gasoline bill for the RV). It kept them away from getting the things done that were basic services. And it was so complicated and large that there was no way for them to self-service, they basically had to bring back in the Vendor or the consulting firm to make even the slightest changes.

Street racers

Along comes the civic hackers who I will call the "street racing car" builders.

street racers

A lot of the hackers are deeply involved in the tech scene. They keep up to date with the latest technologies and will use tech that is in the early phases of adoption. They have no problem using cloud services, NoSQL data stores, languages with smaller communities, and target more recent browsers or phones. They don't mind doing custom configurations on server software, they probably already know some of the maintainers of the project and can get special help, and they know other hackers who they can reach out to. They generally come from a startup world or at least from software companies where budgets and skill sets are generally high for employees.

The apps they have created are MUCH more usable than the RV era of apps. They do a much better job of using low cost software and better coding practices to build apps that are much more usable for the general public. I can not saying this strongly enough - I am very appreciative of the energy and improvements that civic hackers have brought to governments use of technology. They have show that the goverment's use of technology does not have to be huge, costly, and end up giving citizens a poor user experience. Thank you, thank you, thank you.

On the flip side though, they have done nothing to help small government actually run, modify, AND maintain these applications. Their skill sets leads to apps built with Ruby or Node.JS using MongoDB or Redis. Or they mix and match several different platforms and languages.

Take for example CKAN - which I think is a great project. Here are the instructions if you use Ubuntu 12.04. Which I would say involves a lot of tech that only the largest civic governments would be able to actually be able to support and modify. If you don't use that one version of Ubuntu then you are compiling from source and it ain't a process for the meek or only semi-tech literate. I would point out that this is definitely one of the better documented and supported civic hacking projects and I love that it's Open Source.

Here is the github repo for Code for America (I am not just picking on CfA, but they are the only civic hacking I know of with a centralized account). The majority of the projects are written in Ruby with some server side JavaScript and a smattering of Python. When I look at the first 3 projects and how to install them, not one of them covers Windows and only one even covers an OS other than Mac. In all my time at civic goverments I never saw a Mac on anyone's desk. That may be changing but I doubt it has been a sea change. And nobody I have ever worked with runs Mac on the server.

I know all the various surveys of popularity of programming languages have problems, but look at where Ruby falls on the TIOBE index, the PYPL index, and the RedMonk ranking. It is last of the major languages in every index published. This is not a critique of how awesome the language is or whether it's the best language for all use cases. I bring this up because for most governments, finding a Ruby hacker in their neighborhood, that they can afford, will be next to impossible.

What civic hackers are doing is getting the government employees back into a similar situation they faced with RVs. They would still be bringing up applications that they can not modify or find people to support when they have problems. It's a really sweet looking car but there is no way they can afford to maintain or modify it.

Big Old Pickup truck

Up until a few years ago I had a Chevy C10 1987 pickup truck, named "The Cheat" after the Homestar Runner character.

Chevy C10 pickup

It was not the most fuel efficient, nor pretty (it had been used by El Dorado County to haul around mosquito control equipment for many years), and it could only fit 3 people across the bench seat. But for me it was just right at the time. I could haul around firewood and bikes, I could fit two of my kids in it and they loved riding in it, but most importantly - it was SO easy for me to fix. I used to joke that there was so much room under the hood, that I could climb in with the engine and take a nap. I had never really worked on cars but with the internet and an auto parts store, I was able to replace the brake pads, replace the alternator, change the oil, and do all the general maintenance I wanted.

Civic hacking needs to start thinking about audience of installers/maintainers more and less about how much cool tech they can use. They need to build nice 'ole easy to maintain and modify applications (just like my pickup).

What I think needs to be done

Ok, here is the part where I lay out the less fun way to build apps but will end up greatly increase adoption and long term use of your applications. Ask yourself why you are doing civic hacking - is it to show off your skills or is to build something people want to use? Before you read this you might want to listen to this great TED talk about helping people.

When you come in with your Ruby, Node, Mac OSx, and Redis to a civic government you are like the aid workers planting food in hippo territory. Rather than working with what is workable for them, you are trying to show them the ONE TRUE WAY.

1) At the very least, the only programming languages you should use on the server are (in decreasing order of priority) PHP, Java, or Python.

I leave out .NET on my own philosophical grounds where I believe you should not be tied to an OS, particularly one of a monopolist. If you can get past that objection then I would add it to the list since a lot of civic governments IT departments are currently Windows shops.

Look I understand you know and love {insert favorite tech here} but if your goal is to really help civic governments, then make life easy for them, not for you.

I put PHP first because it is everywhere and easy for people to pick up and use. There are a bazillion books on it, there are tutorials all over the web, there are plenty of hosting providers, and it is easy to find people who know it outside of the tech hubs in the US.

Java is next because most CS departments teach their students Java, it is stable, there are tutorials for it all over the web, it is used by large enterprises and small shops so it may be in the government IT shop already, and there are libraries for almost anything you want to do.

Finally I put Python in the list because it meets the needs of those who like dynamic languages, it is mature and stable, it is the programing language to extend quite a few desktop applications, it is relatively easy to read and learn, there are tons of books and tutorials, and it also has a lot of libraries to carry out almost any function you want.

2) Next up, most civic hacks should use a popular framework.

There is no excuse not to use a platform other than your feeling about "Not Invented Here". The benefits in terms of readability and ease of transfer of code outweighs any philosophical or speed arguments you may make. Most civic apps are never hit by very many people at one time. You are not building Facebook or even Whitehouse.gov. Your goal should be to make applications that can easily be picked up, understood, modifed, and made running by a decent developer. These apps should not be built for rockstars, they are few and far between AND rarely work for government wages.

3) Document your project more than you think you need to document it.

Write up documentation instructions for at least several cloud platforms (I would recommend including OpenShift ;) ) and then also for Red Hat Enterprise Linux, Ubuntu, and Windows. Civic government run all those OS's internally and by giving them cloud options you really help free up small departments to get applications up quickly and easily.

4) Finally, in truth, most civic hacks should really make a plugin for a platform like Wordpress, Drupal, Django, or Magnolia.

Please don't pick some obscure platform - pick a mainstream one with lots of books, tutorials, developers, and users. What I am basically saying is pick based on the size of their ecosystem.

Giving an IT department or a civic department a well used, easy to install, and supported platform to start with is a HUGE win. They can hire local consultants to install it for a reasonable price, it will be easy for them to modify the pieces, and they can probably host it easily as well.

By giving them a plugin that does what you wanted, they have a much easier path to install/host and maintain the awesome application you wrote for them. And by making it easy and maintainable you have just increased the adoption of your application many fold.

Time to wrap up

If what you want is to show off that you can make the hottest fastest car on the street that looks really great, don't expect a lot of small governments to buy one. But if you make a car that they can feel comfortable maintaining and using themselves, you will have freed them from buying RVs and given them something that makes their life better.

Stop coding for you - code for the people you are trying to help.

I generally agree, but my perspective differs on the present state of things and the use of emerging technology in civic-related efforts.

Working directly with cities' various IT departments, you must have seen a need for cities to establish an informational infrastructure the way they have other vital resource infrastructures (water, gas, electric). The fundamental need for this is access to information. Each city has its own, for lack of a better word, situation. That situation is reflected in every single citizen that lives and works there. It begins with addressing the first mountain in the way... which is achieving interoperability between disparate city systems and data across (typically) unlike environments.

The use of emerging languages, nosql dbs and pre-v1 projects in civic projects is an early step to legitimizing these technologies for their use and shouldn't be discouraged, but I understand the apprehension to their use. I think the choice of what to use depends entirely on the goals of the project. Often times, by using an alternative application stack, it also further tests all these open data initiatives and their ability to integrate with unlike environments (that first mountain in the way). I personally like to see data being put through high i/o (i.e. nodejs)... to me it makes sense. The same way it made sense when the whitehouse and the Chamber of Commerce (among others) began using Drupal. There were many critics (still are) and many people couldn't believe they would use PHP, let alone Drupal. It generally worked out for them, but it won't be the solution forever either.

The notion of "hacking" will always and forever be a novelty and buzzword, but a very ubiquitous one. 'Civic Hacking' superficially and incorrectly encapsulates all the efforts, ideas and passion being put forth by so many people everyday for the betterment of society. Every effort, no matter how 'unsuccessful' or misguided it may seem is valuable and shouldn't be diminished.

That said, if I were to re-write that list, it would look like this:

1) Use the right tools for the job and never stop innovating or trying new things. We all have to be open to logical change, but expect to be challenged and always substantiate your position to the best of your ability. Don't be afraid to be wrong.

2) Participate and contribute to open source projects. Don't be fooled, every company out there uses open source technology and you should be aware of your options, understand the community/support/contributors behind what you use and participate to ensure they continue to evolve.

3) "Document your project more than you think you need to document it." Developing the ideas behind the effort is far more important than the immediate result.

4) Every line of code will be re-written numerous times (if it survives), so just make sure it works, then worry about doing it better.