Sunday, June 28, 2015

Forecasting subscription revenue in Zoho CRM

Zoho CRM is only set up to handle once off deals out of the box. What should you do if you want to be able to forecast subscription revenue months/years into the future? If your customers renew every month, wouldn't it be nice to know how much you're likely to make in quarter three so you can see whether your pipeline is short or not?

Here's a Deluge custom function that you can hook up with a workflow to automatically generate potentials for future months. It won't duplicate existing potentials so you can set it up to run once per month and make sure you always have the next 2 years worth of revenue forecast.

Ideally you'd also have a function to change the status of future potentials when the master potential is modified. (E.g. if a customer cancels their subscription, the future potentials should also be nullified). Let me know if you'd like that function and I can build it for you:)

Friday, June 26, 2015

Overcoming Application Fatigue

How many apps do you have on your phone right now? I have 178. Of these, I have used 45 in the last month - that's 25.2% of the total. What's happening here? Clearly I thought these apps had some merit or I wouldn't have installed them in the first place. But at some point (or several points), I reached app overwhelm and abandoned all but the tried and tested ones.
Not another app!

To give you an example, I must have tried out over 20 project management systems. I started with Evernote, graduated to Zoho Projects when I had to involve other people, then moved to Podio, then moved to JIRA, then started using Trello as well plus a bunch of Google Spreadsheets. Eventually it all became too much and I returned to the killer app: paper..

As a software developer, I feel like a bit of a traitor to the cause. If I can't handle lots of apps, then how can anyone else? I occasionally come across lists of '99 MUST USE APPS!!!' and feel almost nauseous. I'm barely coping with the apps I have right now, how am I meant to handle more?

Apparently I'm not the only one. A month or so ago, an industry connection told me that he'd abandoned a CRM rollout because his staff were suffering from application fatigue. They were already using three different apps and the thought of struggling up another steep learning curve was enough to have them ducking for cover back to a simple Google Spreadsheet.

So what are we to do about it? There's obviously utility in having lots of apps otherwise people wouldn't make them or buy them. I genuinely do prefer the user interface of Podio or Zoho Projects over paper (my handwriting is terrible, it's easy to lose bits of paper and it's hard to reorganise tasks without squiggling and crossing out everywhere).

Wah? What was I meant to buy from the shops again?

But I really don't like the overhead of having to wait for an app to load. It might only be a couple of seconds, but that's enough time to lose my train of thought.

Plus I'm likely to get distracted if I open another window whereas the only popup ads you'll see on paper are from those delightful children's books.

What's more paper allows me to have a 'multi screen' effect. I can have my code editor open on my laptop and my task list next to me on a piece of paper.

How might app developers draw lessons from paper?
Here are three ideas I have:
1. Explicitly encourage people to use your app in a multi-display environment: research backs up my preference for having a notepad next to me. According to Microsoft, NEC and Apple (no bias at all I'm sure!), people with multiple monitors are far more productive. To make things more objective, this 2014 study (not funded by monitor manufacturers this time) found that researchers could be 36.5% more productive when using two displays to conduct systematic reviews. Most apps have an introductory tutorial that explains how to use them. Why not say outright: "You'll find it much easier to use <insert-awesome-app-name-here> if you get a second monitor or set up your iPad next to you so you can glance across rather than having to switch windows on your laptop." I've never seen a piece of software that has explicitly suggested this.

2. Focus on interoperability: the great thing about paper is that you can slot it inside a notepad or punch holes in it and stick it in a 3 ring binder. Men may be their own islands but apps should not be. What annoys me is when I can't get my data out of an app to connect it to another tool. I like Google Spreadsheets because it's so easy to copy and paste data out.

3. Don't be unique: I get put off apps when they have unique user interfaces that I haven't seen before. Notepads come in all sizes and colours but the fundamental process of writing on them is exactly the same. All I need is a pen or pencil and I'm sorted. With apps though, it can be incredibly confusing if the developers haven't followed good UX practices. This is where trends like Google's material design standards are so useful. Even if the standard isn't optimal (e.g. material overlay buttons can be annoying), at least everyone is used to using it.

How might users avoid application fatigue?
1. Get a second display. As mentioned above, it's a lot easier to use multiple apps if you have more than one display. If you don't want to use a second monitor, take advantage of your phone or tablet. One example could be to have your task list open on your phone and your main activity on your computer. If you have an idea while you're working, don't switch tabs on your computer, just open up your phone and put it in there.

2. Slow down: just as you shouldn't try to master more than one habit at a time, nor should you try and learn several apps at the same time. I've done this on many occasions and what ends up happening is I get overwhelmed and ditch all of them. Better to choose one kind of app (e.g. book keeping), experiment with a few options, choose one you like and then focus on learning the traps.

3. Customise your apps: out of the box, most apps won't meet your needs. It's impossible for the developers to get everything perfect for every kind of user. You'll need to spend some time yourself (or engage a system integrator) tweaking the settings and integrate them with your other systems.

4. Connect the dots: the bane of anyone's existence is double entry. If you have to type something into two places, chances are you'll ditch the software in short order. Look at using services like Zapier or Cloutex to synchronise your apps so they play together nicely.

Interested in your thoughts. Have you experienced application fatigue? How do you avoid it?

Wednesday, June 3, 2015

Add related Notes to a Zoho CRM Contact from custom script

This post is a response to a question on the Zoho CRM forums:

Is it possible to relate additional notes to a Contact from a custom deluge script ? 

I guess it could be done by calling the external API postUrl() but I'm wondering if it can be done directly by something like zoho.crm.create()

It is indeed possible. Here's a code snippet:

And the outcome:

Zoho CRM Custom Commands for a list view

This post is in response to a question on the forums:
"Hi,Using Zoho CRM, I need to provide my users with some custom commands on the Contacts view list. These commands would invoke a custom deluge script."

I've faced this issue in the past. My solution is as follows:

1. Create a checkbox field for the Contacts module called "Run custom function"

2. Create a workflow that checks for field updates to the "Run custom function" field

3. Trigger a custom function from that workflow that does whatever you want and also resets the checkbox to false so that the user can trigger it again. For an example of a custom function, check out my post on quickly generating call logs.

In this way, a user can mass update the checkbox to run custom functions on all of the records.

searchRecords with multiple criteria in Zoho CRM API

NB: this blog post is no longer relevant as API v2 lets you use searchRecords with multiple criteria :)

I discovered something really cool tucked away in the Zoho CRM forums today. For the history, check out this thread. In summary, the searchRecords API task in Zoho CRM is impossible to use if you have multiple criteria and in general it's pretty annoying to get the single criterion right. In the forum thread, Zoho Support advised that you can actually use getRecords with a view name. This feature is not documented on the getRecords page at all but I can confirm it works:D

This is really, really cool. It's going to make my life as a Zoho dev much easier! Instead of having to do something really inefficient and ugly like:
leadRecords = zoho.crm.searchRecords("Leads","(Created Time|<|" + yesterday_date +")",fromIndex,toIndex);
for each ele in leadRecords
lead_source = ele.get("Lead Source");
createTime=(ele.get("Created Time")).toDate();
info "Found lead with create time: " + createTime;
if(dayDiff  <=  2 && lead_source == "")

I can just create a view called 'ClientWebsite leads in last 3 days' with relevant criteria and do:
leadRecords = zoho.crm.getRecords("ClientWebsite leads in last 3 days"); 

If you've struggled with cludgey searchRecords tasks in the past, you're going to love this trick:D