Can WordPress really do that? Slides from my WordCamp Victoria 2012 presentation

Can WordPress really do that? A case study of vierderduer.no

Can WordPress really do that? A preview of my 2012 WordCamp Victoria talk

Vi er der du er - applicationIt all started with a simple yet befuddling question: “Can you create a WordPress site that sends SMS messages to users when things change?” My initial thought was that this could easily become the most annoying website in the world, but upon closer inspection it was a stroke of pure genius.

To ring in 2012 I’m bringing something completely different to WordCamp Victoria. If you’ve seen my live talks previously you know they are usually either neck deep in live code or conceptual presentations on theoretical ideas. This time will be different:

My talk, entitled “Can WordPress really do that? A case study of vierderduer.no” will be focussed around one of the most interesting and challenging WordPress projects I’ve ever been involved in, the building of a site called “Vi er der du er” (“We are where you are”) for Norwegian bank SpareBank1. I was brought on as an outside contractor by Netlife Research, one of the largest and most well renowned web dev houses in Norway, to make their crazy ideas and designs into a real-life site. I say crazy because this is a site that does things so far out of the ordinary even I have a hard time figuring out how we got where we are today.

What makes the site so interesting is that it uses Facebook Likes as a voting system to help raise money for organizations. The more likes an organization gets, the more money the bank gives them. And along the way the organization gets SMS messages telling them about the status of their application and how much money they have raised.

But that’s just the tip of the iceberg. This site has so many hidden features and backend customizations I’m not sure I’ll be able to cover them all in a measly one hour. But I’ll try.

The talk (which I have yet to prepare) will be a nice break from my regular stuffing-code-down-your-throat approach. I’ll talk about how the site came about, the many challenges and solutions implemented and how you can take my hard learned lessons and use them to make your custom WordPress themes more effective and easier to manage. More importantly though I’ll spend the hour helping you break free of the well established preconceptions about what WordPress can and cannot do. If you ask me there is no limit. And in this talk I’ll prove it.

So, if you haven’t already bought a ticket, head on over to the WordCamp Victoria site and grab yours. See you there!

Improving SEO Using Accessibility Techniques – New Lynda.com course

Want to bring more people to your website, play nice with social media and allow everyone to access your fabulous content, regardless of how they choose to do so? If so you should check out my newest course on lynda.com, Improving SEO Using Accessibility Techniques. This course grew out of a realization that though SEO and Accessibility seem to be at the opposite ends of the “stuff I code for and care about” spectrum, they are actually two peas in a pod. And they are also sharing that pod with a third pea called “Web Standards”. Or, to put it slightly less cryptically, accessibility, SEO and web standards go hand in hand … in hand. And by applying all three in your web development process you end up with sites that are not only easier to access for people who use keyboard navigation and text-to-speech browsers, but also other non-standard visitors like Google, Bing, Facebook, G+ and so on.

Check out the video above for a primer and go watch the Improving SEO Using Accessibility Techniques course on lynda.com to get your sites up to snuff and get more visitors in the process.

The value of women in tech

The video above shines a light on an important topic. It may seem like a purely lexical trick – referring to women as ‘women’ rather than ‘girls’ – but it is so much more. Considering females constitute more than half of the world population and that in the western world at least, the female work force is both better educated and more skilled than the male counterpart, referring to them in a manner that properly indicates their age and maturity is vital.

But the issue goes much deeper than that: Even though many consider womens’ lib to be a thing of the past and feminism to be dead, women are still not treated as equal to men. This manifests itself in lower wages, lower positions and lower overall value in the work force. And this is especially true in the tech sector.

Why it is so is a mystery to me, but it is likely rooted in two main predispositions:

  1. Men don’t see women as equal
  2. Women don’t see themselves as valuable

Both of these ideas are fatally flawed and rooted in biasses that belong in the 17th century, not 2011. And to rid ourselves of them we all need to start thinking differently about gender in the workplace.

Consider James Chartrand – famed writer for Copyblogger and other online publications. When he published the article “Why James Chartrand wears women’s underpants” in 2009 it created a furore. James announced he was actually a she and was writing under a male pseudonym to gain respect. Her (yes, it’s confusing) claim was that as a man she had an easier time finding work and was paid more than as a woman.

Panzer Feminists and women’s lib (and anti-lib) opinionators world wide went ballistic on James for a variety of reasons. That itself was not a surprise. However, there were a group of arguments coming usually from women that really stuck out to me. I like to call them the head-burried-in-the-sand arguments. They came in two varieties:

  1. James is doing the women of the world a disservice by pretending to be a man. In fact, she is furthering the gender bias and worsening the situation. James should have her woMan card revoked.
  2. James is delusional. There is no gender bias in tech. Her woes were caused by her inferior writing and obvious self-loathing.

Both of these claims are, in my opinion, ludicrous. James did not do women a disservice or damage womens’ lib or feminism by doing what she did. In fact, by pretending to be a man she proved beyond any doubt there is a severe gender bias in the tech world. And by going public she made it impossible to ignore. And to the claim that there is no gender bias in tech? Get real. Of course there is. And it’s worse than most other industries. Don’t believe me? Check out this piece from Redit posted some 5 months ago entitled ”I regularly hire woman for 65% to 75% of what males make“. A sobering piece of hard reality right there.

This last piece also highlights that often overlooked women devaluing themselves issue I mentioned earlier: Women, through cultural bias and lack of inbred arrogance will often sell themselves short either because they think they’re not worth more or because they think they’re not skilled enough. Men on the other hand will almost invariably oversell both their value and their skills. As a result there is an artificial gap created by honesty vs bravado. The only way to get past that dear oestrogen enriched human entities, is to start demanding what you deserve. Otherwise you’re just playing weak cards in an attempt to be well liked. And just like in poker, that won’t work if you have any plans of winning.

So what do we do now?

Inequality for women or between the sexes is nothing new. The sad thing is it continues today. So we have to do something about it. And bizarre as it may sound, it starts with the language we use. Just like you would never refer to me as a ‘boy’, you should never refer to a female over the age of 18 as a ‘girl’. She is a ‘woman’. And that goes for all you other women out there. I know  you think it’s cute to call yourselves ‘girls’, but you’re not girls, and by doing so you are selling yourselves short. Girls are females between the ages of 0 and about what… 14? 16?. Anything older than that and they are either ‘young women’ or ‘women’ proper.

Try applying this simple rule: When referring to a female, if she were a male, would you call her a “boy” or a “man”? If ‘boy’, go with ‘girl’. If ‘man’, go with ‘woman’. That’s what this linguistic differential is for: to distinguish based on age as well as gender.

Once that’s settled, let’s start talking about not referring to people based on their gender but rather their skill set. But that’s a whole different argument.

Wise words to live by

“If you’re only focusing on the next thing you’re going to learn, you’ll always feel like a student, never a dancer.”

When she said it it was part of a conversation, little more than a fleeting thought put into words. But it struck me that not only was there profound meaning and wisdom in that sentence, but there was universality. Swap out “dancer” with any other word and you see what I mean.

“She” in this case is the teacher of the Argentine Tango weekend intensive Angela and I attended this weekend. You find the wisest words to live by in the strangest places.

WordPress on Windows Azure – a bit of history

In February 2011 I had the fortune of getting a meeting with Alessandro Catrioni, head of the Azure Interop team at Microsoft. We had a long chat about the possibility of creating a persistent, scaleable WordPress Networks solution that could run natively on Windows Azure. A bit like trying to boil the ocean, but we knew it was technically possible. Last Friday, the first fully functioning version of this crazy idea went live and we were able to run multiple WordPress sites from one core installation as a native Windows Azure application utilizing an Azure instance, a SQL Azure database, Azure Blob Storage and the Azure DNS.

It may not sound like much, but this is big. As in you can make your own WordPress.com. In the cloud. With infinite scaleability and redundancy. Without managing your own server.

The Idea

As with many other WordPress developers one of my big challenges has always been hosting. You basically have two options: Host your clients independently on their respective shared hosting plans all over the web or host them on your own server. If you choose to host them on your own server you again have two options: Host them as separate WordPress installs or host them all under a WordPress Network (previously WordPress MU). By far the best option from a content management and administration point of view is the WordPress Networks option. But it came with some pretty brutal downsides: When hosting multiple sites under a WordPress Network you are basically calling one set of core files and one database from many sites at the same time. And though this is unproblematic if each of the sites get a couple of hundred visits a day it becomes a huge problem if you have say ten sites that each pull 10,000 visits an hour. Why? Because that amounts to 100,000 calls to the same core files and the same database. That kind of traffic requires a robust server and a big pipe.

The solution to this problem has been to host such networks on unreasonably large and powerful servers. You basically scale for the worst case scenario and pay for a lot of down time in between. An inefficient solution, and also a cumbersome one as these setups in most cases require constant server maintenance and upkeep. Not to mention the enormous headache of adding additional drives and servers should upscaling be necessary.

This is what the cloud was built for: Dynamic scaleability both in terms of bandwith, capacity and processing power. So the best solution for WordPress Networks must surely lie in the cloud somewhere.

There’s just one problem: The cloud is complicated. And that’s where Windows Azure comes in – at least it did for me.

I’m not a gardener

Though I consider myself proficient at web development and people have referred to me as a “WordPress Adept” I am by no means a server expert. Quite the contrary. I have only a superficial understanding of servers and server maintenance, and I have little interest in expanding my knowledge in this field. So though a cloud server would provide me with a garden in the cloud I have little interest in becoming a gardener. I just want it to work. And that’s what Windows Azure offers: A maintained garden where I could deploy my applications.

The problem of course was that Windows Azure runs a .NET framework and a SQL server, not the PHP framework and MySQL server required by WordPress runs on. What was needed was some sort of symbiosis. Which is what we’ve been working on for the last 6 months.

Make it Native

Previous attempts had been made to make WordPress run on Azure, and they did work, at least for short periods of time. The problem was that they created pseudo states within the Azure framework where the PHP application could run, but these pseudo states were not stable. What was needed was a way of making WordPress into a native Azure application. That way it would be persistent, properly scaleable, and could be managed like any other Azure application. But this had to be done without touching the core files within WordPress, otherwise future updates would become a nightmare and that would defeat the purpose of doing this in the first place.

The solution was to create a set of adjoining files that served as bridges or translators between WordPress and the foreign Azure environment. That way the administrator could swap out and upgrade core files within WordPress without breaking anything and also change the configurations of the application through the normal Azure interface. And after a lot of experimentation and tweaking it worked.

Domains for everyone

So now we had a persistent, upgradable installation of WordPress running in Network mode on Azure. The last hurdle, the one that would prove to me most challenging, was to achieve seamless domain remapping for the different network sites. Let me explain:

A WordPress Network can be set up in two ways: Sub-sites or Sub-directories. The former produces site URIs such as newsite.pinkandyellow.com while the latter produces URIs like pinkandyellow.com/newsite. The obvious problem with both is that they use the pinkandyellow.com domain as the root. Which won’t work if you intend to host other sites or client sites under your network.

Domain remapping allows you to point these sub-sites or sub-directories to a different domain, so instead of newsite.pinkandyellow.com you’d get newsite.com. This requires a WordPress plugin (of which there are several) because the remapping has to be done based on the core URL. I could go on ad nauseum about how this works but suffice it to say it only works with one of these plugins. Problem is none of these plugins worked with SQL servers. Instead they produced bizarre errors and messed everything up quite badly. For a long time. Until the lead developer Satish found a solution.

Your own personal garden in the blue cloud

The end result of all this is a simple solution that allows you to deploy WordPress Networks on Windows Azure as a native application. By doing this you can take advantage of every aspect of the cloud including scaleability, persistency, CDNs and redundancy. But most importantly you will no longer be paying for processing power and bandwidth you are not using. Because Azure is a scaleable environment your solution will breathe with traffic, expanding and contracting as visitor numbers go up and down. As a result your costs will be a true representation of actual use, not a worst case scenario approach.

There are other great benefits to this solution including the ability to remote desktop into the application itself for beta testing and quick resets should something go wrong. In fact there are more possibilities here than I am able to wrap my mind around and as we move forward with the project countless more will undoubtedly take shape.

For now the only thing that matters is that you can set up and deploy your own installation right now and give this new solution a spin for yourself.

In the coming months I’ll be posting a series of tutorials and articles on my own experiences running WordPress on Azure. The first one on how to create a single site installation went live a couple of weeks ago and will be updated as the deployment solution matures. To see a live example of WordPress running on Windows Azure you can head on over to PhotoPivot.com which currently runs on four extra small instances.

 

How to remove WP Geo plugin from specific pages

I ran a cross a rather interesting situation this week while working on the Vi Er Der Du Er site. The site uses the WP Geo plugin extensively on both pages, and posts, and custom post types but I needed to deactivate it for one particular page because I was embedding a different custom Google Map. Not surprisingly the scripts calling my custom map were conflicting with the scripts calling WP Geo and as a result the map on the page in question didn’t work.

At first I thought it was a matter of removing the actions that called the plugin itself. I’ve done this in the past and it works for some plugins. I also found a code snippet here that seemed to show it working. That unfortunately was not the case. So I had to keep digging. Then I found this excellent article How to disable scripts and styles by Justin Tadlock that explained it all: I needed to de-register the scripts, not simply remove the function.

After digging through the plugin code I found the script calls and ended up with this code snippet in my functions.php file:

<?php 
 
// remove WP Geo JS/CSS from the nybank page
add_action( 'wp_print_scripts', 'vierderduer_deregister_javascript', 100 );
 
function vierderduer_deregister_javascript() {
 
	if (is_page_template('page-nybank.php')) {
 
		wp_deregister_script( 'googe_jsapi' );
		wp_deregister_script( 'jquery' );
		wp_deregister_script( 'googlemaps' );
		wp_deregister_script( 'wpgeo' );
		wp_deregister_script( 'wpgeotooltip' );
		wp_deregister_script( 'wpgeo-admin-post' );
 
	}
}
 
?>

As you can see I made the function conditional so it only kicks in when a specific page template is used. You can swap out that condition for any other condition for the same result. Bottom line is it works and now WP Geo works on every page, post and post type except pages that use the page-nybank.php template file.

Open Source in the Cloud – WordPress on Azure: My Make Web Not War presentation

Curious about the concept behind WordPress on Windows Azure or why I’m so excited about hosting WordPress Networks on a Microsoft platform? Look no further than the presentation above from Make Web Not War 2011.  In it I explain the premise and reasoning behind hosting WordPress Networks on Windows Azure along with some general principles around hosting large WordPress Networks. Your own private garden in the cloud? You bet.

Sadly the video doesn’t feature the slideshow presentation I created, but you can follow along in a separate window by navigating the slides on Prezi.com.

For a rundown on how to host WordPress on Azure with the new scaffolder solution which was introduced this fall, check out the full WordPress on Windows Azure: Single-Site Deployment tutorial.

Tutorial: Your files in the Cloud with the Windows Azure Storage for WordPress plugin

So you have a WordPress site with a decent amount of traffic. That’s probably causing some serious pain for your server. With a lot of traffic comes a heavy server load. And most of that load is probably due to image files uploaded to your site.

The solution to this is to put your images and other media files elsewhere – most notably in some sort of CDN (Content Delivery Network) or on a cloud service.

In this tutorial I’ll show you how to use Windows Azure Blob storage to host all your media files from any WordPress site, whether it’s hosted on WordPress or somewhere else on the web. It’s all done with a great little plugin called the Windows Azure Storage Plugin available from the WordPress Plugin Directory.

To follow this tutorial you need four things:

  1. A Windows Azure account (get a free trial here)
  2. An Azure companion like CloudXplorer
  3. A WordPress powered site hosted somewhere on the web
  4. The Windows Azure Storage Plugin

Step 1: Set up a storage account on Windows Azure

Setting up a storage account on Windows Azure is pretty straight forward. Basically you just log in to the Windows Azure Portal, click New Storage Account and follow the instructions. If you need a more detailed rundown check out my article on how to host WordPress on Windows Azure, in particular step 1b.

Step 2: Prepare a folder in your storage account with CloudXplorer

What we’re going to do is redirect all the files uploaded from WordPress to be stored in the Windows Azure Blob instead of in the regular location (which is under wp-content/uploads). To do this we first have to create a folder under the Windows Azure Storage Account that we can direct the files to. Because Windows Azure is a cloud service, the folder system cannot be accessed like you would if it were an FTP server. Instead we have to use a cloud companion to get access to the space and create the folder. CloudXplorer is a free companion for Windows that will help  you do exactly that.

After setting up your Windows Azure Storage Account and installing CloudXplorer, go to the Windows Azure portal and find and copy the Primary Access Key for your storage account by clicking the button in the right hand column:

Primary Access Key

Now open CloudXplorer and click File -> Manage Accounts. This brings up a new dialog. From here click New and pick Windows Azure account:

Create new Azure account

In the next dialog insert the storage account name (the one you defined when setting up the storage account) and the primary access key for the storage account:

Windows Azure Account InfoWhen you are inside the new storage account, create a new directory (in Windows Azure directories are called “containers”):

Create new containerFinally, right click the new container and select Properties. From here go to Policies and set Access Control to Full public read access. Otherwise only you will be able to see the files uploaded:

Change accessNow you have a folder WordPress can send files to.

Step 3: Set up the Windows Azure Storage for WordPress plugin

If you haven’t already done so, log in to WordPress and install and activate the Windows Azure Storage Plugin. Once that’s done, go to Settings -> Azure Storage to open the administration window.

From here you can insert the storage account name (same as before) and the Primary Access Key (also same as before). Just like with CloudXplorer this allows WordPress to talk to the Windows Azure Storage Account.

After entering the name and key, click Save. This will allow the plugin to talk to Windows Azure and when the page refreshes the Default Storage Container box will be populated with the containers (folders) in your storage account. Select the container you created using CloudXplorer and click Save again.

If you want to you can get fancy here and set a CNAME to mask the location of the files. If you don’t do that the URL to your files will be something like storage.windows.azure.com which isn’t all that nice or meaningful.

Finally, check the box at the bottom that says Use Windows Azure Storage when uploading via WordPress’ upload tab. This will cause the plugin to take over the upload functions in WordPress completely and all files will now be pushed to Windows Azure. Click Save to finish the job.

With the settings complete, upload an image file either from Media -> New or by creating a new blog post and adding an image. When the image is uploaded, check the URL and see that it’s now stored in the Windows Azure container. You can also use CloudXplorer to navigate to the container and see the files.

The great thing about the way this plugin is set up is that it co-opts the native media uploader function in WordPress. As a result all the regular media behaviour you find in WordPress continues as before. The only difference is you are now hosting your media files in the Windows Azure cloud with all the performance benefits that entails.

That is all! Try it out and report back in the comments below.

Selling the Message: How to get from Occupation to Social Change

The world is facing both a financial collapse rivalling that of the Great Depression and political upheaval akin to the riots of 1968. In this turbulent environment it is imperative that those wanting to enact change upon the world learn from the past and adopt policies that move us forward, both in their actual policies and how they approach change.

The biggest danger facing a movement like #occupy or the many uprisings in the Arab world is that rather than changing the world for the better they are just replacing one oppressive system for another. Political change should never happen through force of one group against another but rather consensus and pragmatic discussion. We have an opportunity here to do something together to make a more viable future for everyone. But that requires that everyone participate, whether they are the 99%, the 1% or somewhere in between.

In an earlier part of my life I was a politician. I had ideas, ideals and a strong will to enact social change on my community, my country and the world. And to some small extent I like to think I did. But more importantly my time as a politician taught me some hard lessons about how the world works and how to go about enacting change in the world. And though frustrating, ideologically challenging and often counter-intuitive, these lessons should be the very corner stone of any social movement wanting to make a difference in the world.

They are:

  1. Work from Within
  2. Speak the Language of Your Oppressor
  3. Know that Your Views are Extreme
  4. Strong leadership is vital
  5. Create a political platform
  6. Be pragmatic and think long term

Just before I continue I must warn you what I am about to say will probably make you angry. That’s part of the problem, and can also be part of the solution.

Lesson 1: Work from within

The first and most important lesson is the one hardest to swallow: If you want to make a fundamental change to a system you have to work from within that system and make the changes using its own methods and procedures. This is usually contrary both to the agenda of social movements and also to their premise. Even so it is the hard and honest truth. Save for armed revolt or intentional widespread sabotage this is the only way of enacting large scale systemic change.

To use the #occupy movement as an example: If you want to change laws governing banks, corporations or even electoral systems you must first be in a position to make changes to those laws. This can be done either by electing officials who are willing and able to make these changes or by working your way into the system so you can make those changes yourself. Simply saying the system is flawed and demanding a change will do nothing unless you also have the power to enact this change. This is of course problematic if the root of your complaint is the political system itself, but the cure is the same: If you don’t like the current political system, you must either team up with current politicians or become a politician yourself so you can make the changes necessary.

Call to action: Vote in general elections, vote for the people who share your beliefs, join a political party, set the agenda for your political party.

Lesson 2: Speak the language of your oppressor

This lesson comes from basic marketing: If you want someone to change their mind about something they have to first understand what you’re saying. And I’m not talking about English here; I’m talking about ensuring you are actually talking about the same thing. One of the key problems of radical social movements is that they use language that either doesn’t resonate with or register at all in the minds of their target audience.

A good example of this (and one I get in trouble for bringing up) is feminism. I am a feminist myself (and yes, I’m a guy) but even I have a hard time accepting the vitriolic polemic presented by many in the feminist movement. The reason is much of what is said is rooted in anger, bitterness and all out attacks on “the other”. This creates a chasm between the oppressed (women) and their oppressor (men) and makes it hard for the oppressor to cross over and see the world from the oppressed point of view. The key to winning the war on gender inequality lies in making men see and understand the world from women’s perspective. Only when the oppressor empathises with the one he oppresses can he see his own faults. But this requires that the feminist movement speaks the language of their oppressors and meets them at their level. And that goes against the very nature of the movement, and most movements, which states that the oppressor should understand that they are in the wrong because they are in the wrong.

If you were selling a product this would be crystal clear: To make people feel they have to by the latest and greatest you have to speak their language. The same is true for social movements: Unless you communicate your message in a way your target audience – the people who are doing you wrong – understand, they won’t buy it and they’ll simply ignore you.

Call to Action: Learn the language of your oppressor, speak to them on their terms, use their own language, methods and data to make them empathise with your cause and see that they are the cause of your problems.

Lesson 3: Know that your views are extreme

Social movements almost always hold extreme ideals, largely because it is the people with the most extreme views that feel the most left out and thus feel the strongest need to be heard. This is why terms like “the lunatic fringe” and “the loudest voice in the room” are often attributed to social movements as a reason to ignore them. But even if the social movement itself is extreme, many people will sympathise with most of what the movement has to say, just in a less extreme way. Therein lies the problem:

If a social movement insists on being extreme and ignores more moderate views and approaches it will invariably alienate the large group of people who agree and sympathise with the overall message. As a result the movement will be marginalized because it is not willing to make concessions and the message is never taken seriously.

The only way to ensure wide spread support is to adopt a moderate version of the general ideals of the movement. By taking the moderate route you ensure that a larger group of people will want to join and you keep the overall goal of social change in focus. This usually results in the most extreme end of the spectrum cutting lose and starting its own group denouncing the main group as traitorous. Be that as it may: The end result will be a social movement with clout that people can actually identify with. The bottom line is simple: If you are too extreme, only people who are just as extreme as you will join. And most people are not extreme.

Call to Action: Imagine a scale from 1 (not extreme) to 100 (absolute extreme) and plant your policies somewhere between the 65 and 85 mark, ensure that the leadership of the group is not dominated by extreme elements on one end or the other, include the extreme elements but only as a minority, pursue a moderate message at all times.

Lesson 4: Strong leadership is vital

This is another difficult lesson, especially for left wing movements: Without strong and cohesive leadership your group is doomed to failure. The reasons are many:

  • The movement must have a clear voice – and that voice can only be communicated by a leadership group. If there is no leadership media and others will ask the general population of the group for information and that information will invariably be diluted and incorrect. A clear and concise message communicated by leaders is paramount.
  • Without leadership it will be impossible to formulate a goal and move towards it because fractions and individuals will adopt their own special version of the overall goal and pursue it instead.
  • People need someone to look up to. Without a charismatic leader that people trust and look up to the group will not have a focus and will start breaking into fractions.
  • Leaders are accountable. A group without a leader is hard to address, and internally it is impossible to decide who makes decisions and who is accountable when something doesn’t go according to plan. A democratically elected leader can both ensure that the movement as a whole moves towards their common objective and be held accountable when things don’t go the right way.

The problem with social movements, and left leaning social movements in particular, is that they tend to see leadership as a pathway to corruption. This is often a key part of their gripe as is the case with the #occupy movement. The goal of the group is therefore often a move towards absolute or direct democracy. Though this looks good on paper it is a recipe for disaster. Absolute democracy – where everyone votes on everything and there is no leadership – is doomed to failure even in small groups because not every member has the time, capacity nor knowledge to make an informed decision on everything. Furthermore the group will be faced with countless decisions that have to be made on the fly, something that is impossible to do if everyone is to be consulted.

The only way to ensure that the group remains cohesive and moves towards its stated goal is to create a democratically elected leadership committee that is left in charge. This committee has to have a platform on which to base its decisions (lesson 5) and must be held accountable to that platform. To ensure accountability remains the group should introduce set election periods at which time the entire committee is dissolved and re-elected.

Call to Action: Hold elections for a leadership committee, set down firm election periods, hold leadership accountable through elections.

Lesson 5: Create a political platform

For the movement to have an impact clear goals must be formulated and acted on. Only with clear goals in the form of a political platform can a plan be created on how to enact the change demanded by the group. Once a political platform is created outsiders can see what the group is about and decide to join and outside elements like other political organizations, the media and others can get a firm understanding of what the group wants and whether or not its goals are acceptable and something that should be supported. In addition, with a political platform as a base the movement can hold their leaders accountable and individual members of the movement can refer to the platform when in doubt about what to do next.

The creation of a political platform is generally done at a general assembly. The overall process is as follows:

  1. Everyone proposes policies
  2. Policies are grouped into defined sub-sections
  3. Committees are democratically elected to deal with defined sub-sections
  4. Committees look over all proposals in their section and conform them into a set of proposals
  5. All proposals are taken to a vote on an individual basis by the general assembly
  6. Political platform is defined based on proposals that are voted in

The movement can decide how often to revise their political platform. This should be done on a time basis (every 6 months, every year etc) to give the elected leadership committee time to enact the policies.

Call to Action: Hold general assembly, open the floor for policy proposals, create sub-committees to organize proposals, vote on individual proposals and political platform.

Lesson 6: Be pragmatic and think long term

The final lesson is both obvious and infuriating: If you want to enact large scale social change you need to be pragmatic and think long term. Unless you are planning an armed uprising things will not happen over night, nor should they. Rapidly implemented social restructuring always ends in chaos.

When I say “be pragmatic” I mean that you have to accept that the general population needs time to understand your demands, think about how they will affect their lives and decide whether or not they support them. You also have to take a step back and turn a critical eye to your own demands to see if they are reasonable or if you are demanding too much. Finally you have to seek consensus with your opponents and aim for acceptable compromises. This is hard to do when you have set ideas about how things should be, but getting 50% there is better than getting nowhere.

This links directly to the thinking long term part: If you have a pragmatic long term approach and seek consensus along the way you are more likely to succeed in implementing your goals. But more importantly you’ll have a chance to test out your policies and see if they are really as great as you firs envisioned. The irrevocable truth about political revolutions is that they never end up the way originally intended because our ideals do not correspond with reality. And due to our lack of a crystal ball and a working time machine we can’t actually see the future result of political change. Slow steady change gives us a method for constant course correction and a better chance of getting things right.

Call to Action: Be critical of your own ideals, seek consensus, set out long term goals and stick to them.

Epilogue

We are all in this mess together, and it is only together we can change it for the better. Together is our only option.