Thursday, November 20, 2014

About that Customer Service...

Yesterday I wrote a review on Amazon about some screen protectors I had bought and was very dissatisfied with. About two hours later I received an email from the vendor telling me that they were sorry to hear about my bad experience and as such were willing to send me another pack of screen protectors to try again or issue me a no-questions-asked a full refund.

A couple months ago I ordered a fried beef pie from a bakery around the block from where I work. Upon reaching back to the office I realized that they erroneously gave me the wrong type of pie, so I returned to the bakery and asked for an exchange. The cashier, with whom I had interacted with almost every day for the past 18 months proceeded to tell me that even though it was the wrong product I've received, they don't do exchanges on purchased items.

What's the difference between these two businesses? The bakery will NEVER receive another cent from me, while the screen protector vendor will actually receive high commendations and wide recommendations from me (provided the replacement batch is good).

That, my fellow business folk, is the difference in customer reaction when your customer service is top notch.

It's about going to great lengths, and sometimes beyond the call, to show your customers how much you care and how much you value their business. Falling short in this area can actually cost you more money not only in the long run, but in the immediate term. Remember, you're not just disrespecting one customer with your bad service, you're disrespecting all 50 of the people that that one customer would have recommended your business to. The inverse remains true.

So remember, no matter what line of business you get in to - fast food, retail, online services, etc. - the customer is king (or queen). Give them your utmost respect and make them feel like their money was well invested and not simply spent.

I got the exchange on my pie though. I wasn't about to allow my $5 to go down the drain.

Update: I got the new batch of screen protectors, and they were awesome! Here's the product in question:

Friday, November 14, 2014

You Can't Run a Company When You're Dead

5lb ain't nothin' to mess with!
As the founder of the next billion dollar startup, it can get tempting at times to just hunker down, dig in and pull out all the stops for the sake of a 4 month coding stretch. As the founder of a new company, myself, the temptation to just let everything hang out and grow out while I go for that 1.0 release is strong and sometimes overpowering.

Unfortunately this kind of activity does more harm than good. That diet of potato sticks, juice, water and fried chicken isn't doing ANYBODY any favours. Sure your code is lean, optimized and DRY but the body being used to create such a beautiful code base is slowly, but surely withering away.

As the title says, you can't run your billion dollar company when you're dead. Try as much as possible to keep a reasonably healthy diet. Nobody is saying to break out the dehydrated meat loaf and the soy milk, but keep things civilized. Also, make some time for exercise. I do a 30 minute jog then about an hour of some gym work at most 3 times a week. 90 mins out of your day every other day or so can do wonders for your health.

As a programmer, I'm all to familiar with the importance of that mental momentum. However, I've found that that a brisk jog and some gym time allows me to take a step back and clear my head for a bit. I may even use this time to think about the solution to a nagging bug that's been tormenting me all day. I've found that this works out better for me as opposed to sitting there and staring at code and hitting F5.

So take a break for the sake of your health. Lift your head up and see the beautiful sunshine, hear the birds and get that blood pumping. Your mind and body will thank you for it in the end, and the journey to 1.0 will be so much sweeter.

Friday, October 24, 2014

Keep On Keeping On

Becoming one with the code
As some of you may know I've started a small company about 2 years ago in my spare time and I've since created 2 products/services. One of which has just seen its second iteration and is currently in that ticklish and oh-so-stressful stage of customer acquisition.

Now, even with a free 60 day no-risk trial, no additional hardware or software to buy/install and no drastic changes to current workflows, getting members of the target market to use the service (or even give it a try) is like pulling teeth from a very timid, very untrusting bullshark.

Thank God that thus far I haven't received an outright "no" from any of the folks I approached, but boy it sure does get annoying constantly being thrown into that big grey abyss of "let me talk to my boss/let me think it over".

Honestly, sometimes I feel like giving up and resigning myself to being a permanent member of the working class. Paying $X a month to my VPS provider for a service that brings in $0 (as at writing time) isn't exactly one of the things I look forward to every pay day.

So what keeps me going strong? What keeps me dialing back the phone numbers of potential clients even when my emails go unanswered and their personal assistants sigh at the sound of my name? Aside from heavy reassurance from God and my nightmare of my wife having to quit her job to sell shoes door to door, I found inspiration in the most unlikely of places - a group of people I ignore every day on my way to work - roadside vendors!

You see, every day on my way to work a vendor would ask me if I'm interested in buying watch bands, cell phone cases or the one ring to rule them all and their offers to me would usually be met with an unapologetically blank stare and a strong breeze, void of acknowledgement, as I swoosh by on my way to get a taxi. Now that's just me, on person, turning down their offers on my way to work every day, 5 times a week for 18 months. Multiply that by about 10 thousand other no's they get daily and you see some interesting things starting to form in the mathematical soup.

One of those things is that they have a high tolerance for disappointment. They're resilient and persistent enough to boldly approach the same person over and over no matter how many times that person passes by ignoring them. After (literally) more than a million no's they still come out, set up shop and ply their trade daily; they keep banging on the market's door until the market responds with a yes, and it's that yes that keeps their fire burning until another yes comes along to stoke the flames again.

Compared to the 20 or so "I'll have to think some more about it" responses that I've gotten, things really aren't that bad in my court, and it probably isn't that bad in your court either, my fellow entrepreneur.

Sims on the grind
Being a young tech company in T&T is tough, and especially so when you don't have an illustrious family name that makes potential clients quiver and have to sell your product "door to door" because that $500 000 marketing budget is just slightly out of your reach at the moment. However, as someone who is currently in your shoes, I just want to encourage you to press on. I assure you that it's not a solid stone wall; there are soft spots, and with the right hammer, attitude and persistence you can make a breakthrough.

Just hang in there.

Sunday, June 15, 2014

Module Naming Conventions for Play 2.2 and IntelliJ 13.1

So today I noticed something strange with +IntelliJ IDEA and the +Play Framework 's build.sbt file.

Say you create a project using the following method:

1. Create a new app using the play new command (testapp)
2. Naming the application (Test_Application)
3. Selecting the Simple Java application template

When you open the project with IntelliJ and look at the build.sbt file, this is what you see:

This means that the project ins't properly resolving within IntelliJ. This can lead to false error flags and almost zero code assist support when building your controllers and whatnot. Now your Play application will still run as normal, but at this point you might as well use Notepad to do your code editing - IntelliJ will be almost useless to you.

The fix, however is simple. Simply rename the project's build module to the same name as the main project module and attach "-build" to the end of it. This can be achieved by going to File > Project structure... > Modules. Mine show up like this;

From here what I will do is change the build module's name to "testapp-build", 

click OK and when I look at my build.sbt file again, everything should resolve properly and my code assist should work splendidly:

Well, it's almost fixed. Restructure the file as follows to make sure the library dependencies resolve properly as well:

To avoid all this tra-la-la, I would advise skipping the step to name your application when creating the application from the command line. 

Happy coding!

Bug affects:
Play 2.2.3
IntelliJ 13.1.3 Build IU-135.909
Play plugin 0.38.437

Tuesday, June 03, 2014

Proper build.sbt Settings for Play 2.2 and IntelliJ

I came across a bug today that cause IntelliJ 13.1 to act strangely when passing Java objects to Scala templates.

For example the snippet:
public static Result login() {

will compile and run, but IntelliJ will flag it as an error because it says that it found a object when the Scala template was expecting a object. Now that's just the tip of the iceberg, I even found that in some cases my routes (for redirects within the controller) were flagged as unresolvable objects.

Fear not, for the solution is simple. Your build.sbt file will look like this when Play generates the project:
name := "testapp"

version := "1.0-SNAPSHOT"

libraryDependencies ++= Seq(


Simply change it as follows:

import play.Project._

name := "testapp2"

version := "1.0-SNAPSHOT"

libraryDependencies ++= Seq(


Run the following commands:
play clean
play compile

And voila! Those nasty red squiggly lines are gone.

Bug notes

This bug was present in the following software and their versions:

IntelliJ IDEA version: 13.1 IU-135.475
Play Framework version: 2.2.1 - 2.2.3
Play 2.0 plugin version: 0.33.404
Scala plugin version: 0.33.403