Business Services | Edoceo's Blog

Stripe Rubbing Salt in the Wound

Many moons ago we had our account with Stripe abruptly closed because one of the services we offered was related to the marijuana business. While we thought of ourselves as a regulatory compliance inventory control solution, they did not. It’s a violation of their TOS.

This came at a pretty critical time of growth for our up-start company. It took us a few weeks to find another vendor who was happy to receive thousands of dollars from us in processing fees.

Since then other businesses have come on-line to compete with our offering, great for the consumer and great for the industry. It’s growing rapidly and many of the projections show this kind of growth for at least the next three years. We are one of the more mature offerings in this young space and have built collaborative relationships with some of these businesses.

Imagine our surprise to find out that some of them are using Stripe! And Stripe knows that these businesses are engaged in the marijuana trade! It’s in our names, it’s advertised loudly on our respective home-pages, Stripe claims they review businesses using their platforms for compliance.

Our last posting on the Stripe incident attracted a response from Patrick, we emailed him for clarity on the subject. We only received a response from their generic Support account where they stated they couldn’t comment about other accounts. Fair enough.

What’s really aggravating however is that, while we were booted at least two of these other businesses are allowed to continue to operate using Stripe.

It’s a suspect situation when a company with the wide reach of Stripe chooses selective enforcement of the rules they claim to operate by. Maybe they could “re-accommodate” our marijuana business. (we asked, they declined).

I’m Done with Google (Part 2)

A long while ago I wrote about being Done with Google. They have simply taken over too much for my taste. Frankly however, I went “all in” on Google around 2006 or so. I moved many domains into the Google Apps and enjoyed all the services they offered. But, as they grew these services suffered; my most critical issue then was that inbound messages were getting dropped (because of how Groups had changed for Businesses over time) – it negatively impacts my customer service. So I started the migration out.

First let me say that you cannot escape Google 100%; just not possible. If you want to have a business presence on the Internet you must engage with Google and other large players (Twitter, Facebook, etc). So, we still have to maintain a Google Account – but we are moving towards one, based on a Gmail address.

As I mentioned before I have/had a number of domain accounts with Google using Mail and, as it turns out, many other services. Some I could just drop and had so little content I didn’t care but for the Edoceo brand I had loads of stuff – from Blogger (migrated to WP); Apps on the Play Store, YouTube, Google+ Pages and all that jazz.

Using a single “unified” Google Account (already existing) I started with a spreadsheet tracking all domains I had moved into Google (>5, <10) and then all the Services in there; then all the Accounts.

Last entry on this topic was over a year ago. It’s taken that long to audit and build this list. It was quite shocking to see how much interaction/integration with Google one human (or one company) has.

Stay tuned for the longer stories of migration of various accounts & services.

Issues Migrating to CloudFlare

I’ve been working to migrate one of my systems over to CloudFlare which on it’s face appears to be a pretty good service. I created an account, entered my payment information and began evaluating their services. I was not impressed with help pages that had images fail to load (due to 404s). Pressing buttons that generated some vague error message (request failed #1053) and froze up pages were also a bit of a turn off. Then the real pain started.

Switching NS

The first thing that CloudFlare is forcing me to do is flip over to using their NS. It’s handy that they’ve crawled my existing DNS and imported a bunch of the necessary records. That is a good thing. However, I don’t want to migrate NS until I’m sure this is the right path. Switching NS takes about 24 hours, so if there is an issue I’ll have to wait another 24 hours to roll-back the changes. I’m not willing to risk my site availability for 48 hours.

Blocked on SSL

Even without switching the NS records we can see what IPs CloudFlare would resolve my host to (using dig $hostname @ns.cloudflare.com). I then tweaked my /etc/hosts file to reflect that and attempted some connections. CloudFlare assures me that SSL will work. However, CloudFlare SSL doesn’t work until the NS has been switched. And I cannot switch the NS until I’ve verified that SSL works – and I don’t like to wait 24-48 hours to determine if I just broke a web-application that generates revenue.

Support Fails

I asked for clarity on the situation from their support team and explained my risk-averse position. They basically told me just to flip the NS. I don’t think the understood the request.

Sales Support

I contact their sales team. I’ve signed up for a paid product; the marketing materials said that things would be possible – things that are not working. The sales guy reported that with CloudFlare the SSL and NS are tightly integrated – only after NS is switched and verified can the SSL be issued. It was not a joke. First switch NS and hope it works; after NS has been moved (and traffic is routed via CloudFlare) can the SSL be issued. This whole thing runs on SSL. So switching means that I’m exposed to risk that my NS/DNS stuff gets messed up and that while that is happening the SSL will be broken too.


CloudFlare is a reasonably good product and the protections they offer are good and priced well (at $200/mo). This onboarding process sucks however. It’s not even possible to evaluate the outcome of the work you will be attempting – to ensure that things will go smoothly. If there was a mistake it would cost me more than I pay CloudFlare in a year.

To actually evaluate this process I’ve had to start off with a new, throw away, domain; get it configured similar to my primary, purchase (and wait) for it’s SSL certificates then flip to the CloudFlare NS, wait to see what happens – all while monitoring for breakages on this test domain.

The lesson for other technology firms is: Don’t make the risk of switching cost more than the services provided; Allow customers to get a full evaluation rather than forcing them to take high-risk first steps – just on on-board with your product.

Getting Fucked by Stripe

At Edoceo we’ve been using Stripe for a very long time (2, maybe 3 years) without issue. Part of that may have been because our volume of CC payments was so very low. For our little spin-off projects we’ve mostly used PayPal and using Stripe for consulting invoicing was dumb – most clients there paid via wire.

A few months ago we started using Stripe as they payment gateway for our marijuana regulatory compliance software: WeedTraQR – which is sold as a SaaS model.  They have just kicked us off are giving us five days. You’ve seen this warning, Stripe has threatened other Start-Ups.  So we were sort of prepared.  Here is the message we got – it’s the same copy they send to everyone.

Hi David,

Thanks for signing up with Stripe!

Unfortunately, we will need to stop offering service for edoceo.com/. Stripe can only support users with a low risk of customer disputes–after reviewing your submitted information and website, it does seem like your site presents a higher level of risk than we can currently support.

That said, we understand that there may be some work involved with moving your business away from Stripe, and we’re happy to help out with this process by giving you 5 days to switch to a new provider. After that, you won’t be able to accept additional charges on your account, but we will continue making transfers to your bank account until you receive all of your funds[1].

We’re sorry that we can’t offer ongoing service, and we wish you the best of luck with your business.


[1] https://dashboard.stripe.com/transfers/overview

Why were were booted from Stripe?  Is it because we are in the marijuana industry?  We don’t sell pot, we sell software. They made no mention of this. We have zero customer disputes over our entire history.  In point of fact this is not even a customer dispute!  We were only trying a partial refund.

We moved a customer from one subscription plan to a less expensive plan.  Internally Stripe handles all this magic, crediting the customers account and pro-rating the next subscription.  This doesn’t issue an actual refund to the customer – it’s just an accounting trick inside of Stripe – they keep the money the whole time.  Neither Edoceo (or WeedTraQR) not the Customer has access to these funds (about $600) until the next subscription cycle.  I had simply inquired about how to issue and ACTUAL REFUND for the difference rather than leave the funds un-allocated in Stripes pocket.

It’s pretty clear to me, if you use Stripe and then have ANY normal business issues they get ready to boot you.  If you want to issue an actual refund for the difference between two subscription plans and not use their pro-rated magic it’s also a red flag.  Even when it’s not a customer dispute.  Maybe Stripe makes money on the arbitrage and actually REFUNDING will threaten their business model.

Anyway, fuck Stripe.  They can shove the five day window up their ass; we’ll be moving on to providers. I’ll be encouraging the other start-ups I advise to make a contengency plan and/or begin migration process right now.


Crappy APIs – Asana

We currently use Asana for some task tracking; it’s a pretty good system. However, I like to do extra stuff with my data – visualise my workflow (kanban?). Asana has a view, ‘Tasks by Project’ which is close, we use these Projects (but they are really Sections) for stages (Icebox, Talk, Make, Test, Beta, Live, Done). One would think that it’s easy to query, via some API the same view of active tickets by these Project (section) groups. It’s actually pretty crap.

Query For Tasks

Well, first we get a list of tasks, like /tasks, from the REST style API.  That makes sense.  But all we get is an array of objects, with ID and Name only!  No additional details.  To find these Secton levels, we have to identify Tasks with names that end with a colon ‘:’ #FFS  This means that we then have to query each task for the details – 2500 additional queries.

Did I mention that we have to retrieve ALL tasks?  This is because the sorting happens in line with the result set.  That is Tasks that appear after a Task COLON item are in that Project (SECTION!).  If you run a query to only find the recently modified Tasks, these Task COLON names don’t appear, because those groups were created more than a year ago.

Identify the Project/Section

Once a list of all 2500+ tasks has been collected, iterate each to get the full details.  Also keep track of which Task COLON the current Task appears after. When you query for Task it has a property called projects.  Which is not related to these Task COLON style Projects (in the UI) but are actually Sections.

In the Asana world there are two things that are Projects.  One are the top level Projects that are created for your teams – Engineering, Marketing, Operations.  Then, once you have selected a Project you can view tasks by Project – but this Project means the task groupings.  For example, selecting the top-level Engineering Project then viewing my Task by Project only shows Tasks in Engineering – not my tasks in Operations or Finance.  It does show my tasks grouped by these Section: dividers.

Like I said, grab the full list of tasks, iterate each and keep track of NameCOLON stuff (/:$/), query each object (cache them too!) to check state, then show in the groups.

Keeping Updated

Not to bad here, I don’t have to requery each Task.  I still have to query/iterate the entire Task list to find the proper Section – but I don’t have to check each task this time, cause I’ve cached the first results.  I then make a second query to Tasks API for the items that have been updated in the last N hours.  Now I only have to re-query those N items.


It’s pretty bunk I have to maintain so much of the Asana state on my end for what could (should?) be a simple REST query.  For example, the Task listing API could include a little more Task details, or could provide a filter for only not-completed tasks.  The Task Object or even the Task list (when extended) could have an attribute like: “section”: { “id”: #, “name”: “Colon:” }.

There are a few mentions on Quora, StackExchange and even Asana’s own site that these will be addressed but so far the progress has been very slow.

Five Warning Signs about your Technology Person/Team

It’s almost unreal how much your business depends on technology. Computers, Internet, Mobile, Social even the old-school fax machine is technology. It is a critical component of your business.

Over the past decade we’ve seen numerous times where the technology needs of a business were not being met. Sadly, many business operators are yoked to the wrong fit for their technology providers. Are the consultants, developers, engineers, technicians you work with on a daily delivering the value you need? Are they contributing or cramping your business?

Here are five of the behaviours that, at least according to us, should be taken as warning signs. These actions, or in-action, could be costing you hundreds or even thousands of dollars.

Warning Signs

Solitary Knowledge

Do you have only one? Or perhaps one primary who handles 80% of your technology needs? What happens if your one go-to is not available?

This is a simple continuity issue. If your mission critical systems are in the hands of only one person there is a very large single point of failure. If this person is unavailable what happens? For many the work stops, or is delayed. Think about the difficulty (both time and cost) with finding a replacement.

It is business-critical to have more than one person to depend on for their mission critical systems – such as revenue generating web-sites or in-office desktops.

Captive Knowledge

How widely known are your systems? Where is the documentation? Network maps? Server information and change-logs? Code documentation? Wiki? Source control?

All to often this issue is tied directly to Solitary Knowledge – why document when the team is only one? Without documentation new team members have to scramble in the dark to "get their head around things". This is wasted time for new members. Some times the idea of this sunk-cost when brining them on-board prevents the expansion!

If these kinds of things are not available it becomes difficult to on-board new team members. It also makes comparing new members to existing members impossible. That unshared, internal knowledge that existing team members is being hoarded up. If fact, this prevents new team members from performing to their best ability.


Is your Tech-team "never wrong"? Is their way always the "best"? How do they respond to new ideas? How do they respond to outside review of their work?

Tech folks are known for their arrogance/confidence – and lets not confuse that with infallibility. If your tech-team responds with declination towards others work then look out. When asked about others work do they claim they can do better or faster? If they say yes 100% of the time be wary – nobody is that good.


How about their review of others work? Or their reactions to the new team members?

Perhaps you’re fortunate enough to bring another person to the team – how does your Alpha member behave? Is the new guys work "terrible"? Is there heated discussions where the Alpha raises their voice first? (Big warn!).

Too often we’ve seen these first members belittle, degrade and insult new members. A bit of hazing is expected but obvious animosity creates an unstable team. It’s a clear indicator that the Alpha is not the right person for the job.


Are they missing deadlines? Are projects getting pushed later and later? Is working piling up behind them?

If the previous four conditions exist you won’t even be able to track this. But, if you were, how do they respond when asked "why was this project two weeks late". You know what responsibility sounds like and if you don’t hear it then look out.

Many times these Solitary, Captive, Infallible, Superior tech-types have zero accountability – with no basis of measurement. Which documentation and shared knowledge would demonstrate. Put these systems in place. Soon!

Bottom Line

Don’t be afraid to prove-out the people your business depends on. Ask them tough questions. Ensure that you are not critically dependent on one person or team member. Ensure their work stands-up under third party review. Look for positive attitude towards new ideas and team-members.

Here is a check-list of things to have that can help you build an accountable, dependable and reliable tech-team.

  • 2+ humans on the task.
  • Documentation System – Wiki or something.
  • Issue/Work Tracking System – track assignments, estimates and completion.
  • Outside Review – find another person/team to check things out.
  • Outside Assistance – bring in other helpers on some tasks and gauge response.
  • Manage their Workload and hold them accountable


CapLinked Doesn’t Work Right, has No Value

CapLinked found our company, through the magic of the Internet on May 17th 2012.
Since that time they have been bombing our inbox on a weekly basis with worthless messages.

What is CapLinked

CapLinked claims to be a service that helps to make private investment easy and you find Investors and Advisors for your business.

But Edoceo Doesn’t Trust Them?

Nope, For a few simple reasons.

Contact via Generic Mail Address

We never contacted CapLinked, instead they contact us. Through a generic email address in our domain (info). Lame. A better demonstration of their legitimacy as an organisation would be to contact through less generic. And, of course our account was created without action on our part so our first order would be to reset the password on an account we never made.

We’ve had multiple contacts with investors, advisors, angels &c; not once has that contact come through a generically guessable address. Quite the opposite in fact, contact was made via telephone or LinkedIn.

Pre-Fab Account Creation

The initial email was because CapLinked had already created a profile for us! Unfortunately, the profile was incomplete which means any of the other CapLinked users looking at us would think we are lame due to the lack of information on our profile.

It is not cool to automatically create a public profile for a person/company with incomplete information and then ask them to claim it. CapLinked should have waited for us to come to them (eg: like CrunchBase does it).

Non-Functional Un-subscribe

Naturally we tried their un-subscribe option.
That did not work.

A sure sign of a poorly operated company is a non-functional un-subscribe system.

Claim Feature Broken

So, finally we tried to claim our company. We were sent a “Claim Edoceo on CapLinked” email with a simple hyper-link. We followed it (incognito window of course). The page showed our incomplete profile with a clearly defined “Claim this company” button – which I clicked.

Within a few seconds I was sent another “Claim Edoceo on CapLinked” email – exact same text, formatting and message – except the hyper-link hash was a bit different. So, naturally we followed that link again. That resulted in the error message: “This company has been claimed by another user.”.

Duplicated Companies to Claim

Once we finally get into their system it’s odd that there are two profiles for Edoceo – but both have the same stub. Lame.


First you make an incomplete profile of my company and notify our generic contact address it exists. Then both the Un-subscribe and Claim features of the system don’t work. Duplicated company profiles and the only way to get a verified account is to pay $40/mo. Edoceo will stick with traditional methods of engaging investors, advisors and clients.

Edoceo fixes problem like these; we build systems that work. Perhaps CapLinked should contact us to get their system operational?