Month: August 2017

Last week, I wrote a post about the BPB and WhoTargetsme, and since writing that, I’ve been lucky to enough to have a few very nice volunteers help make up a team of illustrators, data scientists and talentedtechnical types) with me to go to this German Election themed hackday this Friday. In this post I’m sharing a few things that I’ve either learned, or felt are worth sharing to other interested folk.

How campaigning finance works differently in Germany

In Germany, there’s more state funding of political parties in the UK, and in some areas it feel more tightly regulated, but in some areas it if feels like the wild west. There’s a finite amount of airtime for election based advertising on TV, which is subsequently split among all the parties in a pre-determined manner, so you can’t just carpet bomb a TV channel with attack ads like in the US, and campaigning is barred up to a few days before the election.

However I couldn’t really find any meaningful regulation on the use of digital in Germany in this area.

In the UK, there’s a limit on what you can spend on digital on local campaigns, but there’s a loophole present in that national campaigns can target geographic areas with digital platforms like Facebook, so it’s possible outspend rival campaigns in a particular region quite easily.

Two main things stopping this happening in Germany at present seem to be:

a) Fewer people relying on Facebook for news – it’s associated with hate speech more, and Germany has the lowest percentage of people using it as their main source of news in Western Europe.

b) Inertia – Parties traditionally haven’t used Facebook before for targeted campaigning to the same extent that we have seen in the the UK and the US.

c) The more cordial tone of campaigning – campaigning is generally less adversarial in German politics. For example it’s fairly common to see German politicians from different parties agreeing with each other on issues in a way you wouldn’t see in the UK and the US.

How I think coalitions and PR affect politics over here

The last part above likely down to the system of governance over here, and wearrants some more explanation:

In the UK, we have a first part the post system in our elections – that is, if a MP wins in a given area, it’s as if they won all the votes in that area. This means it’s possible to have ‘landslide’ like swings in power in parliament, even when a comparatively small percentage of the population has changed how they vote. It also tends to favour two parties over a plurality, and this video from CGP grey explains for more entertainingly, than I ever could:

There’s another effect, but this doesn’t have the helpful animated explanation – because parties know that even if they win, they’re likely to be in coalition, it changes what tends to make into their manifestos.

Intra and interparty compromise

When forming a manifesto, there’s going to be some intra-party compromise where, various positions are argued over, and depending on whether they think they’ll be vote winners, are thrown out. A good example of this would be Jeremy Corbyn’s aversion to nukes – he’s been agains them for decades, and yet because it’s seen as a vote loser, the party voted to have funding Trident in the Labour manifesto in 2017.

Under a first past the post system, though – there is an assumption that if a party wins a majority in election, it’ll have so much power that it can ram through policy changes, without relying on the support of other parties, and won’t need to get bogged down in the horse trading we associated with coalition politics.

In coalition politics, because you have power being shared among a wider number of parties, often with radically different worldviews, to get any change, a number of inter-party need to be made, and it’s more likely that some policies will end up being jettisoned, in order to get the other parties onboard, to effect any kind of policy change.

This has the effect of allowing manifestos to be somewhat more radical, under the assumption that voters know that some of the more radical policies will by necessity be sacrificed to achieve some of the other goals the populace was voting for.

Put another way, if you know you aren’t going to ever be able to deliver all the policies in your manifesto, you are able to use more eye-catching policies as a way to differentiate your party from others. This isn’t something we’re used to in the UK, and we tend to take a very dim view of it. You only need to see how Liberal Democrats suffered under Nick Clegg effectively gave up a pledge on free higher education in 2008 in exchange to guaranteed look at electoral reform when going into coalition with the conservatives in the UK in 2008.

As someone growing up with UK politics, it’s not clear to me how voters work out what policies in a manifesto are likely to be sacrificed once the party is in power – my guess is that it’s based on some intuitive sense of how bonkers a part of a manifesto is, but I’d be grateful for a response in the comments.

I think Google and Facebook should do this because they are companies that want to connect the world, not divide it. By showing which adverts are being shown to which parts of the electorate they can help expose situations in which parties and candidates are telling one group of people one thing, and another group of people the exact opposite. It may also help expose forms of campaigning based on hate that are actually outside the law, especially in a country like the U.K.

What can be done about digital

If Google and Facebook are billing clients for all these personalised ads, it’s difficult to believe that the data used for the ads being served doesn’t exist, and in the Steinberg post above, Tom explicitly challenges them to share this info:

What I want is this: I want Facebook and Google to show seasonal goodwill by voluntarily publishing data on the political adverts that are purchased on their platform and shown to users in the U.K. in the next six weeks.

To be more specific, I want:

A copy of each unique advert (e.g image/text/video)

Data on who this advert was targeted at (e.g everyone/only women/only people in London)

Data on how many people have been shown each advert

Information about who the buyer was

But this isn’t the only way this can be more transparent.

One bottom-up plan to make this more visible is the Who Targets Me project from the UK, to help shed some light on the kinds of ads being served via Facebook, and who is being targeted. There’s an election coming in Germany next month, and they’ve started over here too.

In Germany, institutions like the BPB, and their Wahl-o-mat exist to help inform the electorate about their choices.

We’re very lucky to have these in Germany, and I wonder if in 2017, they would be a good ally in helping make the digital side of elections more transparent as Tom suggests, using approaches like those shown by WhoTargetsMe.

Moreover in Germany, where campaigning is arguably less vicious than other places, and political parties aren’t already massively invested in ‘dark’ campaigns like this (and less likely to fight to keep them), it feels like it may be a good place to establish some conventions or precedents for responsible use of digital campaigning.

I’ve been running events and meetups since around 2010, but I haven’t come across the ‘Pacman rule’ before, as blogged by Eric Holscher.

It’s a simple rule to follow, to make it easier for new people to join groups, and generally help make events feel nicer for first timers:

The rule is quite simply stated:

When standing as a group of people, always leave room for 1 person to join your group.

More memorably, stand like Pac-Man!

The new person, who has been given permission to join your group, will gather up the courage, and join you! Another important point, the group should now readjust to leave another space for a new person.

Leaving room for new people when standing in a group is a physical way to show an inclusive and welcoming environment. It reduces the feeling of there being cliques, and allows people to integrate themselves into the community.

So simple, and easy to try out – I think I’ll give it a go at the next event I’m organising.

I’m experimenting with ways to start posting regularly here, and one way I think might work is to share a link each week to a talk, or video I’ve watched, and why I found it worth watching. As of summer 2017, Python is my primary coding language, and this talk by Brandon Rhodes from 2014 was a lovely find. I’ll explain why in this post.

Why you might watch it

If you’ve ever written any code in python that pulls data from a database, or external web service, it’s easy to get bogged down in long messy chunks of code, that end up being difficult to test, or take a long time for the tests to run.

Sadly, this often acts as a disincentive against writing tests, which means you end up writing few tests, and end up with buggier code than you want.

This talk gives a nice round up of the strategies specific to Python 3 you might use to manage this (like the built-in mock library), as well as referring to more common techniques used in other languages like dependency injection, in Brandon’s typical affable, easy to understand fashion.

If you don’t want to spend 45 minutes watching the vid, the general recommendation is that where possible, it’s better not to hide IO, (where you talk to a database or API), but instead decouple it as much from the rest of your code as possible, so you can decompose the rest of your code into pure functions which accept and return data – this makes it easier to write fast, easy to understand tests.

The added benefit of this is that because you are able to understand the what data is going into and out of each function, you’re able to test edge cases in these smaller functions, rather than relying on large expensive, slow tests that rely on lots of set up and tear down to create the necessary state you need just to test a single operation on a small subset of the data being set up. I’ve worked on a couple of projects in the last 12 months that had this problem, and in both cases, it was a real drain on productivity, as well, as being a real pain to work around.

The final key takeaway I took was what he referred to as having consistent levels of abstraction from the ‘top’ to the ‘bottom’ a program – having code that does crunchy IO wrangling mixed in with code that expresses business logic make it difficult to read, but just hiding the IO in a function then continuing to have low levels details in business logic isn’t much better, as you’re still mentally switching gears as you read. Better to wrap some of the business logic in well named functions too, so you’re operating at the same level of abstraction in the code, and at a glance you can read the intent.

TLDR: if you’re writing code in python regularly, and succinctly presents a lot of good ideas from other programming communities, and how they apply when coding in Python – I think it’s worth 45 minutes of your time, and it’ll almost definitely save that much time in waiting for slow tests inside a month…