Category: Consulting


I thought the client that sent me a short email to tell me I’m fired after 20 plus years was a little ungrateful (read that story here), but today I received this email:

“We moved to <new system> back in October, but may need a little help yet with the event coming up next month”

So not only did this client of 20 plus years fire me, they didn’t even bother to tell me.

Granted, it’s business. They don’t owe anything. They’re not required to do anything.

And, I provide the level of service I do because that’s how I want to run my business – not because of client demands or because I want their praise, but for my own personal reasons.

But, damn, that’s cold and it hurts.

Are you trying to keep your rates low to help out your clients? Do you go above and beyond providing quality service & support? In short, do you think your clients appreciate you? Don’t be so sure.

Update 2/13/18: So of course I get the call. The new programmer has been working for 3 months and can’t quite get this registration system working. Could I maybe, pretty please, get the website they said they no longer wanted working again, update it to all the new information, and make it live for them? By Friday.

I desperately wanted to tell them to take a hike, but I am a fool like to provide great service so I agreed. I did charge them a $500 “rush job” fee though.



Do You Own Your Server?

My client has a fairly normal setup for his cloud application  – he pays a hardware/OS guy a monthly fee which gets him a server and support when he needs it. Everything is fine for years until Hardware Guy sells his company to New Hardware Guy.

New Hardware Guy is…uh, how to say this politely… a complete dickhead. This comes to a head last week when the new antivirus program is causing problems with the has-worked-perfectly-for-20-years VFP app. New Hardware Guy insists that’s not the antivirus causing a problem, refuses to give password to the antivirus so I can tweak settings, won’t tweak them himself, claims that this 20 year-old software was never meant to be multi-user, and just, generally, being a complete dickhead.

Finally New Hardware Guy fires my client (thankfully, not in response to an email from me, but an email from my client). Which would be fine since the guy’s a complete dickhead, but New Hardware Guy controls the server.

So now my client has a month to get a new server in place, setup everything, and for me to get the app and 20 years worth of data transferred. Major pain in the ass, huge time sink and huge expense. For nothing.

So if you don’t control your own server or your clients don’t control their servers, I’d really think about changing that on your terms, not when some dickhead makes it a crisis.



Mercado API

My travels through Reseller API land continues.

Mercado is a reseller site specializing in Central and South America. We’re using it to sell in Mexico and Brazil. It’s a nice service in that it takes care of the shipping, exchange rate & customs issues that come up with international trade. Specifically, you can upload your products with the price you want to sell it for. Mercado, when it presents your product to a customer, adjusts the price for all of that. You get the dollars you want, they handle the rest.

Documentation for the Mercado API is very weak. First off, there are a couple different APIs floating around, but the one you want is the Cross Border Trade (CBT) API. That’s just one lonely PDF without cool hyperlinks, a discussion forum, a sandbox for testing calls, or any of niceties some APIs have. Other things you want, like how do I actually ship a product once I get an order, aren’t covered in the documentation at all.

Like Jet, Mercado does come with a test URL where you can test your API. Also like Jet, this API doesn’t really work:

  • While you can publish a product to the test site, you can’t view your product.
  • The live site requires an API call to Publish your product. This doesn’t work in test so you can’t really test out your full process.

Mercado support has been pretty bad. It’s taken weeks at times to get answers to simple questions.

One gotcha, that is not covered in the documentation, is that Mercado limits the number of products you can have at the beginning. We were limited to 1000 products right at the beginning (we have 400,000 in total). Once an order had come through and we fulfilled it, they raised our limit to 80,000 products and we were told “let’s see how that goes”. We’re still waiting to get our full catalog active on Mercado.

Update 11/29/17: Like Jet, Mercado’s portal doesn’t work. There’s a place where you can search for one of your products – but it doesn’t do anything. That leaves you no way to lookup a specific item, see if it’s live or what the listing looks like. There’s also a filter there with “Products with Sales” that shows nothing even though we have sales.

Amazon Web Service – Insufficient Capacity

Update 3/1/17: So it looks like Amazon was having trouble yesterday. Let’s assume my problems were related to that, not a problem in this service in general. Hopefully things go more smoothly moving forward.


I tried to jump into Amazon Web Services today to explore the possibility of a hosted application. Pretty cool stuff, I setup an instance to test some things out and setup a second instance for a client to look at things.

Then things started going wonky – I couldn’t get the Windows Start menu to come up in one instance. Tried rebooting it – no help. “I’ll just stop it,” I thought. And, being cheap, I thought “let’s shut down the other down as well, don’t want to get a $3 bill from Amazon if I go over hours”.

Then the client calls and wants to test things out. “No problem,” I say. This stuff is like magic. I just go to my cloud interface and start that baby back up. When I try, I then get this:


It’s been three hours now and I can’t restart either instance. The client is not impressed. I’m not impressed.

Stripe Metadata

Stripe is obviously good for charging credit cards. Subscriptions & Plans work great for SAAS. A feature that is not so obvious but I’m finding really useful is Stripe’s ability to add metadata to a client entry. Metadata can be any name/value pair and looks like this in the Stripe web interface:


So what can you use it for?

I have a software program I sell that comes with a free 30 day demo period. I put the expire date of the demo period in the Stripe metadata. I could hide that in the data of the program in one way or another, but what happens when a potential customer calls and says they’d like a little more time to test out the software? With the data in Stripe, I can easily go into the Stripe web interface, change the date, and they’re good to go.

I also put the version number of my software in Stripe metadata. When a tech support email comes in, I can easily check for myself what version of my software they are using.

Since it is demo software, I also store the last time the software was used. This let’s me see demos that are no longer being used.

On a simpler level, I can store name/phone number/email information in the metadata. Again, when that tech support email comes in, I can figure out what company it is and can call them back if need be.

Updating Stripe metadata is straight-forward using the StripeX library in VFPX:

* Create/Update the Stripe customer record
oStripe.AddMetaData("Last Update", TTOC(DATETIME()))
oStripe.AddMetaData("Expire", DTOC(lExpire))
oStripe.AddMetaData("Version", oVar.zAppDate + ": " + oVar.zAppVersion)
oStripe.AddMetaData("Active Count", TRANSFORM(lActiveCnt))
oStripe.AddMetaData("School", lName)

lCustID = oStripe.Customer(zsysvar("CustID"), lName)

Teamviewer – Two Places at Once

Last week I bit the bullet and bought the full version of Teamviewer and I already loving it. Having clients do Help > Start Remote Control from my app’s menu (and then my code is simply run / TeamView—-) is worlds easier than directing them to a website to download an EXE.

Today I had a client trying to move my app from one computer to another. They were having trouble as clients sometimes do. I was on the new computer, but needed files from the old computer. So I had the client start remote support on the old computer, while I was still connected to the new computer…. and it worked. I had two sessions of Teamviewer running connecting me to both computers at the same time.

I had them up and running in 10 minutes with no hassle. Pretty slick.

TeamViewer – Customize Remote Control

After a couple successful months with the free Teamviewer, I finally bit the ($800) bullet and bought the full version. Yeah, that feels expensive,  but I figure it will eventually be cheaper than the monthly or the pay-as-you-go services.  :: crosses-fingers ::

One of the nice features of TeamViewer is that it’s a simply EXE that the client runs to start a remote control session (Teamviewer calls it Quick Support). I can distribute this EXE to my clients with my app and call it directly from my VFP app — no walking them through a download from a website, trying to find their download folder, and then getting them to run it. Very easy.

When a user wants support, their name shows up in my TeamViewer admin panel. I just click on that to start the support. Here’s a user named Administrator wanting support:


Another nice touch is that you can customize the program on the client to look how you want. You can add your logo, change the text around, and change the colors. So my clients see this customized version rather than some confusing screen with some other company’s name on it:


And, you can have multiple quick support screens. So one group of clients get the one above, while other clients have this one:


Easy to use, easy to implement to the client, customizable so it looks like my product, and – hopefully – a price tag that breaks even in not too long.

Gotcha: One gotcha to look out for. The EXE you’re sending to your client has a got an ugly name like “TeamViewerQS-en-idXXXXXX.EXE”. If you change that name, it will still work but it won’t show your customized screen. You have to use that file name to get your customized screen.

Word Reverting to Merge Fields

Ran into this rather bizarre problem with a client today. They have a lovely merge document that my program creates for them in Word. It has a header that looks like this:


In some cases, the user will go in and make changes to this document after it’s created. They might delete the last couple paragraphs for example. When they do that, the header in the document will suddenly turn to this:


The merged data disappears and Word reverts to merge fields!

Googling “deleting lines in Word document causes merged data to revert to a merge field” didn’t turn up anything.

Playing around with it, I discovered that it only happened if you deleted to the very end of the document. Curiously, at the end of the document was a single, invisible character. As long as that isn’t deleted, the merged data stays put.


Remote Access – TeamViewer

Finally got fed up with LogMeIn’s nonsense (price & program changes) and went looking for something else.

Found TeamViewer which seems a good solution. I only need remote access to my computer when on the road at this time, which is free. Seems to work smoothly. As a bonus, it has an Android client. Will look into it’s other capabilities in the future. Interestingly, it’s got a single purchase price rather than a monthly fee.

Looked into MSP Anywhere as well. While the company and product names are really horrible (what does MSP mean? N-Solar? What does that have to do with software?) and the website is equally horrible at explaining their product and what it could do, it has some nice features. It has the standard remote unattended access and an Android client. You can also create a “calling card” (another horrible name) which is an EXE you can create and distribute to clients. They just run that EXE to give you access to their computer. Pretty slick. At $49/month it’s reasonable, but quickly ends up more than TeamViewer’s $800 or so flat price.

Mailchimp Deadends

My client email list finally outgrew the “just use Outlook” phase and I needed something a little more robust. I turned to Mailchimp, probably because I’m cheap and Mailchimp is “free”, but quickly ran into some problems.

  • It’s free, kind of. You have to pay to use automation emails (for example, someone downloads your product and you want to automatically send them a series of emails over the next few weeks). It’s not super expensive for a small list, but you do end up paying.
  • You can have a series of emails you want to send to a subset of people (say, to all the people who downloaded your product last month but didn’t purchase). That’s easy. But if you want to send that same series again next month, the process of adding new people to that series if pretty clunky.
  • Once you have an automation series live, you can’t change it. You can edit the emails in it, but you can’t add new emails to the series or re-arrange the order of the emails.

1 & 2 I could probably live with, but #3 is a deal breaker. I’ve got a lot to learn about marketing still and need to make changes to things. So what are you using? AWeber? Constant Contact? Convertkit?

Update 5/17/2016

Constant Contact: Requires $45/month package to do email series. I’m still cheap. Next.

ConvertKit: Looks interesting, $29/month for up to 1000 subscribers.

AWeber: Looks interesting, $19/month up to 500, then about the same as ConvertKit. My list is smaller than that right now, gave it a try. Campaign feature is nice, let’s you rearrange to your hearts content. Does what I want – but… it doesn’t tell you what is going on. No numbers for how many subscribers are in the queue or how many people are at what steps. Support says it’s “in beta” and “those features are coming”. Also, discovered a bug within 1 hour – support says “we know about it, working to fix it”. So not a great start so far.

Update 5/25/16

AWeber: Tried to get into it. It just felt “off” – everything was a little hard to work with. Few things in “beta” that didn’t work quite right. Gave up.

ConvertKit: Imported it all to ConvertKit. Difference in price not that big. Based on subscribers rather than lists seems to make more sense to me intuitively which made it all a little easier to work with. Tag system and automation rules are pretty slick and useful. The Landing Page creator is very basic though – if you have any customization at all, you’ll be doing HTML/CSS work (it was some work, but I managed to strip down their landing page to it’s essentials so I could drop it into some of my existing pages). Other than that, pretty happy with it so far.