Maybe the government shouldn’t be “Agile”

Folks in government love to have disclaimers everywhere that their opinion is not necessarily the one of their employers and the view presented here and their personal ones. I’ve always found that a bit tedious and unnecessary but since I’m going to post something slightly related to “Digital Government” I though I might as well just drink the whole kool-aid.

There was a good question asked on Twitter

But when reading some of the answers and from lurking at the #GCDigital hashtag, I’m not sure it’s the right question.((Also, to actually directly answer the question, I think it’s near impossible to be the “real” agile [as opposed to the “wagile” doing sprints inside a waterfall] ))

I posted a thread on twitter about it, because I think that’s what the cool kids are doing these days, but wanted to unroll it here. (And fix some formatting)

So my answer:

I wonder if that’s actually the right question. At times, it seems we’re focused on “Agile” and “Digital Transformation” but those things are meaningless. They are, at best, proxies of what the true goal should be.

In my opinion, the real goal is to deliver better services to people.

That’s it, point blank. All the other stuff, “Agile”, “Digital Transformations”, “Microservices”, “Cloud Native”, those are all distractions.

We sometimes get so focused on adopting the “best practices” from tech vendors promising the new buzzwords in nice packaging or trying to imitate other tech startups that we lose sight of the real goal.

Facebook has been agile, they use all of the tech buzzwords and all of the metrics and user research etc. So does Clearview, so does Twitter. The outcomes of those companies is not what I would want the Government of Canada to look like.

So why not focus on what we really want to achieve?
How can we serve people better in the government context?

I haven’t encountered anyone who was like: “If only I could fill out my EI claim on a serverless edge computing platform that had machine learning, was secured via the blockchain and developed via agile methodology”

The focus shouldn’t be how on do we try to change this massive institution’s project methodology to one that has been successful in the private sector.
Rather, I think it should be, how do we, in the given context((Let’s not pretend the GC is like a private enterprise. We have restrictions and parameters that, for better or for worse, are different from private enterprises)) serve people better? What will tell us that we have served them better? And from there, iterate on practices we think will achieve that outcome.

Because that’s the only really important part of agile. How do we iterate on processes that help us achieve our goal.

And the goal isn’t to be agile, the goal is to serve people better.

“Intermediary” programmers

I’ve started running more and more into what one could call “Hype” programmers.

It’s these folks (actually, it’s men, it’s always men) who have read all of hacker news, know all the greatest buzzwords and why you should use tech X over tech Y but have never actually shipped real things.

I should use this deployment strategy or this container orchestration software, but when you dig below the surface, they can’t tell you why.

I think the biggest indicator of someone’s degree of knowledge relating to technology is how many buzzwords they throw at you. The higher the number, the less they actually know.

On No Longer Being The Best

I’m currently working on a Django app (written in the Python programming language). It’s my first time doing any real work with Python or Django and it is painful. It’s painful because it reminds me of when I started doing WordPress work. I did everything all wrong, I was hacking core, I was doing these clusterfuckeries that would be shameful to show now.

The thing is, I got good at WordPress. To the point where I think it wouldn’t be ridiculous to say that I was one of the top hundred most knowledgeable people on WordPress performance at scale. As for Python and Django, I’m currently in the bottom few hundreds.

And yes, it will pass, I will learn and understand the patterns Django uses, start to understand the magic that goes on behind the scenes and know if the random code sample I’m reading on Stack Overflow is correct or should be burned in the fire of the sun.

But right now, it’s painful. Another part of it is I think the fact that the code is publicly viewable by everyone, something that is great in terms of transparency for the Canadian public but it’s tough to show the flaws of my work so publicly. Part of me isn’t sure if it’s my inadequacies or just that they will be public that I’m worried about.

If I’m truly concerned about the quality of the work that will help the healthcare professionals, that’s one thing. But it being because my ego doesn’t want to show how little I know about a certain topic… that’s less great.

Perhaps I’ll just listen to the wisdom of this song which I believe is a ballad about becoming at peace with one’s own limitations and understanding that growth comes at a cost of pain and feeling uncomfortable.

Anyway, that’s my interpretation of the song….

Context is key when buying a car, in digital government or in PHP

I often find folks in tech to be very dogmatic. “Framework X is the best “, “Java is a terrible language”, “pineapple doesn’t belong on a pizza”, etc.

There seems to often be a lack of context when we throw out thoughts like that.

It’s a bit like someone asking you what’s the best car and you tell them a Ferrari. So they go and buy a Ferrari and they try to use it to move their family across the country.

I saw a talk by the creator of PHP Rasmuf Lerdorf looking back at the 25 years of PHP. If there’s one thing that everyone who’s been using PHP with version 4 knows is that register globals was a terrible idea.

For everyone didn’t code PHP way back in the day. Previously, if you had a GET or POST parameter such as ?test=random_string a variable called $test was created automatically with the value passed in. No sanitation etc. So if you had some code that let’s say checked if a variable existed, well an attacker could basically inject any variable they wanted. I (and pretty much everyone) always thought this was the dumbest thing.

In his talk Rasmuf talks about register globals. And one thing he mentions is that, when this was created, JavaScript didn’t exist….. That blew my mind. In that context it made much more sense! A whole attack vector just didn’t exist when it was created. Now I’m not saying it was a good idea even considering that but just learning about the whole context was mind opening.

I find that searching for the context behind decisions is at times missing in digital government. I’m working at CDS and when working with partners there are often technology decisions that will make people’s eyes roll (I’m sure I’ve been guilty of this as well).

I think those kinds of comments don’t help anyone. They certainly don’t help us understand the context in which these decisions were made.

It’s easy to shit on tech work in government, what’s less easy is really trying to understand the context that lead to these decisions. The constraints people were under, the requirements, the available resources. All those things we might not know about. Only after we’ve started to build a shared understanding of what the current context is can we, together, find a better solutions to serve people better

Starting a new job

Starting a new job is always a mix of nervousness and excitement. While you can’t ever extrapolate from one day, meeting the team at CDS and chatting with many of the folks there was very enlightening. My key take away is that there’s a lot of work to be done, a lot of processes to be improved, and technical systems to be updated. I think we have our work cut out for us and I’m really excited about being able to help make it happen.

I’m Joining the Canadian Digital Service (CDS)

I have big news to announce. I’m going to be joining the Canadian Digital Services starting March 25th.

Some of you may know CDS, others may know the other countries’ versions such as USDS and GDS.

CDS’s goal is to bring together skills and expertise to help the Government of Canada embrace new methods and tools to improve how it designs, builds, and delivers services.

If you’re like me, you may be at first skeptical of this being possible in government. As some of you may know, I spent a few years working in the Government and, like many, experienced some things that were sub-optimal.

I had many many great chats with folks at CDS. It made me believe in the vision that CDS has and that the folks there have the mandate to bring about change.

I’m very excited to be joining such an elite group of individuals working on one of the most important tasks – delivering government services that work.

If you want to read about some of the accomplishments CDS has already achieved, I suggest following their blog (sadly not on WordPress 😉 ). If you’re interested in joining me, CDS is hiring for many many roles.