Choosing the right SaaS tool for the job

“Choosing the right tool for the job” is solid advice but an incredibly difficult task when you’re looking for a SaaS app online. Unlike wandering into a physical store and picking between a handful of options, the possibilities are practically infinite on the web.

As a freelance programmer, there’s a host of software that I use in running my business. I need to think about document collaboration and storage, budgeting/invoicing, managing mailing lists etc – it’s a long list and crucial that I’m able to rely on each service.

Clayton Christensen (the chap who christened the term ‘disruptive innovation’) explains in The Innovator’s Dilemma’ that we ‘hire’ a product to do a job. Here’s some advice on how to most efficiently hire a product for your business.

1. Stop looking for all-in-one solutions

You’re not likely to come across a platform that can measure web traffic, keep your Twitter stream updated and feed your cat without spending big bucks. All-in-one solutions at generally aimed at the (very) large corporate world and, in my experience, aren’t as effective as “dedicated” solutions.

It’s the reason why DIY enthusiasts have toolboxes rather than a Swiss Army knife.

Examples:

- I use Buffer (www.bufferapp.com) to keep my social media accounts up to date. Such a simple service but one I gladly pay for.

- I use Rubberstamp (www.rubberstamp.io) to manage budgets, expenses and purchase orders - again, simple and effective.

2. Make proper use of trials

Pretty much every webapp out there will offer some trial for their product. Some require a credit card, some don’t. If they do and you’re not so sure about it then put a reminder in your phone to cancel the service, otherwise they’ll likely charge you for the first month once the deadline passes.

Do you have a large company which makes the trial hard to appraise (ie. the trial only works for a company with ten employees and becomes unlimited once you pay)? Try reaching out to the service providers directly and explain the situation – chances are they’d be happy to make an exception for you.

Of course, some services are free which brings me onto my next point.

3. BEWARE FREE SERVICES

If the product you’re using is free across the board (ie. there are no paid plans) then realise that this service could disappear the next time you go to login. Business is oftentimes simple and if a company makes zero money then they’re not going to be around terribly long. Failing that, you may fall prey to “customer lock-in” when they decide to start charging and you pay over the odds.

At the very least, make sure that you can export your data from the service in question.

4. Ask around

Most webapps will come with customer testimonies but you can’t beat a reference from someone you already know (possibly because they’re in an identical situation as you).

Reach out to your friends on social media (or, crazy thought here, real life) and see if they can suggest anything.

5. Keep an eye on cost of growth

Are you about to sign up for an app thats $10 a month for five employees but $200 for ten? Make sure that you’re costs don’t scale faster than you do.

Conclusion

The key points above should help guide you towards an online solution regardless of what exactly you’re looking for. Picking the right tool for the job online can be difficult but a little investment up front can save you hours of headache further down the road. Happy hunting!

A word about inheritance and enums in Rails 4

Enums are a great feature in Rails 4 – ActiveRecord’s native adoption of them is nearly worth the upgrade alone. However, I want to share a gotcha I came across today on a project I’m working on (the new version of tech startup simulator Hipster CEO if you must know).

I have a model Task in my schema that functions as an assignable piece of work to a member of staff. I’ve used the acts_as_relation gem to create a multi-table inheritance structure with things like TechTask, MarketingTask etc to assign to different departments. Each one of these subtasks will have a specific type (eg. frontend work, security analysis, testing etc. for a TechTask).

Therefore, each subtask will be of a specific type but these will vary from subtask to subtask. For example, you can’t create a TechTask with a type of “online_marketing”. Since this attribute is shared (admittedly with different key/value pairs) I thought it would be good practice to move it up to the parent Task model and then define the individual keys in the subclasses. And that’s precisely when things went wrong.

In order for the parent class Task to use the enums, they need to be defined in the parent class itself. Otherwise, when you create a subclass object, it will fail when you try to set the enum. Moving all the enums up a level pretty much defeats the purpose of having these subclasses, since they would be so tightly coupled.

In the end, I had to create an identical attribute on each subclass of Task and wrote generic helper methods for retrieval/inspection etc.

Of course, it’s debatable that inheriting enums is a correct approach at all (from my research online there was plenty of people strongly against it) but this does feel like a valid use case.

In summary, don’t inherit enums in Rails 4 because you’re gonna have a bad time.

UPDATE: Moving the enum down to the sub-class table means you can’t (AFAIK) create a composite index on the enum and whatever data you have in the parent table (in my case, it was an association id). Not the end of the world, but something to bear in mind all the same.

App Store Dollars Don’t Go Further

So Apple are going to start pulling apps that reward social sharing/other app promotion from the App Store.

I’m pretty disappointed to hear this since the social share for extra cash option in my app Hipster CEO was a pretty popular bit of functionality. In the game, if you levelled up you could earn extra cash by sharing your achievement on Twitter or Facebook.

However, the discussion over on Hacker News has been around the suggestion that Apple should ban consumable in-app purchases completely. This topic  seems to split the community into two camps:

  1. iOS Developers who would be unhappy to see a drop in revenue.
  2. Gamers who loath IAPs as its difficult to tell just how much a game will “really” cost them.

I have written about mobile apps’  pricing problem before but its practically impossible to make & maintain a worthwhile app where the customer lifetime value is $1.99. I’m not saying consumable IAPs are the answer – I hate games that offer me the chance to hurry actions up by paying, they just feel kinda hacky to me. I’m happy to say that Hipster CEO has no IAPs but I sure wish I put them in there. The app has made me back the money it cost to develop but it’s not paying enough for me to maintain it (note: I’m building a new version that I hope will change all that). If you paid just under two quid for a game then you really don’t deserve an experience that lasts longer than it takes to drink a beer.

If you bought a second-hand console game and never played it twice, you wouldn’t complain. If you sank five bucks into a game at the arcade in twenty minutes, you wouldn’t complain. And if you paid over a tenner for a movie that sucked then you probably wouldn’t complain. All of these things cost more than the average app but for some reason, a certain group of people feel their App Store dollars should go that bit further.

That being said, I understand the complaint. I don’t think gamers mind handing over cash – its the lack of transparency that bothers them. If an app is marketed as free/cheap but really costs $50+ to get value out of it then it feels like a bit of swindle. Games like Farmville are a perfect example. However, gamers only have themselves to blame. The only alternative I can thing of over IAPs is subscription based models – games like Ultima Online – and they’re all dying out with World of Warcraft being the exception to the rule.

Maybe there’s a better way to monetise – I don’t know. If you’ve any suggestions then leave a comment.

RMMapView not deallocating memory in iOS? This could be the problem

I’m working with Mapbox at the moment – it’s a great tool for bundling offline maps into your apps. I recently noticed that my RMMapView’s weren’t deallocating as expected. These map views used by Mapbox, I’m not sure if they’re open source or not. Anyway, long story short, this was leading to a memory leak and I spent about a day trying to figure out why. The fix is pretty simple, just remember to set the “showsUserLocation” flag to false when you destroy the parent view. Something like:

- (void)viewWillDisappear:(BOOL)animated {
    if ([self isMovingFromParentViewController]) {
        _mapView.showsUserLocation = NO;
    }
    [super viewWillDisappear:animated];
}

Hope this helps save someone a lot of time someday!

Embracing Generalism

When people ask what I do for a living I find it difficult to give a clear answer. My replies range from “Tech developer/designer/entrepreneur-type” on a good day to “I fix printers” on a not so good one.

The truth is I’ve been employed professionally in tech for the past seven years or so and my time has been pretty evenly split between server side stuff (Ruby/Java), front end work (Javascript/HTML/CSS/Photoshop), mobile stuff (mostly iOS) and general startup hustling (marketing/sales/branding).

Needless to say, it’s pretty difficult to find a job description that asks for all that and that’s cool because I’m freelance nowadays.

However, on the days when Imposter Syndrome kicks in, this “wide but shallow” approach to career development really bites. I feel like I should know a lot more about, say, scalable server infrastructure for a guy who’s been developing products for seven years.

Don’t get me wrong, I know the basics (if not more than that) for most of the subjects in my field. My problem is that I want to master them.

But I enjoy every aspect of what I do right now. I love writing server side tech as much as I love working with some awesome CSS framework. Or creating mobile experiences. And selling to clients. Or pitching to journalists. And there’s the rub: spreading myself so thin on all these different tasks means becoming an expert on them is impossible within my given timeframe. It’s a tradeoff that I’m just going to have to embrace.

When I came to this conclusion, I tried to imagine what my future might be. If I was an expert in, say, machine learning (which would probably take a lot longer than seven years but whatever) then I could probably get a sweet job at the likes of Facebook and get well paid for it. But Facebook wouldn’t look twice at a generalist like me – in fact, the best tech companies probably wouldn’t.

But there’s an upside. Being able to build, design, market and sell your own product gives you a freedom that a high-profile job or perceived guru-status never could. To be able to identify a market opportunity and take it all the way from “git init’ to selling to over 7,000 paying customers (not recurring but whatever, it’s a start) is pretty neat.

Of course that’s not to say that there’s no company out there who would hire me – when my last startup went bust I had more than a few job offers (and still do because I know a few awesome people around the tech startup scene in Dublin).

I guess what I’m trying to say is that in my line of work there’s a certain liberty in not being “any one thing”.

Interested to hear feedback on this and any stories of people who have been there/done that when it comes to this stuff.