Wednesday, May 30, 2012

Developer and client wars - choose your weapon wisely

Erica - Developer @ Esoko (not mad at a client - at me)
Rinnngggg Rinnngggg Rinnngggg. That's my phone ringing. I know it's my phone  because that's my ringtone. Oh wait! Boy, I am definitely not picking that call. "War" a hip hop track by Trip Lee  is a ringtone  I assign to any client whose 'matter is hard' (that's a Ghanaian expression for someone who is difficult to deal with). Ten minutes before this particular call  I heard my phone ring. Again I didn't pick the call because the ringtone was "Bear with you", another hip hop track by Trip Lee - that song is assigned to clients who are just too unbearable.  It's either I like Trip Lee or he just has songs that suit me and my clients well. Like it or not every developer in their lifetime get to deal with clients who are just so difficult to tame. 

Let me playback a scenario many developers will identify with. I owe this guy work. He is calling. Immediately I am forced to multitask. As I listen to the phone ring my mind goes racing. Should I pick or should I not pick. I have run out of lies and stories. A new lie comes to my mind but now the problem is I don't remember if I have already told this client that lie. That should give you an idea of when this cat and mouse game began. Finally I manage to make up my mind as the phone still rings. A phone rings for about 30 seconds if unanswered so you can see I am processing all these thoughts at the speed of light. No, I won't tell anymore lies because I want to make it to heaven. The only way to avoid lying today is by not answering the call. By this time I have 5 more seconds for the incoming call to end. Who cares. I am not answering the call anyway and that's final. My phone does its job by telling me I have one missed call. Just as I let out a sigh of relief to return to my code I hear the ringtone again - "War". I am sure by now you know who is calling. This guy won't give up. 10 missed calls so far. The 11th call came and it was an unknown number. I smile to myself. This client thinks I am an idiot, calling me with a strange number. That's it! I won't pick any calls from unknown numbers today.

I can bet half of my empty bank account that 90% of developers have gone through this drill of going into hiding because a client was chasing them.  Some very impatient clients send insulting emails and text messages when they tried hard to reach the developer to no avail. Some equally very impatient developers respond to these emails and text messages with the same measure of fire. How dare this client. Where was he when I spent sleepless nights mastering C-Sharp is what runs through the developer's mind. One response after another the flame war goes on until there is only one man standing and it's mostly not the developer. It's easier for a client to find another developer than for a developer to find another client. No matter how skillful you are with code patience is a great weapon to choose in this battle against pompous clients. It's really not worth exchanging words with a client. You may achieve your aim of teaching him a lesson and telling him your peace of mind but then bear in mind you may loose that client plus all his friends who are potential clients. The reason you are dodging the client is because you failed to fulfill your  responsibility. You are guilty and now you want to get angry? Which of your mothers taught you that!!

 In Africa we have a proverb (don't ask me what a proverb is) that "when two elephants fight it is the ground that suffers". Another proverb says, "you cant have two wise men living under the same roof". Play the fool sometimes. Tolerance - another great weapon to choose in this battle against pompous clients. 

I have come to learn the real reason why clients bug us that much and mount 'unnecessary' pressure. All they want is for you to respond to that email or put that blackberry in your mouth, sorry I meant pick that call and tell them something, anything. They just want to hear from you so badly - not because they miss you. It helps them plan what lies to also tell their bosses. The client will begin to find a million reasons why you are not picking his calls. You'd be surprised the kind of reasons they come up with. Imagine calling your girlfriend 11 times and she didn't pick up. Will you just assume she was busy? No. You begin to find reasons. Aha! It's surprising some of the reasons you come up with. Communication thus is another powerful weapon to choose in this battle against pompous clients. Let them know what's going on.

For as long as we are good developers, we will continue to be overwhelmed with work and that's a good thing. With that blessing comes the burden of managing clients with different temperaments. Patience, tolerance and constant communication can help you win this war against pompous clients. Redraw your battle lines.



Tuesday, May 29, 2012

Going over Getfeatured.Biz with a fine-tooth comb


Getfeatured.biz is a website developed by ncodeDev Labs, a web applications development company based in Accra - Ghana managed by Alfred Rowe a fine gentleman I have known for a long time. Today however, I lay friendship aside and walk a mile in the shoes of a policeman or maybe a wicked proctor. 
Getfeatured.biz home page
Going by the official description posted on VC4Africa, "Getfeatured.biz’s goal is to provide relevant information to people in a fast, intuitive & friendly manner, that takes all the clutter away and focuses on the basic tools needed by the average person to find whatever it is they are looking for. Getfeatured.biz currently provides information on Jobs, Housing, Automobiles, & Businesses in Ghana. We are focused on extending our services throughout Africa in the long term". 


This article is not an interview with Alfred but instead a write up of my experience touring the website. I spent a total of 60 minutes on the website making sure I missed nothing. Now that my work is done I have good news and bad news. Which one will you like me to spill out first? 

Ok. The good parts. 
Getfeatured.biz on the iPhone
The UI is on point. Being a lover of the Apple finesse I find the website to be very visually appealing. To quote @KobinaSanni after I showed him getfeatured.biz he exclaimed, "charley I love this site. The UI is on point." I am in total agreement John. The UI sure is on point. Looks clean, sleek, elements are in order, jQuery animations are simple and minimal.


There is a mobile friendly version. Thinking in mobile mode is very necessary for any website developed these days and it's impressive getfeatured.biz has a mobile friendly version that looks equally appealing visually. The UI is very responsive on the smartphones I tested with (iPhone, HTC Desire, Samsung Galaxy S). 


Navigating is simple. You immediately know what the website offers once you get to the homepage and even on the subsequent pages.


Alswell is a fun way to search. This cool feature allows you to perform searches on getfeatured.biz content right from within your chat messenger. You just have to add 'getfeatured.biz' like you add a friend. If all goes well, Alswell will show up in your friends list and you can start telling it to find jobs, autos, cars, houses and more.  Type 'help jobs' and Alswell will tell you how to ask it to find jobs This pretty much reminds me of Siri for the iPhone.


The bad parts
Mono lingual. For a website that seeks to make inroads into every continent having things in English is not enough. Other languages have to be introduced. At least French. 


Can't do much with the mobile friendly version. It's good there is a mobile friendly version but it's not enough the things you can do in this mode. It's mostly read only. I couldn't post listings to the website. 


That dot biz gives me rashes. You know how there are some things that drive you crazy but you just have no control over? Like having an American embassy in your country and they still having the nerve to deny you a visa to America.  You can really do nothing about it and it's so painful. That's the kind of pet peeve I have with the dot biz in getfeatured.biz. I have to live with it. 


Help I am drowning in a pool of  data. Getting results when looking for information is great but when the the data is in super abundance things begin to get overwhelming and then using relevant information begins to become a painful process. I tried looking for a job and indeed got a lot of them (8,191 at the time of this writing). Cool. I wanted to further filter and get something more specific but couldn't.  Not cool. Oh wait! I see on my left boxes for me to search by title and by location. I entered accounting, accra and got data I could handle. So in fact, this thing I think is working backwards. Why not give me data relevant to my location to begin with and give me the option to see all or more.


Map deception. I clicked on a green "Launch MapMode Exclusive" button just because I liked the sound of mapmode exclusive. I really didn't know what to expect but it turned out I was moved into Map view. The map picked my location as "Manhattan" (I wish!!)


Link color inconsistency. On the homepage and the places page the links are red in color. When you move to jobs, cars, houses and classifieds the link color is blue BUT the category a listing is filed under is red which makes me want to click them even though they are not links.


Sign up form visual deception. The sign up form marked "Your FullName" as the only required field but on submitting the form it expects me to put in an email and password. The error message also sounds a bit too technical or 'advanced'. In Ghana the word 'prohibited' mostly goes with you getting a fine should you falter. "hawking here is prohibited", "urinating here is prohibited. Offenders will be charged a fine of Ghc50".


Show counts in 'places' categories. I clicked 'places' from the top bar and clicked on a few categories only to find they had no listings in them. The page didn't tell me there were no listings so I was waiting thinking the content was still loading. Will be great if also the categories could have a count next to them to prevent users from clicking on categories that have no listings.
Example: Aerospace (5), Education (0)


In Conclusion
The time spent on the website was not a waste at all. I personally love this website and get a lot of aesthetic inspiration from it. The service it provides is also very useful and I use it often enough for me to want to dissect the website to help make it better. I know Alfred and his team at nCodeDev Labs will do a good job to address where necessary the concerns raised.



Monday, May 28, 2012

Dilemma of a young african developer - To Uni or not to Uni

Have you ever been forced to graduate?
Thanks to the very successful dropout billio-millio-naires who have carved an indelible niche in history, the desire to NOT go to  university has really become a good, comfortable and proud thing for many including myself. What's the point in going to Uni when I know I will be dropping out to start my own company anyway is the anthem of many. Just so you understand the positive impact these dropout billio-millio-naires have had. Today, a lot of Ghanaian parents including mine no longer give their kids pressure to go to Uni because they have come to somehow (I don't know how) know the stories of the men behind Apple, Microsoft and Facebook. Amazing!!


Despite the evidence of living testimonies for both sides of the coin (the successful dropouts and the successful non-dropouts), lots of young people still find themselves in the dilemma of whether to go to Uni or not to go to Uni. You as an individual are solely responsible for the final decision on this subject and it'll be suicidal to let someone make the choice for you. I am just going to share with you why I went to Uni and pressed 'undo' after 2 years. Then pressed 'redo' after another few years.


So why did I really enter Uni?
For a few reasons.
  1. Peer pressure. Back in the day when I finished high school (1998), Uni was the next logical path for anybody who wanted to become somebody. All my friends seemed to be heading there so I had to 'wise up'
  2. Parental Pressure. My dad is a chartered accountant and you definitely don't expect him to watch his only son waste away with some flimsy excuse of wanting to be his own boss.  Nonsense! Definitely not under Mr. Ocansey's roof.
  3. Extended family pressure. You know how smart uncles and aunties ask you questions like "oh so what course are you reading at the varsity?", "are you in level 200?".. That's their tricky way of asking if you are in Uni at all.
  4. I missed out twice on a UN job. I got a UN job that really required a first degree at all cost. Shit! I missed it and boy ... It pained me. That was before I decided to go to Uni. The next time the opportunity came I had dropped out of Uni. Silly me you can say!
  5. My girlfriend in medical school was after a few years going to come out with a straight doctorate. I had to compete or at least match up small.
  6. To spice up my profiles and introductions. You know how when people come to give talks they mention their long qualifications. I kind of liked that and wanted to build up such an academic trail.

So why did I press 'undo' and drop out of Uni?

I had been doing very fine without Uni. Before going to Uni I had already  started my career in I.T. I had completed the 2 year diploma program with NIIT and had already worked in 2 international companies and was by now in a third.  All that before Uni? The heck I would need Uni now.

Uni was boring. I decided to do something different from IT so went for Accounting with information systems since it happened to be the most difficult of the courses. After 2 years the course got so boring I never went back.

The I.T. lecturers didn't know much. After dropping out of a main stream Uni I decided to go to a Uni that was more I.T. centric. After a few weeks I realized I was just wasting money because the lecturers were telling too many lies. At this point I was about 4years into my I.T. career and so knew a lot. This happened in two I.T. centric universities I tried in my country. There was no luck and no going back.

Combining school and work wasn't getting easy. All the while I went to Uni I was in full time employment and had to combine school and work. The projects at work were fun and often got my attention till late into the night. I was using assignments time for work. I sometimes missed lectures because I had to be at work. It got to a point I had missed so much school I actually forgot I was a student.

Passion for my work. I got more passionate with work and the desire to build something great. Once you get to this point there are three things that are likely to suffer in your life. Your relationship, your academics or  your full time job. For me the last two suffered. I quit job and quit school. I had to focus on building a business and needed all the time I could get.

If you decide to skip Uni
Make sure you develop yourself personally. Get certified professionally. Luckily for us in I.T having a degree before getting certified is not at all a requirement which is a very good thing. Get as many certifications as you can.

Make sure you are good enough with what you are supposed to know. In Africa a degree is mostly your first marketing strength. You can really know nothing and still get a job with some company once you wield a degree. Imagine you not having a degree and not knowing jack in the professional path you have chosen. That's like shooting yourself in the head while hanging from a rope.
I have been lucky enough to get work in 5 companies without ever having to present a certificate. None. That's because I mastered my fields and had very compelling projects to back me up. I still continue to learn daily. No room for complacency at all. 


The few moments I spent in Uni taught me things that really helped me when I started Kursor Solutions.


Company law: first year at Regent University of science and technology we learnt company law. I applied all I learnt in my company law lectures when I had to write contracts and agreements, even terms and conditions and privacy policies for some of my projects. Of course you can always read these up on the web or even get a template from someone who has done them before but there is really nothing like hearing the concepts from the mouth of a practicing lawyer.

Basic accounting: I was reading accounting as a major so of course started with the basic book keeping, balance sheets, profit and loss statements stuff. These were again very useful to me when I had to keep accounts for Kursor Solutions.


I guess by now I have left you more confused by not really giving you the straight answer you expected. I did answer you right up in paragraph one. You are solely responsible for the decision of whether to Uni or not to Uni. This however has been my story about why I decided to go to Uni, get out, go back and get out again. Get in and get out one more time. For one last time I am back in Uni and this time it's not for the paper or any of the 6 reasons I gave earlier but just because I never leave stuff I start unfinished. Wish me luck!


A few lessons learnt over the years - notes from my diary

Ok. What age did you peg me at just by reading the headline? I am really not that old age-wise but getting into I.T. in the year 2000 makes me quite old in this trade. If programming were akin to a Mafia clan, I may be deputy god father. I have learnt a lot over the years. Some good and some bad. Some I had to learn the hard way. A lot I had to learn on the job. A lot more through observation. You may have already experienced these personally or read them elsewhere from my brother from another mother. Let's still dive in. 


1. It goes beyond academics. Having passion  for what you do is something you can never learn in the classroom. It has to be inate. You either discover it or develop it. A lot of young folks have approached me and said "I hear there is a lot of money in programming. I want to do that in school".  True, there is great financial reward in programming but then those who are passionate about programming excel more than those who learn programming as a trade. 


2. A good name is better than riches. Many times people will refer you to others when they are happy with your work ethics and know recommending you won't dent their own reputations. Work hard at making a good name for yourself. The points that follow are essential to  helping you make a good name. 


3. Be truthful. If you are late with your deadlines be truthful to your clients. They won't kill you. The worst they can do is scream and for how long - 30minutes? The truth helps them to plan so tell it to them. If you have no clue on a subject say so. It's better than looking stupid saying things that don't make sense. 


4. Be timely. Deliver on time. It makes you trustworthy. Clients get fed up with your non-delivery and warn their friends against you. 


5. Calling them your clients is not enough. Don't make your relationship with your clients strictly business. Be their friend. I have clients who call me sometimes to discuss their marital problems (and I am not even married) and  issues concerning their businesses. They value my advice and that feels nice. 


6. Be patient and  innovative. Many times your clients may not know exactly what they want. They came to you because you are supposed to know more than they do in that field. Think thoroughly through their specs and needs and always make sure you add value. Clients  always leave something out. Find it and tell them. Help them make more money with ideas they never thought about. This way they know you care about their success and it's not just business as usual.


7. There is a time for everything. A time to charge and a time to Pro Bono. Don't always be on the lookout to make profit or make money off your clients. There are some things that don't really take much of your time but are very critical for your client's business. Do it for free. There are other times your client offers to pay way less than you charged. You know the amount he wants to pay is really not worth the time you will spend on the project. Do the project and for FREE. There are enormous returns with such gifts you give to your clients.


8. Always play with new technology. Don't get left behind. New things keep getting introduced in programming. Always make sure you play with them as and when they come. No need to necessarily master them. Just get familiar with them. You will look stupid if a novice coder asks you questions about stuff you are supposed to know in your profession and you just draw a blank. 


9. Get rid of pride. One head doesn't hold all the wisdom and knowledge. If you don't know something feel free to ask another programmer who is master in that topic or language. I do that a lot with @AlfredRowe and @Jean-Paul. When you know and are asked, willingly share. Don't diss the one asking before you share knowledge. Humble yourself and learn from someone who is a 'junior' developer if they teach you something you didn't know.


10. Don't be Greedy. There are times we really get overloaded with work. Pass work on to your peers you can trust. Don't take it all even when you know you can't deliver. Other times when clients bring things related to stuff you don't do, pass them on to someone you know can help. 


11. Work in a team. We all ultimately want to be our own bosses but it's priceless working in at least 2 teams. There are a lot of things you learn when you have different temperaments in play. A lot more other things you learn that help you run your own company in the long term. 


12. Don't be a flat character. There is life beyond programming. Acquire knowledge of other peoples roles. This mostly applies when working in a company. Learn how HR does its work, the accounts department, marketing team etc. 


These are a few notes from my diary. Will write a sequel to this as I keep learning from life's harsh and polite dealings. 




Friday, May 25, 2012

When the backend developer decides to do his own UI design


Terminal

It's not an impossibility but sure is recipe for disaster - that a backend developer should dream of doing his own UI. Under very normal body and wallet conditions a backend developer should hire the services of an interface designer or at worst a graphic designer to build his UI.


To borrow a line from economics, external factors are not always equal and there sure will come the day and hour when the unthinkable  becomes inevitable. You called the UI guy up, gave him your specs and he charged you an arm and your right kidney to get the UI you thought was supposed to be something simple. Or.  The UI guy you paid in full to do the job has gone off to some beach resort with his girl, his phone is off and your client is breathing through your windpipe. You don't want to pay another UI guy. No not for this project and not at this point. The whole world seems to come crashing on you like a Chinese laptop running windows 7 with 128mb of ram. One thing you haven't lost though is yourself and your ability to not disappoint so you take up the dreaded task of UI design. It's not that hard once you know exactly what you should do. Here are some pointers that should help you out.


Step out of the shoes of the developer and into those of your users. There is a maxim in UI design that goes like "Know thy users for they are not you!" Ask yourself the most critical question. "What is my user trying to achieve" NOT "what has my backend code achieved that needs a UI to make it pop". In stepping in your users shoes, there are a lot of shoes that need fitting and you definitely need to satisfy almost everyone's dumbness and/or smartness.


Think in color. Most backend boys get stuck in the terminal where they use Vim, pico or nano. At best they use an IDE that throws in a few colors and some nice panel arrangements. Well the world of designing requires much more inspiration than that and teaching you how to color mix and match will be as hard as teaching you how to wear the right kind of clothes. If you think you are able to mix your clothes right when you dress then this website should make it easy for you to match colors. If your color combinations suck when you dress, I'm afraid you really need to wait for that UI guy to come back from the beach resort. You don't just pick colors because they look nice or are your favorites. There is motive behind color choices. The theme of your app will greatly decide what color options you have.


Aligning elements
Alignments: line things up nicely. You need to apply common sense here. Ensure your elements have a logical flow to them both vertically and horizontally. From the 'aligning elements' picture on your right, see how everything (categories, add your profile button, footer links, (c) 2012, twitter button) in the categories column are nicely right aligned. The same is with the headings 'Categories' and 'All Dev'. Their tops are aligned to be at the same level. The search box and 'All developers' also start on the same line. There is logic to the alignments and you need to enforce this using - common sense.


Space things evenly. Spacing is the cousin of alignments and again this also employs your common sense. Going back to our 'aligning elements' picture, see the space between 'categories', 'all developers', 'all dev' and the 'search box'. They are equal. The 'add your profile' button performs an action that's linked to what category of developer one is but it's not a category in itself hence greater space between it and the category list. The footer links, copyright and twitter button are all footer stuff and so have been shoved all the way down with a much wider space. The spaces to the right and left of the dotted line that divides 'categories' and 'all dev' are even.


Choose the right fonts. Here you don't have the luxury of using as many fonts as your document editor gives you but I guess you already knew that. Courier is also not an option unless you are writing a web version of xterm.  Verdana, Tahoma and Arial look nicer when used small, say at 10 to 11px. Verdana and Georgia when big look nice so are great for headings. One of the first things I do in my CSS files is to kill all padding and margin on these elements (p, div, h1-h6, span, label, form) and define CSS styles for them as and when I need them. I mostly limit myself to these fonts because I know they are by default available on Macs, Windows and Linux machines.


Simplify your lingo. You need to very much let your app communicate and let the user know what's happening whenever they need to wait. A backend developer can easily be swayed into writing very technical error and instructional messages on the screen. Google and Twitter do very well in presenting their messages in everyday language. When you empty your inbox Gmail gives you a message like "No new emails! See what people are talking about on Google+". Instead of saying "Your router is refusing to give our app a public IP" just say "You are offline". Instead of saying "You have not added any purchased items to your shopping cart" just say "Your cart is empty". I'm sure you get where I am going with this.


Simplify the design. I know you prefer to complicate things because you believe it shows your genius. Thats ok in life but not in design. Think more of how you can take things out of the design you have in mind. I remember the very first html page I built. Every possible html tag was on that page because I was so excited I had learnt all these new stuff. You may be tempted to do same with some new cool photoshop tricks you have acquired as a backend guy. Please overcome that temptation and keep things simple and clean. The less clutter you have on your pages, the easier it is to convey your apps intent.


Be consistent. This ties in with the above point on design simplicity. Don't mix element styles on different pages. Make sure your buttons, headings, labels, etc are the same style on all pages except where they REALLY need to be different (mostly only on the home page). 





Tuesday, May 22, 2012

The African developer and the curse of the developers’ uniform (T-shirt and jeans)

Developers: Edward Baah (headphones on), Michael Ocansey


In choosing this topic I tried to be a little poetic and follow topics the likes of “The lady, her lover and her Lord” or “The good, the bad, the ugly”. I leave you to be judge of my poetic abilities.
Regardless of your age, there are a million things we came to meet and have accepted without even bothering to find out how they came to be. Really... no need to bother finding out some of these things because you will only be chasing after the wind as King Solomon rightly put it. Girls and gossip. Do you have any clue how those two got paired up? I don’t. A rock star and the violent shaking of the head. A politician and tricks (tricks is my polite way of saying ‘lies’). A kid and toys. These things are paired and bonded so tightly, leaving no clue of who the pairing originator is.
The developer and his t-shirt + jeans. Don’t ask me who prescribed that uniform for us because I honestly don’t know but whoever it was did a very good job in making sure his choice became very popular. Today you will almost choke and blink 360 times in 5 seconds if you saw a developer in a suit and tie. Developers the world over are identified by how they dress. How faded your T-shirt or jeans is can sometimes define the degree of your geeky-ness. The whole world knows that’s our uniform but my real question is, does everyone in our part of the world accept us when we wear that uniform? A very simple and straightforward answer is NO but I know you don’t like things simple and straightforward so read on.
I personally love our uniform because it really makes me feel very light and free to think and code. No choking on tie knots or restricted movements by designer suits that are too tight and slippery from supposed silky lining. The truth however about Africa is that we have rich cultures formed and deeply rooted in time and imbibed in a lot of us that will take more than schooling in London or America to phase out. A lot of the custodians of these African values are unfortunately those who have the monies to pay for the services we provide.
I started work in 3 american companies and so got very spoiled with their way of doing things. I was free to wear our uniform all the time, could call anyone older than me in the company by their first names, could say “hey whats up” forgetting the real impact of a “hey” in African context. All that felt so good until I decided to start my own company. That’s when the reality hit me that Africa isn’t spelt with a ‘M’ after the ‘A’. I had to go dropping proposals, booking meetings, going to give presentations. These business executives had no regard for anyone who was not in a nice shirt tucked in a nice pair of trousers and sporting some nice pair of shoes. That was their initial measure of anyone who was in to do ‘serious business’. You can’t blame them. That’s really the perception out there among the ‘big people’ or ‘big companies’ whose monies we intend to get a bit of. Dude, they don’t really care how good you are with code or how great your product is, to get an audience with them you need to lose the T-Shirt and Jeans ... and that is the way it is in Africa.
It’s not bad at all once you lose the T-shirt and jeans because you actually are now able to blend at all social levels. Among the very corporate and among the very liberal - your fellow developers. The curse is revokable.