Opinions

A Software Engineer As a High-Level Government Adviser

Two months ago I took the job of adviser to the cabinet of the deputy prime minister of my country (the Republic of Bulgaria, an EU member). And I’d like to share my perspective of a technical person, as well as some of my day-to-day activities which might be of interest.

How does a software engineer get to such a position in the first place? Some people from NGO that I used to be part of (including myself) communicated with the interim government our open source campaign and also built the OpenData portal of Bulgaria (based on CKAN). We continued the communication with the newly elected government and helped with opendata-related stuff, so several months later we got a proposal for a part-time advisory position. And I took it, reducing my software engineer job to four hours. I don’t have to mention that hiring a 27-year old software engineer isn’t something a typical government would do, so that’s progress already.

What do I see? Slow waterfall processes, low-quality software, abandonware. Millions spent on hardware and software licenses which are then underutilized (to say the least). I knew that before, hence the push for open source and more agile processes. Basically, the common perception of the regular citizen is that millions have been spent on the so called “e-government” and there is nothing coming out of it. And that’s mostly correct.

To be honest, I cannot yet tell why exactly. Is it the processes, is it the lack of technical expertise on the side of the civil service, is it the businesses’ inability to provide quality software, or is it corruption? Maybe a little bit of each. But as you can imagine, a part-time adviser cannot fix any of these things at scale. So what do I do?

Currently the most important task is finalizing two laws – the changes to the law for e-governance and the law for electronic identification. The former introduces a “e-governance” agency, which will oversee all software projects in the country, and the latter is about a scheme to allow citizens to be identified online (a step in the direction of my campaign for electronic identification throughout the EU). I’m not a lawyer, so the technical aspects that are put in the laws get phrased by lawyers.

I have to say that I’m not the main driver of all this – there are other advisers that do a lot of the work, one of whom is way more technically experienced than me (though not particularly in writing software).

The agency that is being introduced is supposed to act as something like a CIO and we are defining what it can and must do. Among more strategic things we also plan to task it with the development of open data, including providing help to all administrations (which is currently something we do, see below) as well as standardizing an open-source development workflow for bespoke software. As I’ve written in a previous post, we already have EU-approved requirements for software – it should be built in the open from day one. And the point of that is long-term stability of the software projects. Whether it’s going to be directly pushed to GitHub, or replicated there from an on-premise deployment (or vice-versa) is a matter of discussion.

The electronic identity is about giving each citizen the means to identify online in order to get services from the government. This includes the right of every citizen to access all data that the government has about them, and request correction or even possibly deletion. I am not a Big Brother fan and I’m trying to push things into a direction where convenience doesn’t mean breach of privacy.

I try to map existing infrastructure to an idea of an architecture and act whenever there’s a discrepancy or a missing bit. For example an important “quest” of mine is to allow each administration to access the data it needs for each citizen online. That may sound like the opposite direction of the last sentence in the previous paragraph, but it isn’t. The government already has that data. And with due procedures each civil servant can access it. What I’m trying to do is automate that access, again preserving all the due legal requirements (civil servants can only access data that they need by law, in order to fulfil a given service), and also keeping a log entry for each access. Then this access will be visible to citizens when they identify with their e-id card. And whenever someone is looking for data about you, you will be notified.

The security aspect is the most serious one and the most overlooked one, so I’m putting a lot of thought into that. Nobody should be able to just get a pair of credentials and read their neighbour’s medical record.

In order to get to such a time-saving, semi-automated solution, I speak to companies that develop the software that’s part of the existing infrastructure and advise for some tweaks. Things are a bit fuzzy, because very minor things (like not using digital signatures to sign information requests) can break the whole idea. And that’s why, I think, a technical person is needed on such a high level, so that we don’t get another abandonware just because a hundred lines of code are missing.

Other things that I do:

open data – whenever an administration needs technical help with exporting, I should help. For example, I’ve written a php converter for Excel documents to proper CSV, because Excel’s “save as .csv” functionality is broken – it saves files in non-UTF-8 encodings and uses semicolons instead of commas (depending to regional settings). And since much of the data is currently in Excel files, exporting to a machine-readable csv should go through some “correction” script. Another thing is helping with “big, fat” SQL queries to extract relevant data from ages-old databases. So actual programming stuff

case study for introducing electronic document process in the administration of the Council of Ministers. That is more on the business analysis side, but still needs technical “eyes”

ongoing projects – as mentioned above, I speak to companies that are creating software for the government and I give feedback. This is rather “rudimentary” as I don’t have an official say of what should and what should not be done, but I hope fellow software engineers see it as a good input, rather than an attempt for interference

some low-hanging fruit. For example I wrote an automated test of a list of 600 government websites and it turned out that 10% do not work with or without “www” in the URL. Two are already fixed, and we are proceeding to instruct the institutions to fix the rest.

I try to generate new project ideas that can help. One of which is the development portal. Currently companies communicate in an ad-hoc way, which means that if you need a library for accessing a given service, you call the other company and they send you a jar via email. Or if you have a question, only you get to know the answer, and other companies must ask for themselves. The dev portal is meant to be a place for providing SDKs for inter-system communication and also serve as a Q&A site, where answers are accessible to all the companies that work on e-government projects.

Various uncategorizable activities, like investigate current EU projects, discuss budgeting of software projects, writing an egov roadmap, and general “common sense” stuff”

I use a private Trello to organize the tasks, because they are really diverse and I’m sure I can forget something of the 6 ongoing tasks. And that’s, by the way, one of the challenges – things happen slowly, so my trello column “Waiting for” is as full as the “In Progress” one. And that’s expected – I can’t just add two points to a law project and forget about it – it has to follow the due process.

So it may seem that so far I haven’t achieved anything. But “wheels are in motion”, if I may quote my ever more favourite “Yes, Minister” series. And my short term goal is to deploy usable systems which the administration can really use in order to make both their own lives and the lives of citizens easier, by not asking for filling dozens of documents with data that is available on a server two streets away. And if it happens that I have to write a piece of code in order to achieve that, rather than go through a 9-month official “upgrade” procedure, I’m willing to do that. And fortunately I feel I have the freedom to.

In software development, starting from a grand plan usually doesn’t get you anywhere. You should start small and expand. But at the same time you should have a grand plan in mind, so that along the way you don’t make stupid decisions. Usable, workable, pieces of the whole puzzle can be deployed and that’s what I’m “advising” (and acting) for. And it’s surprisingly interesting so far. Maybe because I still have my software development job and I don’t get to miss writing code.

It may seem you have not achieved much so far, but I’m quite confident this is not true. And I say this because I’ve dealt with e gov projects in Bulgaria. I support and “vote” with both hands for all your initiatives and activities. Keep up the good work and I wish you to see the wheels move faster!