On October 18th 2013, I got an email inviting me to a new platform, Wizpert. Even though the service mistakenly identified me as the owner of Google's PHP-for-GAE blog, I tested it out briefly, and formed a hasty opinion.

Not half an hour later, their CEO, Michael Weinberg got in touch with me, wanting to clarify some misconceptions I listed. This was a big plus in my book – proper PR control of such rapidity is of extreme importance.

We arranged a Skype call for the following Monday, and after a brief chat covered all the aspects that concerned me and more.

What is Wizpert?

Wizpert is a platform on which experts in certain areas can get registered as "Wizperts". Visitors then have the opportunity to chat them up with questions they might be having about any topic currently available – from relationship advice to programming.

If the Wizpert was helpful, the visitor can opt to reward them with coins, and a certain amount of coins can be exchanged for real money. The more you accumulate and exchange at once, the better the exchange ratio.

Visitors can purchase these coins for real money, and of course, the more they purchase in one go, the better the money-to-coins ratio.

Essentially, it's a paid helpdesk. Imagine having one-on-ones on StackOverflow.com and (sometimes) being paid for it.

Technically, Wizpert is very well done. Being very young, they certainly do have some bugs to iron out, but their integration with Google Hangouts and Skype is flawless. You connect those services with your Wizpert account, and every time someone would like to chat with you, you'll get pinged on any you're available on. One could argue that this approach produces too much clutter in Skype (see Fig 1), but it's really no big deal.

What's the earning potential?

Not great. When visitors first sign up, they get 100 promotional coins. You can get those coins through various means – even just visiting the site during the launch period. However, promotional coins cannot be exchanged for money. They can be used to extend a chat's duration (every chat has a 3 minute intro period after which it has to be extended by either the Wizpert or the visitor), to talk to other experts, etc. To reward someone, a visitor must purchase coins – only purchased coins can be exchanged for money.

"So what are the ratios?", you might be thinking. In my initial post, I missed one conversion rate and made a miscalculation. If, while purchasing coins, you go to the checkout page, another option appears – 10k coins for $200. Seeing as 30k coins can be exchanged for $500, this makes for the platform's margin of $100 (if both the Wizpert and visitor exchange only at the best ratio) which is, admittedly, rather fair. Right, but all this still means people need to buy coins to reward those they deem extra helpful and no one really does that. Or do they?

Michael mentioned in our chat that, as a matter of fact, they're not only seeing a high satisfaction of visitors as far as the chats go, but also a very high percentage of people actually going the extra mile, buying coins and rewarding people. I myself have been given coins as well, so my initial prejudice seems to have been very wrong.

Now, granted, this still doesn't come down to a lot of money. Even if you earned 1000 coins per day, that's 30k per month, which is $500, other fees notwithstanding. Not bad as pocket money, especially if you spend the day doing open source and helping people anyway, but not worth quitting your job over either. There's something else to be earned, however, and we'll get to that in a bit.

As a dev Wizpert, what exactly do I do there?

Let's take a look at some example questions (paraphrased):

Q1: "[…]Get this error on line 75 Fatal error: Call to a member function setTimezone() on a non-object"

<div class="pending Incidents"> <table id="upcoming" width="100%" border="1"> <tr> <th width="20%" >Available Units</th> <th width="10%" >Recommended Station</th> <th width="20%" >Incident Type</th> <th width="40%" >Address/Location</th> <th width="5%" >P/U Time</th> <th width="5%" >Apt Time</th> </tr> <?php while ($fetchselupcoming = mysql_fetch_assoc($resultupcoming)) { ?> <tr> <?php $pickup = $fetchselupcoming['pu']; $apttime = date('H:i', strtotime($fetchselupcoming['at'])); echo "<td>"; echo "<form name=\"dispatch\" method=\"post\" action=\"dispatch.php\">". "<select name=\"unit\">".$option."</select>". "<input type=\"hidden\" name=\"status\" value=\"3\">". "<button type=\"button\">Dispatch</button>". "</form>". "</td>". "<td>".$fetchselupcoming['station']."</td>". "<td>".$fetchselupcoming['name']."</td>". "<td>".$fetchselupcoming['full_address_2']."</td>". "<td>" .$dt= new DateTime($pickup, new DateTimeZone('EST')). $dt->setTimezone(new DateTimeZone('America/Detroit')). $dt->format('H:i'). "</td>". "<td>" . "</td>"; ?> </tr> <?php };?> </table> </div>

Any intermediate and above PHP developer will realize this code is utter horror. Obviously, the person is trying to echo some database fetched values into a table, but the code is failing. Due to the chaotic nature of the code's layout, it's hard to pinpoint the error at first glance.

The first thing we do is, thus, pasting the code into a high quality IDE such as PHPStorm. Next, we run the autoformatter to repair the layout, so we can scan through the code in a more fluid manner. We get this:

Aside from the invalid width attributes and an undefined variable the client must have left behind in an included file or outside the scope of pasted code, we see only one other part flaring up – the DateTime section on the lines where the error happens. Mousing over the section, an error is revealed clear as day: Method __toString is not implemented for \DateTime .

Now, while this might be very obvious to most intermediate and above devs, error hinting of this type enables even beginners to debug other people's code, while improving their own error spotting skills in the process.

Obviously, the client is making a common mistake. Mixing views and logic this much is never a good idea, and echoing out strings of HTML almost always leads to bad code, especially in bad code editors which don't highlight the issues. In this particular case, the client is printing out an entire string of HTML, and simply tacks on a series of chained DateTime method calls into it.

The solution is to simply remove the instantiation and setTimezone from the string, and move it above everything. This doesn't turn this into quality code, but at least the code now works, the client is happy, and he can reward you with coins or even hire you for a more proper rewrite if you advise him to do so (for example, mysql_fetch_assoc should be discarded, the table should be printed in HTML, not PHP, it should be styled in CSS, not with attempted widths on table headings, etc).

Let's look at another one.

Q2: Login system

As you can see, we hit a wall before even moving. Obviously, this person was a newbie – perhaps even a first encounter with PHP. What followed was a patient 10 minute explanation of what database to use, the schema of the database, the login/register form, and the basics of how a login system's logic works. I ended the chat with some useful links and explained how I can be contacted again, should he need help regarding this same issue in the future.

Chats are generally 10-20 minutes in length. Anything over, and I encourage you as a developer to mention the coin reward. After all, it is your time that's being spent here. I don't mention coins for their monetary value, however; I mention them because they cement the relationship, keep the client focused on this one chat and one problem, and force both them and you to become more emotionally invested in the process, which brings us to the next section.

What Wizpert offers is worth more than money

A long time ago, I was a member of a PHP mentoring effort. It's a program that teams up a senior with a junior, Sith lord style. Having an apprentice whom you can unload your trivial work onto for petty cash while teaching them proper coding techniques in the process is a wonderful, albeit time consuming and sometimes nerve-wracking experience. I remember it made me better at communicating with people, at translating ideas from my head to a more common language for everyone to understand, and it taught me (some) patience. But it also took up too much of my time – having a constant apprentice is almost a full time (unpaid) job in itself. One of the first chats on Wizpert reminded me of that experience.

When you get a random person in a chat with you, and that person has a problem, it's often too easy to think of them as "stupid" for not trying out this or that solution, for having weak Google-fu, or for simply not being able to understand the very language they're dabbling in. After all, programming is nothing more than talking to the computer in English, so how hard can it be, right? Wrong. So very wrong.

The few chats I've had on Wizpert re-opened my eyes to this. I've encountered problems that were, at first glance, trivial to me. But as me and the client dug deeper, and the problem kept getting more complex, I felt a drive, a hunger, a curiosity. I wanted to solve it, I wanted to dig around more and find out about it. My initial impulse was "Oh, yeah, that's this and that and you gotta do that" followed by immediate thoughts of dismissal, but eventually, it turned into "Have you tried this? Have you tried that?". The cocky certainty was dissipating. This wasn't the last chat of this type – problems I would deem trivial and banal any other day seemed interesting in almost every one, because they taught me much more than the solution to a silly newbie issue.

What I'm saying is: through solving these obvious and mostly unchallenging problems and through reviewing my chat logs, I came to understand which parts of my approaches to clients and newbies in general I need to improve. I learned to approach both them and their needs from a different angle. I'm improving my English skills towards non-native speakers, learning how to keep things simple and understandable, and I'm slowly mastering the art of digging through untold information to get to the source of a problem.

Conclusion

What Wizpert can offer is worth more than money – it's personal growth. Your patience, your knowledge, your speed, your compassion – everything is put to the test. If you're at all interested in upgrading not only your coding skills, but your people skills, your intuition and your precision in problem diagnosis, I encourage you to give Wizpert a go. You can find me there.