Lessons From a Successful Hackathon

I was part of a group that took part in the World Port Hackathon in Rotterdam from September 4 to 5. The theme of the event was to develop apps or concepts that improve Logistics and Connectivity, Infrastructure or Safety & Security at the port. There were about twenty teams participating in the event and our group Captain Co & Co won the Overall first prize as well as a nomination to participate in Innovation Lab. This article discusses some things I learnt by participating in this event.

You can see my team members with the €1.500 and Nomination Launchlab placards.
You can see my team members with the €1.500 and Nomination Launchlab placards.

First, have a good idea. Our group came up with the idea of making a chat app for port workers. It was an exciting idea. I didn’t know of any other such application on the market and chatting is something we do ubiquitously in the IT world. It was great to introduce such a concept to the shipping industry.

Second, it is important to delegate tasks effectively among team members. There were eight members from my team taking part in the event, four of whom were developers. Among us developers, we split the task of creating the app fairly quickly as the project started. For example two developers developed bots, one took care of the back end server and one handled the front end. The remaining team members handled other aspects like graphics design, testing, idea generation, some programming, getting information from relevant officials at the port concerning data, port processes, etc. and feeding that back to the team.

Third, plan your work carefully. Good communication is essentially when hacking. For example, I remember going away with one of my colleagues to a quiet place to discuss chat APIs, including what format to put data in when communicating between the server and the front end. We did this before starting to code. As such, we both knew how data will flow and could create our parts of the app in parallel, integrating the finished results fairly quickly afterwards. I believe other members had similar plans.

Fourth, you must work hard! Good things come with effort. We put in a good chunk of hours into our app. I remember seeing some other teams looking so relaxed and wondering what kind of apps they were building. As an official at the event later mentioned to us after the event, we looked like a CSI team while we worked. We spent several hours on the project on that Friday and even when the port closed for the night, we went back to our hotel and continued working on the project late into the night. It was rigorous, but fun!

Fifth, do not try to write pretty code. Write it fast and make it work! A hackathon is a hackathon, it’s not a time to write the best looking code. We developers had to create a chat app from scratch that met certain specification, including pulling port-related data, in a relatively short time span. As such on my part I had to write the shortest possible amount of code to get my part of the app working and nothing more. There was no time for fancy things like elaborate frameworks, automated tests, etc. Testing was manual.

Sixth, keep it simple and clean but make sure it works. This is very important in succeeding in a hackathon. Our team had to think carefully of what features we would be able to to our chat app add given the time constraint and available man power. Also, while we produced several interesting features in our app, there were times when we found that a proposed feature didn’t look or work as good as wanted it to. In such situations, we simply left out the feature. So, very important: If you are hacking together an app and one of your features doesn’t look nice, don’t be afraid to remove it. In short, we had to make sure that every feature presented worked. Our chat app was one of the few apps in the entire competition that actually did something; i.e. we could actually chat with it. Many other competitors just presented concepts, diagrams and so on.

Seventh and finally, present your product enthusiastically. We were very cheerful in our presentation of the end product. Our presenter spoke with confidence and all of us team members participated in the presentation by taking part in the chat right there and then.

In conclusion, I had a lovely time taking part in my first hackathon and being on the winning team. I learnt quite a few things about successfully hacking together an app within a short time including the importance of a good idea, delegating tasks effectively, careful planning, putting in your 100%, coding quickly, keeping it simple and effective presentation. Hope you enjoyed the read.

Managing Expectations at Work

Managing expectations is something a Software Engineer needs to practice routinely. In fact, this applies to all careers, not just Software Engineering. Being a Software Engineer though, it’s easier for me to relate this to you from that perspective.

So, what does it mean to manage expectations? It means that before promising to provide a service or do something for someone, you and that person must have a clear understanding of what exactly is to be delivered and that you deliver on your promise. In this article I will discuss a few qualities Software Engineers must have in order to manage expectations more easily.

As an ambitious Software Engineer new to the trade, there’s a tendency to over-promise. When confronted with a project/task/problem, etc. there’s an urge to look at it and quickly go “Oh, that looks easy. I can do it in one hour.” What then happens is the Engineer gives the company management an estimate of one hour. The company could then give its clients or customers an ETA based on the employee’s estimate. Then the project starts. Now that the employee has to write serious code for it, he/she takes a thorough look at the requirements and discovers to his/her utter bewilderment that it may take a day! What happens then? Assuming all available resources have been expended, the project will generally get delivered late, breaking trust of the client/customer in the company and the company in the employee in question. In this scenario, the employee has not managed expectations properly. So what can Software Engineers do to manage expectations better?

A very important quality one needs in order to manage expectations properly is being able to ask questions when in doubt. When you are asked to deliver a feature or do a service and you aren’t really sure of how it is meant to work, don’t quickly cook up some assumption and rush off with it. Rather, ask a question or two. Don’t be afraid to look stupid for not understanding what is required. Even if you feel your question may seem naive, you should still ask it up front and gain understanding, rather than assume and potentially fail to meet expectations. Pardon my French here, but there’s a very good saying that sums this up. It goes as follows: Assumption is the mother of all fuck ups. So, in short, always ask questions when in doubt.

Also, you must be able to raise flags ASAP. When you promise to deliver something at a particular time, e.g. say you want to create a website X and have promised to deliver it in 2 days. What happens if after the first hour you discover a big problem with the task which you didn’t anticipate? Do you panic and start figuring out how to fix it on your own? No! A good communicator must raise flags with appropriate stake holders as soon as problems are found during task execution. As such, you should let your manager know as soon as you run into non-trivial obstacles. When you do this, it is easier to agree quicker on an appropriate course of action perhaps in terms of finding an alternate solution or letting a client know early that a project may be delayed. The earlier you raise flags, the better.

Furthermore, you need to know your strengths and weaknesses and be honest about it to others. If you don’t know about how to go about satisfying a need or approaching a problem, don’t act like you know. For example, what do you do if you are asked to say how long it will take to create some feature X, Y, Z which you have never even heard of or are only very vaguely familiar with? A wrong approach will be to take a superficial look and say, “Well, I sort of think it might take X days.” A more appropriate response should be “Well, I’m not familiar with this feature. Let us allocate some time to research on it and figure out how best to approach it and how long it will take.” Another example of this is in the aspect of deciding if to take on a task at all or not. If your boss asks you to perform a certain task and you know that you are weak at doing tasks like that and also know a colleague who is stronger at that sort of task, rather than say “Yes sir!,” do the task and complete it badly, a smarter response is “I can work on this task, but it may take me a while to do it. Person X here may be more suitable to do the job as he/she is better at this sort of task.”

In addition, you need to be able to give yourself a margin of error. If you are asked to quote how long it will take to perform a task and you have a gut feeling it could take say 2 hours to do it. Do not for the love of God say it will take 2 hours. What if there is some aspect of the task you haven’t yet considered and will only see once you start working on it? You need to be able to account for uncertainty. So a smarter estimate might be 3 or even 4 hours. So, don’t try to impress your boss with how quickly you think a task can be done, only to fail at it when actually asked to do it. In short, you need to give yourself a margin of error. This is especially important when estimating tasks on the fly in sprint planning meetings. Now, don’t go around doubling all your estimates in meetings. The margin of error you add to your estimates should be commensurate to how much uncertainty you have about the task at hand. So, for trivial tasks, you can afford to give estimates that match your gut feeling, but for bigger or unfamiliar tasks, you should increase your estimate by a larger factor. When you make a habit of accounting for uncertainty, you will find it significantly easier to complete tasks within your given time estimates and keep everyone happy.

One more things that is very important in managing expectations is being thorough. Before you promise to deliver something in a certain time, you need to make sure as much as possible that you have thoroughly analysed the task, thinking not just of regular use cases, but edge cases. In short you need to learn to ask lots of “What if” questions.

Another important point is that you need to be empathetic. Put yourself in the shoes of the person you want to perform a service for and honestly think about what he/or she will expect. Then, think of what effort it will take to perform the task and let that guide you on your promise to such client. Empathy is very important especially in places where you need to make assumptions for yourself because even though I have mentioned earlier that you should try not to make assumptions, we know there’re always some places where we Software Engineers must use our best judgement to assume things. So, if you must assume something about a service you provide to your client, think about it from your client’s point of view.

A final point is that you need to be willing to go an extra mile to complete tasks promised. When everything mentioned above fails, you must be ready to put in extra effort to get things done on time. This may be in the form of working longer, harder, faster or smarter. Ideally we should be able to deliver on our promise without too much extra work, but we know that sometimes things just don’t pan out that way. So, when the going gets tough as they say, the tough gets going.

In conclusion, I’ve talked about ways people, especially Software Engineers can manage expectations at work. This includes things like asking questions when in doubt, raising flags early, understanding one’s strength and weaknesses, giving margin for error before making promises, being empathetic and going the extra mile to deliver on promises. I hope you find some of these useful. Take care!

True Friends

True friendship is something we all aspire to have in our lives. You can’t place a price on friendship as the intervention of a friend can very well be the difference between success and failure or even between life and death. Of course the individual is very important. Nevertheless, there is only so much you can do in life without support from your friends, be it family, spouse, children or other friends you pick up on the course of daily life. So, being someone who has travelled a bit and had the good fortune of having some true friends, I will share my thoughts on what I consider true friendship. Here are ten questions I recommend asking yourself when wondering if a person is your true friend. This is by no means exhaustive and is subjective, but may serve as a decent guide.

1. How often does the person ask after you? If he or she checks up on you sufficiently frequently and consistently whether in person or via various social media, there is a good chance he or she is a friend. Otherwise, think twice. Of course, this is assuming you also make an effort to check up on the person.

2. How often does he or she keep his or her promises to you? Does he or she make conscientious effort to keep promises or does he or she frequently keep you hanging. A person who keeps promises likely values you as a person and is more likely to be your friend than someone who doesn’t.

3. How much time is he or she willing to take out to be with you? Try calling this person to hang out for drinks for example. Is he or she someone who usually enthusiastic about being around you for example, or does he or she seem adept at cooking up the most curious excuses for not attending. True friends take out time from their busy schedules to hang out with each other.

4. How willing is he or she to help you when you are in need? An old saying goes: A friend in need is a friend indeed. There are many friends who rejoice with you when things are rosy. They will praise you like no other when they have something to gain from you. No sooner do you get into trouble than they disappear rather inexplicably into thin air. So, is he or she someone you can call at twelve midnight should you have problems and expect to get moving? If so, you need no more proof that you have a true friend in him or her. Otherwise, think twice.

5. Does he or she caution you when you mess up? A true friend is not afraid to caution you or even tell you off when you go down a slippery slope. He or she is likely to be an adviser and confidant, quick to point out areas where they feel you are better off. So, here’s a simple experiment to try. Do something silly knowingly in the presence of this person. How likely is he or she to call your attention to it? If he or she frequently remains as silent as a mouse, then think twice.

6. Does he or she celebrate with you on events you find significant or on your achivements? A true friend is likely to remember your birthday for example. When you make that breakthrough in whatever field of endeavour you dabble into, who pops champagne with you and makes you feel really good about your achivement? You got it, true friends.

7. Is he or she keen to share insights with you that could better your life in some way? Someone who easily and freely gives you tips on things you can do to accomplish your goals even without asking is very likely your friend. Of course, not every insight a friend gives you will make you a millionaire or even be a good tip in the first place. However, you will usually know if he or she has good intent.

8. Does this person know where you live and has he or she cared to visit? Here is an experiment. Invite this person to your place for lunch on a weekend. What is he or she likely to say? The home is a very important place. It is a place where most people are most at ease in. We all know the cliché: There is no place like home. A person who is enthusiastic about visiting your home is likely a friend. He if or she on the other hand frequently cooks up excuses to not come, think twice.

9. Is he or she honest? Does he or she tell you things they way they are or does he or she try to sugar-coat things? A true friend is likely to let you know in no uncertain terms when he or she does not like something and otherwise. Watch out for consistent honesty in anyone you venture to call your true friend. If he or she lies to you with impunity, watch out!

10. How often does he or she invite you to celebrate his or her successes? When you succeed in that grand endeavour, first you pat yourself on the back for a job well done, right? Then you inform your family to rejoice with you if they are your friends, right? And after that you consider informing your true friends to rejoice with you, don’t you? So, when this person succeeds in his or her goals, if he or she invites you to celebrate, then he or she is very likely your friend, otherwise, you may want to reconsider.

That’s a wrap. If you have that special someone who satisfies several or all of the criteria above, then you very likely have a true friend. Cherish him or her every day and most importantly, be a true friend to others.

An Interesting Rivalry: Facebook and Google

A few days ago, a good friend of mine invited me to a wedding. I was checking the details of the wedding location on Facebook when I noticed to my delight that Facebook displayed a map of the location below the address. How nice of Facebook to make it so easy for me to visualize locations. So I thought, with a bit of scepticism, what if the map isn’t right? After confirming with Google maps, I was happy to know Facebook’s map was accurate. It was at this point I made an interesting realization: Facebook does not use Google maps! Facebook uses Bing instead. We all know Google is the king of maps, so what prompted Facebook to avoid Google. Surely, there’s more to this than coincidence. So I did a bit of digging.

It turns out that Zuckerberg had had talks with Google in the past about possibly letting Google handle search queries Facebook can not handle itself, but he wasn’t satisfied with Google’s terms of service. Apparently, Google’s privacy policy was too inflexible for Zuckerberg’s liking. Microsoft, on the other hand, was more flexible in their privacy terms. Facebook wants its search suppliers to be able to remove Facebook users’ details quickly if need be based on user privacy settings. So, it will seem that Google takes its mission statement: to organize the world’s information and make it universally accessible and useful much more seriously than keeping data private for business customers. Well, we can’t blame Google much for this. What else will you do if you are the biggest Search Engine company in the world? As a side note, how much of the world’s internet traffic does Google actually handle? According to Forbe’s article ‘Fascinating Number: Google Is Now 40% Of The Internet’, Google is responsible for 40% of internet traffic. To get a more visual context of this figure, consider this: On August 16, 2013, all of Google services were down for a few minutes. Here’s what the graph of global internet usage looked like in that period.

google-downtime

Courtesy of GoSquared in their article https://engineering.gosquared.com/googles-downtime-40-drop-in-traffic

Also, it turns out that Microsoft is a Facebook investor, which must have given it some leverage in negotiating with Facebook. That’s the way, Microsoft! Do your thing.

Now, having cleared up why Facebook doesn’t use Google for search, I found out something even more interesting. Facebook is testing its very own search engine! Facebook introduced Graph Search in March 2013. Graph search is considered to give you results instead of links like traditional search engines and you can use it to search for places, people, pages, check-ins, objects with location information, posts and comments. Imagine being able to search for people ‘who are single in London and from Nigeria’. If you’re looking for buddies to go watch that geeky movie, you could search for people ‘who like star wars and star trek’ and Facebook will check through your friends list and potentially through the rest of its 1 billion user base to find answers based on what your friends have shared with you privately and what Facebook users share publicly. That this could take a chunk out of Google’s search shares should be quite obvious. It appears that English users in the USA have now been using Graph Search since August last year. Hopefully we here in the UK get to try it out soon. Facebook is most likely looking to get more and more of its users to become comfortable searching for things on Facebook, starting with social entities, which Facebook is already well known for. I assume they believe it’s only a matter of time before they roll things out into general search. Eventually, Facbook could also make a killing in advertising revenues as businesses fight tooth and nail to rank highly on Graph Search.

So, what can Google do about it? Well, Google will need to continue what it’s already doing – engaging its huge user base. From the recent Google I/O we can see that Google has big plans for the future, from integrating Android into smart watches, to cars – Android Auto, to improving the OS and user experience on Android phones, to allowing you use Android apps on TV (Android TV), to making it possible to use your cherished Android apps on Chromebooks. Basically, Google plans to make your life revolve around Android in the near future. If things go according to plan for Google, you may wake up a few years from now and think back saying “How did we ever live without Android back in the day?” From what we’ve seen in recent years, Google has been making conscientious efforts to integrate its services, providing a rather seamless experience for users. On my Nexus 4 phone for example, I can start doing a Google search at a tap of a button and the search will be done both on my phone and on the web. How cool is that? The idea is that the tighter Google keeps you around its ecosystem of products, the more reluctant you will be to try out other things.

Nevertheless, Google may want to consider this so-called semantic search method Facebook is using in one way or another rather than just sticking to keywords.

As these two companies continue to innovate and compete, we can expect to see more and more interesting features produced to make our lives easier and more pleasurable. Let’s see what these tech giants have up their sleeves as this rivalry unfolds.