The last few months have been interesting to say the least. To start with I was attending my third Google I/O , arguably one of the biggest developer events in the world. It is always quite an experience to see how the future of tech is shaping up.
Also, my wife (who I call my CEO) and I joyously welcomed our first child to our family (our little Startup).
Our Startup, the baby boy, promptly declared that he was not satisfied with the position of director on the board and after subjecting us to a couple of sleepless nights made a case at an extraordinary board meeting to be made chairman of the board. The motion was quickly passed and now he appears to be settled and happy in his new role of having the final word on all aspects of the company (family) affairs.
In fact I had to take advantage of the fact that he is currently napping to start drafting this post. It has been an awesome and interesting experience. One thing I can relate it to is having a new smartphone that gets automatic OS updates every 12 hours. So you are constantly discovering new features.
Like the title of the post suggests I want to invest this stolen time in talking about 3 event types (Codelabs, Hackathons and Contests) that contribute to the lifeblood of any tech community.
If you have been involved in anything tech in Africa in the last 4-5 years, you must at worst have heard these 3 event types mentioned at least once or at best attended or participated in at least one of them. I want to talk a bit about them today because every time I mention them or I hear people refer to them I find that everyone has a very different understanding not necessarily of what they are, but of what they can (or are meant to) achieve.
I would like to put down a few of my own thoughts on these events. I will be leveraging on my experience (limited I might add) of participating in, facilitating and organizing a number of codelab, hackathon and contest events.
First let’s refresh our minds as to the basic nature of these 3 initiatives.
My favorite description of a codelab is:
"CodeLab is an online program for learning and practicing computer programming."
I would go further and remove the online part and say that a codelab is a program for learning and practicing computer programming since this can be (or should be able to be) done whether there is internet access or not depending on if the technology being used requires internet access to work or to be used.
So that's what a codelab fundamentally is. It is fundamentally some code that helps you understand how a particular technology works.
The technology could be as basic as a simple algorithm (like sorting or searching) or a more complex technology like Cloud computing or a vendor specific API/Platform like Android or the Google Drive API. This code is usually arranged in such a way that you need to do a little work e.g. typing in some extra lines of code or doing some configuration to get the code to run and in the process you learn more about how the technology works. The codelab should also contain instructions on how to get this done.
Think about it as the chemistry practicals you did at school but this time instead of beakers and pipettes you have your computer and instead of all sorts of chemicals , you have code.
There are tons of free and open codelabs out there for almost any technology you can think of so knock yourself out.
Now there are also codelab events, which are events where people come together (or are called together) to learn more about a particular technology by going or being taken through a particular codelab (or set of codelabs) together.
The typical format is as follows:
Someone, or some people who have experience with the technology in question, gives a brief overview of the technology and then optionally works the attendees through the codelab so that they can see what it takes to get the code up and running.
Next the attendees attempt to get the code up and running themselves, with the guidance of the experts/facilitators and at the end of the day hopefully everybody should have successfully run the code and learnt something.
If there is time and some extra resources available, it is not unheard of to have some sort of mixer after the event where the attendees can network amidst finger food and drinks. Everything should not take more than 2-3 hours, 4 at the most if you are having a mixer.
I have personally run a successful codelab in one hour and for my definition of successful I will refer to a statement by my former colleague Bob Aman who once said that:
At the end of a successful codelab, most of the people who attended should leave with at least one of two feelings: first being the feeling of having learnt something and second being the feeling of having achieved something.
Again think of it as a chemistry lab practical where you succeed in creating salt and water by mixing an acid and alkaline and the litmus paper turns purple.
Wikipedia and its accompanying references do an awesome job of describing what a hackathon is and what its all about but just in case you are too lazy to read I will state it here:
A hackathon (also known as a hack day, hackfest or codefest) is an event in which computer programmers and others involved in software development, including graphic designers, interface designers and project managers, collaborate intensively on software projects. Occasionally, there is a hardware component as well. Hackathons typically last between a day and a week. Some hackathons are intended simply for educational or social purposes, although in many cases the goal is to create usable software. Hackathons tend to have a specific focus, which can include the programming language used, the operating system, an application, an API, or the subject and the demographic group of the programmers. In other cases, there is no restriction on the type of software being created.
The below article on WIRED also does a good job at describing a hackathon too. I recommend you read it.
Software developer contests (to give them their full name) come in different varieties but in the end they all have the aim of selecting the best software from a set of submitted software.
Best in this case depends on criteria specified by the organizers of the competition. These contests could be organized by a tech company e.g. Google, Microsoft or Samsung or by a community e.g the Africa Android Challenge.
Contests could be either based on a particular technology, platform/language, problem space or on features of the resulting software.
Personally I like to divide developer contests into two categories:
Those where contestants are forced by the contest rules to create something for the purpose of the contest.
Those where they are not and so can submit software that they built 10 years ago or that has been in use for the past 2 years.
Personally, I prefer the first kind because in my opinion that is where people learn the most by pushing themselves to and beyond their limits. It also brings new content into the ecosystem.
Note that it is possible to combine two or more of the above to achieve different things.
For example, you can have a codelab before a hackathon if the aim is to hack based on a particular technology or API so that attendees can familiarize themselves with the technology in question before they start hacking.
You could also combine a contest and a hackathon by awarding a prize to the “best” result of the hackathon, again best in this case depends on the criteria set by the organizers. You can also chain the three of them up by having a codelab before the hackathon and then awarding some kind of prize or have a series of codelab and hackathons over the duration of a contest and so on.
Now that we have gone through the three event types, let us discuss them a bit with particular reference to perceptions and statements I have come across in various face to face discussions, online articles and discussion threads on social media.
Hackathons Produce Bad Code?
There is a school of thought that discourages hackathons because it is generally believed that code produced from scratch in record time usually while consuming beer and doritos (and sometimes with little sleep) while chatting with friends/acquaintances can never lead to anything useful.
I refuse to subscribe to this school.
Yes, hackathons rarely produce stellar code that is ready for the production server, unless of course the purpose of the hackathon was to fix bugs / clean up code or the developers in question are from mount Olympus (trust me, there are developers like that, i know a few).
In my humble opinion , most times, the best that you can and should expect from a hackathon is a proof of concept or a working prototype.
Woe unto you if you believe that hackathons will guarantee you production ready code, again unless the hackathon or a good portion of it is dedicated to code fixing not code creating. Normally, the real work starts after the hackathon.
Apart from producing great prototypes and POCs (Proof Of Concept), hackathons are also a great way to accelerate progress on an existing project you are working on.
It is like the same way being in a library motivates most people to read, being in a coding environment with other developers motivates people to work beyond their normal capacity so next time you feel that coding alone in your room is not getting you anywhere as fast as you would like, look for a hackathon near you to attend….or better still organize one. You would be amazed at how much progress you will make.
Hackathons like all the initiatives we are discussing in this post are also a great way to meet people of similar interest.
Serious Developers & Tech Entrepreneurs don't do Contests?
There is another school of thought that says that serious developers or entrepreneurs do not take part in contests because frankly they are a waste of time , are mainly hype and do not produce amazing apps.
To this I say; it depends on
What the people who organized the contest had in mind when they organized it.
What the people who are taking part in the contest want to get out of the contest.
What your definition of a serious developer/tech entrepreneur is.
Firstly , the motivation behind organizing a developer contest is everything because it determines to a large extent how the contest is organized and what opportunities are available for the the people who chose to compete.
Some contests are purely marketing events to create general awareness, some contests are designed to educate the contestants or encourage them to educate themselves on particular technologies , others are a mixture of the two.
Like I hinted earlier I am partial to contests that force people to create something new because there is a greater chance of education and growth on the part of the contestants such that even if they do not win the grand prize, they definitely gain something valuable in terms of knowledge and skillset.
Secondly , I believe that what people get out of a contest depends on what they want to get out of it. The way I see it , a developer contest can serve different purposes to different types of developers.
For the startup or established company, the contest could be an opportunity to launch a new product or feature by helping you overcome inertia. It does this by offering you an incentive to start (the chance of winning a prize) , a deadline you can work towards (contest submission date) and honest feedback on your new product or feature through the judges feedback (I believe a good contest should have judges feedback).
Even if you do not win, you have at least started on that new product or feature that you have been planning for the past 3 years. For an upcoming or student developer, a contest offers you an opportunity to improve yourself by learning under pressure (one of the best ways to learn). If you have never created production level code before , this will be the closest you will come to doing so.
The deadline and the opportunity to win a prize is great motivation to stay awake for nights on end hacking away and learning all the way. Something that is very hard to do when there is no pressure. And even if you do not win, you find that your skillset and knowledge will increase by at least a factor of 2, making you readier for the job market than you have ever been.
For platform based contests , they provide a unique opportunity to get introduced to new technologies and APIs for those who are interested with a chance of winning something for your trouble. It is not usually a good idea to leave other productive work that you are doing to take part in a contest for contest sake, but if you fall into any of the above categories, you may want to take another look at ongoing contests.
Thirdly, what is a serious developer or entrepreneur to you?
I know a number of serious developers and startups who have caught their big break through contests.
Examples are Fans Connect Online , creators of AfriNolly who created the product during the Android Developer Challenge for Sub Saharan Africa and Collabspot from the Philippines who are products of the Google Apps Developer Challenge, or Ultradox and Neutron drive also products of the Google Apps Developer Challenge. There is also FunnyLeni from the stables of INITS. These guys went into these contests with a plan and made it work for themselves.
This is not to say that people who belong to the earlier stated school of thought are just blabbing though, they do have a point in that there are people who have declared themselves career contest developers, who move from contest to contest year in , year out making a living off the prize money. While this is a perfectly legal business model, I would only say that if you are one of this group be sure to reassess your motives ASAP as you just might achieve more if you decided to focus your energies on building something sustainable.
Contests do not Produce Amazing Apps
I will have to agree with one aspect of the above with a slight remix:
Contests generally do not produce amazing apps, immediately after the contest. They produce POCs and prototypes, in a few cases very good POCs and prototypes, that can actually be put in the hands of an end user.
I have found that the real value in the apps usually comes out about 3-6 months AFTER the contest has ended, because like I said regarding hackathons, the real work starts when the contest has ended, you have your POC or prototype, and you you have valuable feedback from the judges in the contest and other people who have taken a look at your work.
Then you go back to the drawing board and turn that POC/prototype into a PRODUCT or give it up altogether if it does not make sense, or if you did not believe strongly enough in it in the first place.
Sadly only about 10% (a guesstimate) of developers who take part in contests actually do this. All the examples of successful products from the contests I talked of above truly came into their own about 3-6 months after the contests that initially brought them to life.
I would like to hear your thoughts on what I have said so far, I get the feeling that there are a lot of aspects still uncovered. Let me know what you think and maybe we could look at them in another post, or in an online discussion.
This post has mainly looked at things from the perspective of the participant. Next time, we will examine things from the point of view of the organizer and try to answer questions like which initiatives make sense, for which purpose and so on.
Hopefully that should be a much shorter post.
Cover Image Credit: Erik Hersman
Chukwuemeka Afigbo is an African tech enthusiast based in Lagos, Nigeria . He is currently a Program Manager with the developer relations team at Google helping to grow Africa's developer ecosystem. Follow him on Twitter.