Wednesday, July 23, 2014

Codelabs and Hackathons and Contests.... Oh my!


Hackathon at the iHub in Nairobi


Hey there!
How is it going?
How have you all been?
Thank you for stopping by.
Its been a while since we last hung out, hopefully not too long though.
The last few months have been very very interesting to say the least.
To start with I was at my third Google I/O , arguably one of their 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 (I called her my C.E.O) and I joyously welcomed our first child to our family (our little startup). The 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. Its 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….simply amazing!

So….back to the matter!
Like the title of the post suggests I want to invest this stolen time in talking about 3 event types 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 words 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 the subject, they may be right, they may be wrong...they may also change but what the hell….here goes. I will be leveraging on my experience (limited I might add) of participating in, facilitating and organizing a number of codelab events, hackathons and contests.
First let’s refresh our minds as to the basic nature of these 3 initiatives at least as seen through my eyes.

Codelab Events
First off … codelabs. This is a bit of a confusing one because the word codelab could refer to one of two things:
The original meaning which I got from typing “what is a codelab?” in my favorite search engine is:
CodeLab is an online program for learning and practicing computer programming‘ -- www2.kenyon.edu
I would go further to 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 is fundamentally. It is basically 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. Here is an example of a codelab that teaches you about Chrome Apps and here is Google App Engine with Python. 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.  Many times these events are also referred to as…..codelabs :-). 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.

Hackathons
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.
This article on Wired does a great job of describing a typical hackathon (you SHOULD read it).

Developer Contests
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 and 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. I personally generally 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.

Ok...so now that we have gone through the three items, Lets 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 are bad because they usually 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 because I think that while the second part of this heading may be true, the first part does not have to be. 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, hackathons are also a great way to accelerate progress on an existing project you are working on. Its kind of 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 do not take part in 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 (1) what the people who organized the contest had in mind when they organized it, (2) what the people who are taking part in the contest want to get out of the contest and (3) 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). And hey, 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 ? That depends. 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 are not useful because they 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.

Hackathons , Codelabs and Contests are only for startup/community oriented developers and not for enterprise type developers
The Idea here is that all these communal hacking stuff , contests and codelabs are things that only the wider, new age , entrepreneurial, community , startup types do. In other words its just for the spiders and not the bridge walkers. Developers or software companies who work for telcos or banks or companies that service corporates and conglomerates with licensed or off the shelf software have no business taking part in any of these activities.
To this I say : BIG MISTAKE! You do not know what you are missing out on. I can think of so many reasons why thinking like this is a big mistake but I will mention the top three.
First these initiatives can easily be organized internally to help the company to be more productive. As a CTO of a tech reliant company, nothing stops you from organizing a weekend hackathon, to either meet a deadline or brainstorm/prototype a new product/feature. You could have members of your dev team prepare and run codelabs on their favorite technology for the rest of the team...or have an internal contest to pick the best implementation of a new feature. It all depends on how you want to play it. Trust me, the results you will accomplish may just blow your mind even if it's just for the increased team collaboration that you will achieve or even the creativity that could be unleashed .It could also be a welcome release from the straight jacketed approach that many of such companies use and the beauty of this is that you could implement it for a developer team of 2 or 200.
Another reason is that the externally or community-organized initiatives is a great way to scout new talent, put your name out there so that new upcoming developers see your company as a viable career option and also know what new technologies are out there so that your company does not get left behind by the competition. We all know how easy it is to stay stuck on one technology for many years while the world moves on and then one day you wake to find that someone has eaten your lunch. Even as a developer in one of such companies one day you find out that you have become unemployable , because you are still stuck on technology of 2005 and the only company that can employ you is the company you work for currently...so you are stuck there at their mercy.
The third reason is one I have already mentioned. Participating in these initiatives can help you either launch a  new product or add a new feature to an existing product.
I will add a fourth reason, which for me is the most important, showing up and taking part is an important piece of building a tech ecosystem and strong community. The more the merrier. I believe this is important for the long term sustainability of tech on this continent. Believe me, the company/job/career you save by doing this may be your own.

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 :-).

For now…...I think I hear my chairman stirring….ssssshhhhhhh…..

4 comments:

  1. Very nice post and answers some of the very many questions I had in my mind. Now I have a new mindset to this

    ReplyDelete
  2. This is indeed one blog post I would love to re-read! Very interesting...thank you for sharing your thoughts...the descriptions of the 3 types of events have actually broadened my thinking and I share the same thoughts as you do towards the different perceptions that people have towards developer contests etc..Hoping that the frequency of the automatic OS updates are decreasing as days pass by :D Enjoy parenthood :)

    ReplyDelete
  3. This comment has been removed by a blog administrator.

    ReplyDelete