Companies bad at banking

I was discussing with a colleague the other day how so many companies are so bad with banking.

In some ways we have been lucky, but to be fair we have worked at it and made systems that work.

Your payment will not appear for 3 to 5 working days

I see this a lot when paying people - we live in a world of "fast payments", at least in the UK, and if I (personally) pay someone they will have the money within seconds. I mean technically the process can take longer, but in practice it does not.

I had some issue with a loan company for one of my kids, a settlement amount paid by fast payment and they still considered it several days later and extra interest. I was very much on their case from technical and legal points of view until they caved.

So what the hell are companies doing?

If someone pays A&A via normal UK fast payment, we have the money, and, in literally seconds, they get an emailed statement showing their account with the payment received. This is all thanks to Monzo web hooks. I am impressed with Monzo handling this well.

But even without that, there are ways to pull from Open Banking, allowing a payment to show on the banking day it arrives, but polled. Even if only polled once a day a company can see they are paid that day. Poll a couple of times and see money as it comes in during the day. It is not hard! It works for all banks.

Your refund will be in 5 to 10 working days

This is slightly harder, in some ways, as sending money generally needs more business controls.

We do BACS direct credits meaning we can send money on 2 working days if needed, and automate it all with direct submission to BACS.

In special circumstances we can do manual fast payments, but to be honest that is rarely needed from a business point of view. One day we may have that sorted too with the BACS system. But obviously such systems need careful business processes in place to avoid errors (either bugs or errors by staff).

Indeed, we automate refunds up to certain levels with two day BACS as a matter of course. But they have limits and above those I am involved (as director) confirming them.

But so many companies are so bad at this, sending cheques (wow) or "refunding DD payments". When Bulb sent me money it was dozens of payments that were each the amount of a previous DD.

Banking should be simple

I wish Open Banking had given companies and individuals control of their own bank accounts properly. They could do it all and all be like A&A. There are some companies offering this indirectly but why is Open Banking not something that is available to the account holder as standard - that would make sense.


Defensive coding

Business systems can be written over long periods of time and in a variety of scripts and languages, and we (A&A) are no exception. Some of the systems started life more than 26 years ago and even before A&A existed.

Obviously all of the code, and scripts and web applications and so on have been updated over the years in many ways. If nothing else the advances in security best practice alone are reasons to update systems.

One aspect to the way some of the code has been written is "defensive coding". This is basically assuming the worst can happen (either by accident or malice by an attacker) and trying to ensure the outcome of such will always be "safe" in some way.

The way we (A&A) do Direct Debits is one example of this. At every stage in a very complicated set of processes and scripts we try to assume the worse and take the safest action on failure. And one area of this is the notices sent to customers. There are a load of rules we should follow, and (seemingly unlike so many other companies) we try very hard to follow the rules very very carefully.

For example, if we have notified a customer that we will "collect £20 on, or immediately after, the 1st of each month" we record that fact and try to ensure that DDs only go in if that is the case. The rules allow up to 3 working days later, but the second we are not collecting £20 exactly, or it is not exactly on the 1st or within 3 working days, we cannot rely on that notice and so the DD is not allowed. Indeed, if we notify the customer anything else such as cancelling a collection, we discard the record of that notice so a new notice has to be issued.

Another aspect is checking it all worked, this is a key step for defensive coding - scripts and systems to check things that should work have worked. Such a system flashed lights, dinged my phone, and even set off the very loud teletype in my hall in an attempt to make quite sure I knew things were not quite right and that some intervention may be needed. That said, the comments on Mastodon and call from staff were also a clue something had happened!

So what did happen yesterday?

With all of this in mind, shit happens, and did yesterday, and a load of A&A customers were told their 1st June DD collection was cancelled. So what happened?

The root cause was an update to one of our billing systems SQL servers. We do updates to all sorts of servers all the time, and it seems the timing of this was unfortunate. Many updates are to ensure all security patches are applied, and so done as soon as possible.

Once again, defensive code - the systems generating billing records, e.g. for calls, queue them up until the SQL server is back. And the billing system using these databases to make bills will re-run a few hours later if there is any issue accessing the data so just delaying bills slightly.

The problem is that there was, apparently, a small window each month where there is a process of "working out what people will be billed in two working days". This is a test/dummy billing run. This is done to confirm the regular direct debits are as expected and ensure they are submitted to BACS two days in advance, so two working days before the 1st of the month, i.e. yesterday. That was the system that failed to access the database, and unlike normally billing runs, which can run a few hours later, it left a load of customers set up to not be expecting a bill on the 1st.

This is a small window, and as a result it meant that a load of customers were not expected to have a bill on the 1st, even though they will. If the bill on the 1st had an issue it would have run a few hours later and still billed. But this was a test/dummy bill run in advance and run only once a day.

It is not just the 1st, we have billing on 4 week cycles, and every full moon, and all of these work in the same way.

What happened then is the direct debits scheduled for the 1st were cancelled because the test/dummy billing run did not say a bill was expected. The system sending the cancel emails knows to also forget the previous notice of collection. This means that not only were "cancel" emails sent, but once the bills do happen on the 1st they will need a new Direct Debit collection notice email for 5 working days to be sent - so following the DD rules.

It means people will have a DD collections on the 8th, not the 1st, and then from the following month should be back to normal.

Whilst it is a mistake, the system, being defensively coded, has followed the DD rules for notices to the letter, delaying collections, and sending new notices.

What have we done?

We have changed the logic slightly, which means this should not happen in quite the same way, but we have also made sure the ops team know not to do an update in the middle of this test billing run in future.

Sorry for any inconvenience caused by an extra week's credit / time to pay on your bills. As always we try to learn from our mistakes. And well done to my staff handling all the calls and emails today on this.


SQFMI Watchy (first impressions)

I decided to get a Watchy to play with - mainly as a learning exercise, and I think for that it will be perfect. It was not that expensive (£48.80+VAT from Mouser, and free delivery). It comes as a kit which is very easy to assemble (probably because of the hassle of EMC, CE, UKCA, etc) but it is sold as a development device so not unreasonable, IMHO.


The hardware is an ESP32, plastic case, rubber strap, battery, accelerometer, vibrator, real time clock chip, 4 buttons, a 200x200 e-paper display, USB connector, and battery charging circuit.

This is quite a nice set of hardware. My main concern is the e-paper display is not, in any way, protected, other than the recess in the case. I understand a screen protector may be available. As a watch it is slightly chunky, probably more than necessary. But it is nice. They have a milled aluminium case option as well.

Out of the box

Obviously it is a kit and needs assembly, which is very easy, but then it does work. However, I would have expected it to be a bit more slick to be honest. This has been around a few years now. Small details like...

  • Button pushes are not handled well, e.g. you can select an item in the menu and immediately have clicked the menu for the item - an example is Set Clock, which you have to press to select very briefly or you have skipped the "hour" and moved on to "minutes". Button response and handling could be a lot better. (Obviously the clock is ideally set by NTP over WIFi).
  • It lacks simple setting like time zone, even without DST, this seems like a setting a watch should have. It can be set, but by editing an include file in the code and re-flashing. The nicer default code also grabs weather but has a default city code set of New York, and you have to edit the include file to change that. A UI for that may be harder, but remember it has the option of serving a web page for more complex settings, so could handle this.
  • The 7 segment font is nice at full size but looks badly scaled down on smaller digits, which is a shame.
  • You expect to be able to upgrade the firmware, and there is an option. But the option says to go to a web site from bluetooth enabled phone, and click next. But the web site is the main page for Watchy and that has no hint of any tool for loading new code by any means. Why not have a simple WiFI OTA upgrade option?

P.S. I did not even consider, but for some, choice of 12 or 24 hour clock needs to be an option.

Trying some other code (examples)

Mouser say it works with Arduino, MicroPython, and ESP-IDF. The main reason to getting it was it works with ESP-IDF as that is what I use.

However, it seems it works with Arduino and PlatformIO. I see nothing on the web site about an ESP-IDF build environment.

I went for the simple option of loading Arduino. I don't like it, but it works, and the instructions were simple enough and only a few steps. It worked seamlessly to load new code, and that is where I found the include file for location and time zone and city.

There are a load of "example" watch faces, but they are all pretty crap. They are a fixed background and time in a different font. I mean there is one that looks like a DOS screen with time on the files listed. It is not good as a watch face really, but I see what they are getting at. But the others are all a similar theme, they just have time and maybe date in different font on a static image.

I would have hoped for something more interesting. Faces with sunrise/set, or moon phase, or an analogue face. But all the examples are boring. Now, I may well be missing a treasure trove of code somewhere on The Internet, but a poor impression to start with.

It would have made sense for the "standard" build to have a choice of "faces" as an option, all in the same code, even.

Learning exercise

As I say, the main reason is a learning exercise, so I hope to make my own code for this from scratch. This means e-paper drivers (I have done some before, so not hard), and accelerometer, and RTC, all of which should be simple. I can then make a nicer watch app for a start, I am sure. But not sure I would use as a watch. I know I have done a good job if one of the grand kids wants it when I am done. I was pondering showing solar production stats on it even.

But longer term there are a load of things I can learn using this as a test platform.

  • Ways to manage battery power, e.g. deep sleep until end of minute when updating time, and maybe the low power sub processor to check for button presses in between. That is all useful stuff to learn as they are features of the ESP32 and important for a lot of applications, not just a Watch.
  • Battery charging - I have not done battery based boards, but this has a battery and does charging. This is a good starting point to get my designs handling batteries sensibly.
  • Directly connected e-paper. I have played with e-paper but always as a "module", a display and board and some chips and a row of 0.1" connectors. This is directly e-paper to a connector on the board. This would be good to do on any design I have using e-paper. It makes it cheaper and smaller than using a module. So this gives me a way to do it (PCB wise) and a test platform.
  • Direct antenna. This uses the ESP32 chip directly with printed antenna. I have not dared do that myself. But if someone has done the work, I can copy what they did. It makes for less space and cheaper part and production than using the ESP32 modules. Definitely worth a try.
  • The accelerometer is not something I have touched before, so would be fun, but outside a watch I do not expect a use for it yet. The same is true of the RTC chip - they are generally quite simple.

Will I find the time?

This is perhaps more of a challenge. If I can get it off the ground with my own code, even just working the display, then I think I'll make a complete ESP-IDF based Watchy platform myself. I'll see how it goes.


And an update - I loaded the latest code and fully charged, and that was a week ago. It is still going. I am impressed, especially as it has been using WiFi to check weather to display and get NTP, regularly.

I am tempted to leave it until it stops. Being e-paper it should leave a time of death on its display in much the same way as an old mechanical watch in a murder mystery would do so, allowing a detective to prove the accurate time of death just after the medical examiner has got it wildly wrong.


Shoe laces

I have not posted for a bit, mainly due to the broken rib or two, broken elbow, damaged wrists and knee, and bruises, smashed glasses, and basically typing for more than a few minutes hurting.

So a simple PSA...

[yes, for those that are failing to put 2 and 2 together here, the injuries are a result of this shoe lace error]

If you have shoes with laces like this (Salomon brand) :-

There is a pocket in the tongue for them. It is no good just pushing them through the loop at the end to keep them out of the way (well, that worked on the previous shoes, but don't risk it).

Right, now time to pop to chemist for more pain killers.

Update: The stronger pain killers are helping, but very evident when they start to wear off, still.


USB Lead (and the state of modern tech and advertising)

I wanted a simple dumb USB power lead, basically from USB-A with GND and 5V to a USB-C plug, for my coasters.

I looked and I looked, I could not find anything simple. Indeed this is typical of the things I found:-

As you can perhaps see, it shows a lot of active components in the USB-C plug. Indeed, it claims advancements from 2018 (1A) to 2020 (2A) and 2022 (3A) charging, perhaps justifying these many active components.

I did not want that, I did not even need D-/D+ connecting, just GND and 5V, so I looked and looked, and eventually decided to get some anyway. Basically as long as they worked for power, I could ignore the extra "tech" that may be in there.

I suspect you can all guess what happened next...

I got an extra lead, so I could cut it open. It is surprisingly hard to cut off the plastic/rubber with a broken elbow and bruised wrists, but I managed...

Yep, there are no active components, this is, indeed, just GND, 5V, D- and D+ connected. Indeed the other side is not much more and seems to be one resistor fitted. It may be there were 2 and I killed it with a pen knife - that would be consistent with CC1/CC2 connections to tell a device this is a dumb USB-A passthrough.

So this is what I wanted, a simple GND/5V pass through.

But in what way could this remotely be an improvement from the 2018 1A design or 2020 2A design? I mean how is this remotely as depicted. How is this remotely legal advertising?

Update: They are offering me a full refund, if I ask for it - wanna bet it will be in exchange for cancelling review? TBH not bothered about a refund.


TX1812Z5 and WS2812B

I have used the classic WS2812B LED strips, they are very common, and AdaFruit do a lot.

They have a serial data line, in and out, on each RGB LED, and GND and 5V, making them ideal to make an LED strip will all programmable LEDs.

They work by sending a serial stream of short+long or long+short bits, 24 bits per LED, so the first LED "eats" the first 24 bits and then passes on the rest. A gap then means all done and they can all load the LED pattern. The data is around 1.25uS per bit, so even with hundreds of LEDs, this is really fast to update.

There are standard drivers, including for ESP IDF on the ESP32s I use.

But, try as I might, I could not find any of these common 5mm x 5mm "neopixel" RGB LED modules on LCSC/JLCPCB for an LED ring project. They had them on LSCS, and in stock, but would not pick up on a BOM on JLCPCB, or even allow a parts buy from LCSC, crazy!

What they did have is a much smaller, 2.1mm x 2.1mm, TX1812Z5 based, modules. And a Chinese data sheet!

So, tentatively, I designed boards using these and ordered. They are smaller, which is nice. The design was fun, C code to make circular tracks...

I was lucky - JLC queried the pin 1, as I did not (originally) have any pin 1 mark on silk screen, and only then did I realise the pin numbering for the 4 pins was different to the common 5x5 LED modules. So I was able to cancel the order at that point. Had that not happened I would have a number of duff boards!

Having got the pin out right, I ordered again. Then I had a slight panic. The LEDs are run on 5V, and hence a USB lead feeding the inner ring as 5V there. For 24 LEDs in the ring a USB-C will be fine. But, I spotted in the Chinese data sheet that min VIH is 0.7VDD which would be 3.5V, and I am driving from 3.3V data line as that works with a normal neopixel module. It was too late to cancel. But to be fair, WS2812B says 0.7VDD as well, and I know that works with 3.3V.

I also spotted that the timing was 295ns and 595ns not the timing for WS2812B which is 400ns+850ns or 800ns+450ns. Thankfully this would be easy enough to fix in software.

To my surprise, it just worked. The only issue was my PCB sandwich design is a bugger to solder the boards together. Timing and voltage do not seem to be an issue!

The project is a PCB sandwich, with top being a coaster for an (empty) fancy bottle on each table at a wedding. It is going to be awesome.



I have been ordering a few PCBs from China lately.

Choice of shipper...

The first thing is that JLCPCB offer a choice of shipper, and some options. The main one is pre-paid duty/taxes, or paid on receipt.

The pre-paid seems like an obvious choice, but there is a catch. The pre-paid adds more than just the UK VAT 20%, more like 25%, and, importantly, does not give a VAT INVOICE, so we cannot reclaim it. So pre-paid is basically 25% more expensive!

So post paid. And that works.

Importing and VAT

Things clearly have changed a bit, and it depends on all sorts of things, but most of my deliveries have simply "arrived" and that is it.

This is good! This is almost scary - no VAT to pay or claim. It is right, financially, as a business, any VAT we pay on import we would reclaim, just like buying anything else with VAT for the business use.

Reading more on this, it seems some couriers are sensible working with HMRC, and we gave JLCPCB a VAT number, and magically that all works out. Essentially it cancels out.

But there seem to be thresholds and things, and on at least on occasion I had a demand for VAT from courier. They sent that before it even got to customs and I paid, and no delay, which is good. The nice thing is I got a proper VAT invoice, and so could reclaim it. The annoying thing is the £5 admin fee they charge.

But mostly stuff arrives and no VAT. Yay!


But it seems there is also the possibility of "duty" on an import, and I don't think I can reclaim that.

This depends on product you have shipped, and I have learned my mistake here.

Mostly these PCBs are very much "development" boards. They are general purpose boards with a processor. But I made the mistake of marking one as "heating" because it would, but default, be used to control an air-con unit.

It seems that attracts a duty of 2% somehow. And the bill came later, long after delivery, with the extra £5 charge.

So did I categorise it wrongly? I think so - all of these boards are general purpose dev boards which seems to have no duty. I don't make it a "heating" board until it gets here and I load code. So I won't make that mistake again.

Admin fees

My big gripes is admin fees, even if £5, from couriers. They are paid to get the parcel to me and that involves a lot of costs and admin, all of which are very predictable.

But if there is duty or VAT they need the recipient to pay that - which is fine, and I can do that.

But they charge a £5, or similar, fee for handling that. They really don't need to, it is all automated, or could be, and HMRC Direct Debit them at the end of the month. The only admin/cost they have is if someone queries, and really, the query, in my case, is because of the admin fee itself, so shooting themselves in the foot here.

The problem is that I don't think the admin fee is a legally enforceable charge. They usually get away with it because they will not deliver until you pay, but sometimes they do, and chase you later.

What is the legality of this?

Firstly I am not a lawyer, but my feeling is that if this was a simple legal and legitimate charge the conversations with the likes of DHL would be a lot simpler. They are not. They were not with FedEx either.

For a start: Royal Mail have legislation to allow them to charge an admin fee. That alone tells me that there is no a legal basis for non Royal Mail - else they would not need a special law to make it legal.

I queried with DHL.

You agreed the charges.

The first argument was I agreed the charges, and the reason is that terms DHL have with the seller include a clause that: "When ordering DHL's services you, as "Shipper", are agreeing, on your behalf and on behalf of the consignee of the Shipment ("Consignee") and anyone else with an interest in the Shipment that these Terms and Conditions shall apply." And further in 'Section 5: Shipment Charges, Duties and Fees.'"

This is a hell of a stretch - why would any shipper agree to that, as they don't have authority to act as an agent for their customer to agree a contract with DHL on their behalf. I mean they could try that in their terms (and I don't believe they do), but no way that will work with most customers. Agreeing a contract as an agent is huge!. It could mean agreeing anything. I mean what if DHL's admin fee was £1,000,000? Agreed on behalf of the recipient? No customer will hand the seller authority to bind them to some unseen contract terms. And worse, the "anyone else with an interest in the Shipment" as that is not even their customer. No way that gets close to legal, in my view. And if the customer as a "consumer" that falls foul of a lot of consumer protection laws.

I pushed this, and pushed this, and stated I did not believe I had given the seller any authority to act as my agent to agree a contract with DHL.

Finally I get: "I am not advising that you have entered a contract with DHL." - yay! Huge win there.

The fee is for HMRC?

I then ask, if not contractual, what the legal bases is, and eventually get the rather oddly worded: "The legal basis is that the charges is supplied from HMRC."

Well the "duty" is, and I paid that (it was £5.09). But the extra charge is clearly not for HMRC, it is "DHL's deferment fee".

They also suggested the £5.09 was VAT not Duty, but have not issued new paperwork to say that (2% VAT?).

So this is the second lie they have told (in my opinion) to try and get me to pay.


The last resort is: "If you do not wish to pay this invoice, we are to call our customer service team and advise that the goods are to be returned to China accordingly."

This is the blackmail - pay our fee, even though no legal basis for it, or we will not deliver.

The only snag is I got the goods over a week ago.


To be honest this is, in my view, a scam. I cannot explain it any other way.

Handling the VAT/Duty is not expensive, it is simple, and something I am sure they automate. It is just one of the many admin and costs they have getting a parcel from China to UK, something the sender paid them to do.

Picking on this one thing to charge the recipient is silly. It is no different to deciding to charge the recipient for the diesel for the van to get to recipient as some sort of surcharge. It should be part of the costs of getting the parcel here, as paid by the sender.

The only reason they do this is (a) they are charging the VAT/Duty anyway so can tack this on with no effort, and (b) they can usually blackmail you that you won't get your parcel until you pay.

This is no different to a "speculative invoice scam" where someone sends a company an invoice for something that has no legal basis in the hope the accounts department will pay it. Seriously, it is invoicing for a charge that has no legal basis, not contract, just "because you can".


One possible option is to get an HMRC deferment account myself, and advise DHL, and other couriers, to use that.

I am tempted, as simpler, but it seems VAT is done specially now anyway, which is why most of my parcels have no issue. And if I ensure all my PCBs are "development" (which they are until I zap them otherwise) I probably avoid duty anyway. That said there is this magic £135 level that matters somehow, so maybe it is worth it anyway.

We'll see how it goes.


They stopped replying, and the last thing they threatened was returning the parcel to China.

Now they have sent a credit note for the £5 *AND* the duty charge. Even though I paid the duty.

It would make sense if they had returned the parcel to China, I guess.

I guess I take this as a win!


It gets crazier - I have two FedEx from same sender. The sender automate everything so labels will have VAT number I am sure. I'll know if/when it finally arrives.

Yesterday, FedEx, just arrived, no problem. No VAT bill. Just worked. Yay!

Today, FedEx advise VAT due for next package (plus admin fee).

This is silly as both DHL and FedEx say they do "Postponed VAT" (PVA) by default, so both should do this for VAT, even if not Duty. This was just VAT.

I have paid FedEx under duress, as they will not deliver until paid, and I got a "receipt" just for payment, but no paperwork to say VAT paid! So I asked for...

  1. A proper VAT receipt so I can reclaim.
  2. An explanation of why PVA (and hence no fee) done.
  3. An explanation of why the admin fee is valid legally, and refund if not.

Notably, I have said if they consider the fee viable under some sort of contract, which I dispute we have, but if they do, then I consider them in breach of said contract as they state on their web site they will do PVA by default. Their failure to do that has caused me admin to pay them and account on my VAT return, so not only do I want their admin fee back for the breach, I want them to pay me for my extra admin. We'll see what they say.

Update: Finally get a paper invoice, nice, except it does not say paid, and looks like they want paying (again). But also includes the original "commercial invoice" from JLC which *does* correctly show our VAT number, so PVA should have been applied.



Linux has a really good library called popt. It parses command line arguments.

I use it all the time, and it allows a variety of arguments to be cleanly handled, with different types, default values, help text, and so on.

For a long time it has bugged me, and I assumed it was a bug, that it would leak a small amount of memory. This shows using valgrind. But as it is a one-off leak on a command line I have not bothered too much.

However, following some discussions re memory free tidying on one command recently I thought I would try and get my code 100% leak free - always a good aim.

I have found the problem.

popt malloc's any POPT_ARG_STRING values that it sets!

Now, I was not surprised to find some malloc'd memory, but was surprised at this. I was also surprised that poptFreeContext() does not free all allocated memory, these values are for the user to free.

What concerned me is that I did not know this, and the manual pages are not entirely clear. They do actually explain that poptGetOptArg() returns final arg of poptGetNextOpt(), and "The calling function is responsible for deallocating this string.". It does not seem to make clear that all arguments returned or stored for POPT_ARG_STRING are malloc'd. But that seems to be the case.

Now I know, I can ensure I free all string variables at the end of my program. Or can I?

What of defaults?

Well, damn, this is fun - some variables have defaults (the help text shows them even, if you ask it too), so you can set a default and the use popt, and have a string that is supplier, or the default.

This is useful, until you start freeing all your strings at the end, as these are typically const char assigned, and so not something you can free.

The only way to be clean is assign your defaults using strdup(), so you can always free, whether default or stored by popt.

Why does it do it?

What puzzles me is why it is done in the first place. The arguments are null terminated strings in argv[], so could be referenced directly. Even with a -x or --xname= prefix, an offset in to the argv[] value could be returned.

It is worse!

It seems poptGetArg() also alloc's strings as well, and the manual is totally silent on that point.

Arg! And worse, poptGetArg() is const char*, which is not valid for free() even!

No, No, that does not work

OK, I really tried, honest.

I set my defaults to be strdup() based so they are always safe to free() whether using default or supplied value.

What does that do? Well, if not using the default, the new supplied value is set, and malloc'd, so the free() is still safe. But what of the original default, that is now lost, not free'd, so a bloody leak!

I cannot see any clean way to do this - popt is basically broken.



Bulb and Ombudsman

As I mentioned, I had two cases of energy companies with Ombudsman. This is the second one finally sorted.

The other case with So.Energy was about a final bill simply using the wrong meter readings, complicated by the fact that one was an export reading. It was all sorted.

Arguably the Bulb one actually way simpler: 2 years after leaving them, and settling the final bill, they decided, via a new bill, rebelling for my previous usage, that I now owed £7k. The reason this is a "simple" case is that there is an OFGEM rule which bans charging for usage more than a year before the bill. It is a very simple rule.

It is a licence condition, and is also in the terms and conditions (it has to be).

So, a bill, out of the blue, for usage more than 2 years before, is simply not valid. The rule and and terms are simple. So I should have been able to simply point this out to them, and it be the end of the matter.

Which makes no sense really, it sort of says they cannot charge more, but they have charged more.

They even tell the Ombudsman that the back billing rules don't apply, which makes no sense. They told me on Twitter as well that the rule does not apply. This was somewhat stressful to say the least as I thought I was on solid ground here. Oddly they told the ombudsman the new bill was because of new closing readings from the new supplier, which also makes no sense as the new bill had the same closing readings as the previous bills.

So, how did it go with the Ombudsman?

Well, in the end it went well, but it was a hell of a challenge. For a start, it took a long time to get anywhere, as with the other case. I actually ended up making the complaint covering several issues: One was "this latest bill is simply invalid under back billing rules as it all for usage more than a year before", but because Bulb raised this bill I looked back, and spotted they had also previously back billed more than a year, and they had also changed the opening electricity reading to something totally made up, using 09796 not 51485, which is crazy!

The response from the Ombudsman was overly complicated, and hard to understand, instead of simply saying the latest bill is invalid, they go on about a dummy meter exchange and reissuing the bill correctly.

I basically said I could not "accept" the decision if I could not understand the decision or what it could mean financially, and they basically said until I accept the decision they cannot order Bulb to action it, and only then would they know the financial implication.

The other issue is that the response and several exchanges with the ombudsman said things like "So if Bulb revise the bill and there are unforeseen charges it needs to apply backbilling. Backbilling does not apply if you are in credit or the charges have decreased upon billing you accurately."

Obviously the idea that if there are unforeseen charges they would apply back billing was a concern. It seemed to suggest that I would be back billed for unforeseen charges.

At one point I said: "To be 100% crystal clear, accepting this decision cannot result in me owing Bulb any money at this point, as the only money they are currently asking me for is for an invalid backbilled charge two years after leaving, and any additional charges they find are too late and so cannot be backbilled now." and got the reply "Backbilling will apply if there there are unforeseen charges (increased debt)."

I exchanged dozens of messages and finally got to the bottom of it. When they say "backbilling" what they mean is "the OFGEM anti-back billing rule / licence condition". So they mean "...there are unforeseen charges it needs to apply the anti-back billing rule and not back bill you". That is essentially the exact opposite of what was actually said.

Then they suggested there could be some additional charges if the new bill to replace the £14k bill they had raised was lower, but still left me owning money (there had been a £7k credit first, hence balance being £7k now). This turned out to be because she misunderstood how long ago it was and thought some of the (revised) usage was within a year still.

It took a long time to get a clear answer to "So the worst that can happen, from my point of view, is that I still owe nothing. The best is that they owe me some." - at which point I accepted the decision.

What did Bulb do?

They harassed me by calls, emails, and in writing all the time, even after saying they would wait for the outcome of the ombudsman case they then harassed me again. It is ridiculous.

Eventually, on the last day allowed, they issued a new bill, it showed me in credit (by several thousand in fact).

I advised bank details and they sent the £150 compensation they were ordered to. Not the credit balance.

I queried, and they say any credit would be sent once the final bill was raised (which web site said would be 31st May).

I finally said I would advise the Ombudsman that the matter was not resolved unless they confirmed either no additional bill (how could there be) and paid me the balance, or confirmed the extra final bill (which I would then dispute via the Ombudsman). I was not going to wait a month.

To my surprise, and as 10 separate smaller payments all at once, they have sent me the balance.

Technically I think I could argue for more - the re-bill covers the whole period I had service, but there was a period of time in the middle of service where I did not have a bill within 12 months of usage, so they should not now be billing me for that period of time in the middle. But the whole experience of dealing with Bulb and the Ombudsman has been so much hassle, pursuing that extra bit is not worth it (I'm clearly getting old).


The irony here is I left Bulb a couple of years ago and had paid in full. I did not realise they had overcharged me, nor by how much. Had they not decided to bill me for an extra £7k, they would have got away with it.

In my defence, until Bulb, I had not had experience of such inept energy companies, and did not expect to have to check every bill in detail to look for such mistakes.


Industry standards

There are many industries that have various industry standards. These are often relevant to the internal workings of the industry, not something customers see, and help then industry work smoothly as a whole. This is particularly important when various parts of the industry need to interact with a range of suppliers and clients. Sometimes the standards are based on standards bodies or even a regulator, sometimes industry bodies, sometimes simply the de facto standard of the major player.

But sometimes when you get under the hood you can be shocked to find a lack of industry standard where clearly one would be both obvious and simple.

Now, when I explain this latest craziness, I know, for sure, someone will come out of the woodwork and say "but there is standard X". The problem is that whatever standard here may be it is clearly not widely used in the industry as yet.

Also, when I explain this latest craziness, someone will say, "Why not just make a standard then?". Well, see xkcd/927. Obviously I could propose a standard - this is a very simple matter, but there is no way I could get it adopted. I'd go for all in one JSON file to be honest.

PCB Assembly files

The issue is PCB assembly files. I am (personally) quite new to this, and discussing with my colleagues that do this for a living they are "Oh, yeh, it is crap, there is no standard".

What is needed...

When making a printed circuit board, and adding components (assembled PCB), you need a few things.

  • The actual artwork for the printed circuit board - several bits, such as the copper layers, the solder resist, solder paste, the silk screen, the edge cuts, the drill file.
  • The details of the components you need placing on the board
  • The details of exactly where those components are to go on the board

There are actually a load of other things, some of which are fabricator specific, like PCB thickness (and number of layers, and material), solder resist colour, silk screen colour, copper thickness and finish, and various production options. If an extensible standard existed (e.g. JSON or even XML) it could include a load of "common" attributes and allow for custom attributes, and so allow ordering a PCB to be literally loading one file. I have been caught out forgetting one of the many options before now and managed to get a board the wrong thickness. My PCB package knows the thickness but has no way to include that in the production files.


The first part does seem to be pretty standard, though it sort of evolved, but now is quite good - GERBER files and drill files all in a zip file. There are several options and versions, but in general these really "just work". Even details like whether coordinates are based on inches of millimetres are standard headers in the file now. It seems a variety of de facto / proprietary standards have congealed in to something pretty common at last.

Picking components

Picking the components is the area I would expect to be complicated, but I was quite surprised. My experience here is of two PCB fabrication companies, one in UK and one in China. To my surprise, in both cases, they were able to track down components quite easily.

The basic parameters of "Manufacturer name" and "Manufacturer part number" seem to cover it very well, but even without these - even something simple like calling a component "5k1" and stating a package of "0603" will get you a standard tolerance 0603 package 5.1 kΩ resistor. Indeed, on one occasion whilst trying to find the part for an inductor, I totally failed to find it on the parts site, but it turned out that simply putting the value and package "4x4" found one that I failed to find.

Comma Separated Value

One of the issues is the file format, something obvious for standardisation, seems totally arbitrary. The only common factor seems to be the use of CSV files.

In one case the web site allowed me to load the CSVs from the PCB drawing package, display it spreadsheet style, and then let me select which rows are which things (Bill of Materials, and Positions), and then select which columns in those rows are things like "Manufacturer name", "Part number", and so on, with some level of pre-guessing in place. This is a total faff as every time you load the files you have to go through this process.

In another case the fabricator specify the exact set of columns to use for each file. This has the advantage that if you can make a script to make the files, you don't have to fettle them when using them. But the exact layout is unique to that fabricator, not standard.


This is the one that really gets me. The Bill of Materials has the details for what parts you have, as I explain, but then you need to say where they go. There are not many details for each component.

  • Side (top/bottom)
  • X / Y position on the PCB
  • Rotation

The side is usually text "top" / "bottom", so simple enough.

The position is, it seems, usually, "as viewed from top", but could be in millimetres or based on inches, and will have an origin somewhere. It could also be Y going up or Y going down, even! It seems obvious it should actually use the same origin and units and direction as the GERBER file, but does it?

The good news is that this does generally seem to work, the actual position does not seem to go wrong, though there have been cases where negative values break things. It also seems that fabricators can work out your origin and units based on how components hit solder paste / pads. But if there was a proper standard this would a be lot simpler.

It seems rotation is more complex, and whilst it seems "degrees" are a standard I found that whether it is "as viewed from top", or "as viewed from above the component" is a thing. I use a plug-in for KiCad (PCB design package) to make the files for JLCPCB. The fact a plug-in is needed just highlights the problem - why is there not a simple common standard for this! The problem is, I have now found, that the plug-in uses rotation "as viewed from top", which is what KiCad uses, but JLCPCB seem to need it to be "as viewed from above the component". I have had to fix the plug-in.

You may wonder how this could happen? Surely it would be noticed. Well actually it is not that simple. A rotation of 0 or 180 will be correct on the bottom layer anyway. A rotation of 90 or 270 will simply reverse the component, which, for many, does not matter. Other rotations are less common. The ones that do matter, like diodes, and ICs with a pin 1, have to be manually fettled anyway, so it is not obvious they should not have needed this just because they are on the bottom. This is such a common issue that JLCPCB even have a standard service to check pin 1 is correct and propose corrections.

A good example is something so simple it needs no adjustment, a resistor. This is two resistors at 10 degrees rotation (as viewed from top), and sent to JLDPCB with a value of "10" in the rotation.

No standard within components

You may wonder why you may have to fettle the positions anyway, hence not noticing the bug. Well the reason is that there is, apparently, no standard for how components are "placed". Even though data sheets for components normally have detailed technical drawings showing the exact dimensions and outline, and even 3D models these days, there is no convention for component manufacturers providing an "origin" on their drawings, or even a "mid point", though "mid point" is at least something you may be able to work out on many. There is also no standard for which way is the "un-rotated" orientation of the component.

What is even more fun is that a component usually has three possible origins for its positioning, and some fabricators use different basis. Some may even use Mid and Pin 1 to define orientation, which is fine until pin 1 is in the centre of the device?

  • Origin - some point on the technical drawing as a reference point, e.g. bottom left.
  • Mid point - this at least is likely to be something you can work out for most components
  • Pin 1 location - this is less simple - is it the mid point of the recommended SMD pad for pin 1 maybe? Or maybe the centre of the dot on the package marking pin 1?

This means that each fabricator makes up their own rules, on a per component basis. So you need a way to mark an offset X/Y and rotation on each component to match the fabricators rules. They are not even consistent - you would think a standard package, such as a small 8 pin IC, would always be the same orientation, but even that is not the case, even within one fabricator, it seems.

The big clue that the plug-in was wrong was that moving a correctly adjusted component from top to bottom broke it. By correcting the rotation on the bottom, it is now possible to make these "adjustments" part of the footprint for the component, so that whenever you use it, it will be placed correctly.

P.S. Don't get me started on poor quality technical drawings - i.e. those that are dimensioned with just slightly too few dimensions to work out all necessary points.

P.P.S. Don't get me started on poor quality 3D models. They look good, and many are stunningly accurate, and very useful, but they have an origin and orientation - this too is arbitrary, and often does not even have Z axis as "in/out of PCB when placed" - using these means manual fettling every damn time. If all components had a defined reference origin and orientation it could use that for the 3D model as well. Oh, and I have seen lovely detailed 3D models that actually do not match the footprint so look wrong!


Which came first, the chicken or the egg?

I only post this because I know people will argue...

The classic question is phrased: "Which came first, the chicken or the egg?"

It comes from the observation the chickens come from eggs, and eggs come from chickens, in a seemingly infinite cycle. I simple naive question.

There were eggs long before there were chickens.

The problem is, of course simple, without any more qualification. Eggs have existed long before chickens. So for this question to be even remotely controversial, it needs some qualification. So let's rephrase:

"Which came first, the chicken, or the chicken egg?"

What does "chicken egg" mean?

This is, of course, obvious, isn't it... I can point to such an egg and show you. Well, I could if any shops had any chicken eggs in them - it is all chocolate eggs at the moment!

But there are two possible variations - "An egg that came from a chicken" or "An egg that hatches in to a chicken".

And this is where the solution lies. At some point in history a proto-chicken, something you would not define (by whatever criteria you are using) as a chicken, laid an egg, and from that egg came something you would define as a chicken. That is evolution. Whatever definition you use for "chicken", wherever you draw the line, that is what happened at some point.

So which came first depends on which of those two definitions of "chicken egg" you are using.

So the question is answered by defining the question. Not a dilemma at all.

Or it is defined by qsort?


Phœnix Contact connectors

For some time I have "standardised" on my connectors for my small PCBs as the molex mini SPOX 2.5mm connectors.

They have a number of features that make them useful - higher density than screw connectors (unless tiny tiny screws), and being pluggable makes it possible to simply unplug one PCB and plug in a replacement. They need a crimp tool, and being molex it is not cheap, but they are easy enough to make up. Even with screw terminals I would always use bootlace ferrels, which makes this no more hassle really. The other advantage of plugs is you can crimp / wire the plug more easily away from where the plug has to connect to the board (which may be in a tight space), and then just plug in.

However, feedback from a customer of the alarm system is they do not like them - the main issue is the expensive crimp tool. They worked around by getting pre-crimped wires. But also it means I cannot sensibly ship a board of any sort with these that can just be used.

The alternative I am trying now is Phœnix Contact connectors (e.g. these).

  • They are also 2.5mm spacing. This means existing boards can use these new connectors with no change. In practice they are a fraction longer so hang over the edge of the board very slightly, so the PCB is being changed to accommodate on next version, but that is not enough to be a problem on existing boards.
  • They are slightly narrower which allows some boards with lots of connectors to save a few mm width.
  • Like the mini SPOX, the 2.5mm spacing is close enough that one could fit 0.1" square pin headers instead if needed.
  • The plugs are "push in" wire contacts, no crimps, meaning I can supply plugs with the boards and they can be used right away.
  • Available with locating pegs, useful especially for smaller sockets, PCBs space permitting.
  • Available in black or white, and surface mount, and right angle and straight, and socket on PCB or plug on PCB, which is really flexible.
  • They are close enough spacing that the plugs can fit a standard 0.1" square pin header too.
A small downside is cost - the plug and socket is slightly more, and if supplying the plug with the board that adds to the cost of the board (but the customer would have had to get plugs for SPOX, making it better overall). The lack of cost and hassle of a special crimp tool is a good saving for customer. Also, when considering cost, the fact the crimps themselves are approx 10p each makes the SPOX much closer to the cost of the Phœnix Contact solution.

Another small downside is the plugs are longer, which means at least one board (the keypad module) will stay as SPOX, but be supplied with a plug and crimped leads as they solder on to the back of the keypad. The other cases look like they will still work in the back of an exit button box, etc.


Finally, today, after a week of UPS being stupid, I have the first of these to play with. They are as expected.

One simple test was can a Phœnix Contact plug fit a SPOX socket, and the answer is, sort of, with a bit of force, not ideal, and it is the other way up so a plug made for Phœnix Contact will not just work in SPOX even if you force it as wired backwards.

Here we have the mini SPOX (white) and the Phœnix Contact (black). You can see what happens trying to plug on in to the other. And no, the SPOX don't even slightly fit in the Phœnix Contact socket.


The wires that work are a factor. The crimps on mini SPOX can handle a range of wires, stranded and solid. But these push in are a tad more picky. The first test was confirming that the really very nice heavy duty Belden 0.75 mm² black/red stranded wires just work. They are probably the biggest it would handle, but really nice for power wires.

The next test was that solid cat5/6 cable works, and yes, that seems a perfect fit for signal wires.

The one wire that does not work is a finer stranded wire - it does not have the solidity to push in to the plug. And, sadly, my smallest bootlace ferrules are also too big it seems. This could be a slight issue for some existing wiring as "alarm cable" is often the fine stranded wire, though solid cat5 cable seems to be more common now. That said, it may be that the same technique for removing wires (pin/screwdriver) could be used to lift the lever and allow the thinner stranded wires, albeit slightly more fiddly.

In case you are wondering how it works, they have very nice data sheets.

To remove the wire you need a pin, or, as in this case, a very small screwdriver.

The plugs will fit on 0.1" square pins if needed.


Talking to an AI would be easier than Amazon

I have rarely had to deal with Amazon seller support, and every time has been a challenge. And don't have a go at me for even using Amazon - they have proved useful, sadly.

They seem to work by the message you send being picked up by a person at random, and replied to, hours later. But the replies seem to only consist of stock paragraphs. They seem unable to to answer basic questions in simple English.

So my challenge this week was simple - we (A&A) sell a few PCBs, and I wanted to mark them with the brand "AJK" rather than "Generic". When you make a listing, they ask the brand, and will not accept "AJK".

Just to explain, "AJK" is a brand I have, a registered trademark even, for PCBs, and is in gold plated metal actually on some of the PCBs (space permitting). I think that makes it a "brand", which I own. Obviously I have authorised A&A to make and sell PCBs using that brand.

The process starts simply - you try and type AJK, and it directs you to create an application to use a brand, and that has some moderately sane requests - pictures of product showing the brand, letter authorising manufacturer to use the brand, simple things I was able to easily provide.

I thought this would be easy. It is deceptive. This started a 4 day journey that was driving me round the bend to the extent that I was replying to one message at 2am even.

The biggest problem is they would ask for things like :-

Well, that is all pretty easy. I supplied all of that at the start though. And every time they ask this, I supply the image they want. This issue is that if they (new person each time) perceive I have failed in some aspect of that list, they won't say what, they just repeat that whole request. I never found out what was missing/wrong.

On two separate occasions when they requested something over and over again I added arrows and labels to the picture I was sending covering every thing they asked for.

At one point is was an issue that Andrews & Arnold Ltd were not "related" to the brand. This is crazy as step 1 was including a letter, from me personally as holder of the trademark, to Andrews & Arnold Ltd, authorising Andrews & Arnold Ltd to make and sell products using the brand. That took a lot of replies. One oddity is they say they will not accept a GS1 certificate - which makes no sense, what is the point of such certificate if they won't accept it. It seems they did however accept that Andrews & Arnold Ltd were allowed to use the GTIN/EAN we were using but they did not see how it related to AJK brand. Well, FFS, the letter, at the start, linking the two. Arrrg!

It got to the point they complained I was sending the same image. Well they kept asking for the same stuff. This was the request for the packaging image.

They also asked for all of the details of the product listing. This is an annoying thing as they could maybe have not stopped me making the listing at the "brand" stage and I could have sorted them all. But again, I answered all of those questions - several times.

Somehow, eventually, after I took 20 images of me holding the package, opening it, removing the PCB, and zooming in on the "AJK" logo on the PCB, they accepted we could list items using the "AJK" brand. I did not send a video, that would have been the next step I think.

So, next was the brand on the listing. In desperation I made a listing as "Generic" brand (I should register that as a trademark now). It may be partly what got the whole thing approved, I don't know. But now I have two PCBs listed as "Generic" and want changed to "AJK". One of these has the AJK logo clearly shown in the listing in gold plated metal on the PCB itself. Both have it on the packaging image.

At this point, I can make a new listing and use AJK, just typing in the brand box, but changing an existing listing, even just made the day before, is complicated, it seems.

This is the same list they sent the first time, and I said "we are the manufacturer and I am telling you this is the brand". But no, it is "policy". Thankfully I only need one of these, and web site was easiest. So I added to the web site on circuit boards that they were branded AJK. Simples.


So apparently they don't just need the site to confirm the requested change (brand name, which I did) they want more. Why not say that in the first place, FFS. And somehow the "About us" page needed to be involved, that was new too, and crazy.

So this is where we are now. The A&A "About us" page has this...

Will it work? - no idea, but I can change that wording to be whatever they want, if only they will actually say what they want. If all else fails, when stock is sold, I delete the listing and make new ones with the AJK brand. That or I try and register a trademark for "Generic" (perhaps in some stylised text) and cause them havoc by saying "why are so many things listed using my brand/trademark?" - he he.

Failed! [They know I am brand owner and the UPC (actually GTIN/EAN) owner too]

So why ask me for the web page, etc, if they are not then going to do it...

P.S. They have now circled back to asking for web site / manual showing the brand, it is crazy.

Having circled back to that, I tried again, similar (less sarcastic) item on A&A page, and got this.

My reply: "I am the brand owner, so you can make the changes now, yes?". We'll see. No chance is there?!

They finally accepted that, and then said "you can't change the brand". So why the fuck string me along in the first (sorry, second, or third) place. Arrrrg!

So now I have got to the detailed explanation of how to delete and re-create my listings (why the fuck?), and my reply asking how that impacts the FBA stock, and, well, silence.


So.Energy & Ombudsman

It has been hard work, but I finally have a sensible final bill from So.Energy. It was only Electricity that was the issue.

The problem was simple - they did not have correct closing readings. I could not give them correct closing readings as their web form for them wanted import AND export and they had failed to make the meter show me me export dispite asking for many months. However, going to Octopus I got clean opening smart meter readings for both. I also have a new local meter display that logs to MQTT which is nice.

So they estimated my export very low, and they had a correct import reading from smart meter. All they had to do was correct the low export estimate.

So.Energy ignored every attempt to tell them the correct readings! All they had to do was update them. Simple as that!

Then they issued a new closing bill with totally new import reading that was completely made up, and wanted a lot more money from me! To me this only makes sense as fraud. They even lied to the Ombudsman saying the new closing read came from Octopus (well, "old supplier"?). Octopus even sent screen shots of what they reported to So.Energy.

It had to go to the Ombudsman. The process was not that painful, and all on-line and forms and online messages and so on. But was tedious.

  1. I make a detailed complaint and upload evidence (bills basically, and copy of email referring me).
  2. I then add a message saying how it is odd the complaint is logged as "has smart meter: no", and "referral evidence: not included" when I said it was smart meter and had in fact already uploaded the screen shot of the referral and marked it as such.
  3. Time passes and state is "additional checks", but they don't say what they are. Lots of time.
  4. Lots of time passes, then the ombudsman ask me to confirm some details, even though exactly as stated in the complaint?
  5. So.Energy are told of the complaint, and quickly reply with their proposed remedy - see below
  6. Finally, after a month, ombudsman tell so.energy to fix the final readings and give me £40 and an apology.
  7. So.energy quickly say they have implemented the decision, they have not as they have not done the export reading correction.
  8. Ombudsman say so.energy are trying to dispute export with Octopus and want me to raise with Octopus - why? Octopus have a correct smart meter reading so nothing to dispute! 
  9. Over 28 days later (yes, they had to reply in 28 days), after chasing, So.energy implement the decision and apologise.
  10. I pay the final bill (I don't wait 5 minutes, let alone 28 days). Settled.

The initial response to complaint from So.energy is weird. This is clear cut, simple, wrong import and export readings, and I provided clear evidence (opening bills from Octopus) of that. You would expect the proposed remedy to be to simply fix that, job done.

But no, they say "The reads we have received is[sic] from the customers old[sic] suppliers. The customers account has now be revised and final bill sent to customer". They fixed the import but did not fix the export, and what is with "old suppliers" - this is about "new suppliers", and the reading was not in fact from the new (or old) supplier anyway. It was just fraudulent, in my view.

I have to wonder how the hell most people cope with this crap. I bet most people just pay up. If this is systematic it is a lot of money - who knows?

But final result - actually sorted - after a lot of time spent on this.

During the whole time So.Energy harassed me by email for payment even though they knew the case was with the Ombudsman. They also seemingly cannot actually read emails - claiming simple plain text emails are "blank".

Complaint started 29th Dec, resolved 23rd March.



I am, once again, getting more spam. Someone must have put my email on some mailing list. This is a pain in the arse, takes up my time, and so effectively has a cost to me.

There are two rules covering this, one (as it is my name in the email address) is GDPR, and one is The Privacy and Electronic Communications (EC Directive) Regulations 2003 which covers spam, basically.

GDPR is a problem as it has all sorts of exceptions and is rather subtle in how it works, and can be argued in various ways, notably that handling my "personal information" is in "legitimate interests", and the like.

But The Privacy and Electronic Communications (EC Directive) Regulations 2003 are pretty simple in most ways, they ban unsolicited marketing calls, fax, and emails. Simples.

They have two big issues though.


The PECR allows me to claim damages as a civil case (sue them), but I have no way to show "damages". The regulations would massively benefit from a nominal sum that I can claim without proving tangible damages, e.g. £40 like the late payment of commercial debts regulations. Yes, if I can show more, then great, but a nominal base value would be idea. Cases would not have to go to court, I can claim the amount and nobody sending spam would be daft enough not to cough up, well, not a second time anyway once it has gone to court. Sadly without this the case can be (and was on one occasion) thrown out as no way to show actual tangible costs/damages from receiving spam.

Of course the ICO should act on such things, but they too are inept. A nominal cost allowed in civil cases would be way more effective, and something the government should consider when making the post brexit version of this law.

Individual subscriber

The other problem is that spamming "commercial" email addresses is allowed!

Why the fuck is that the case? At the end of the day a real person is on the end of these emails, even if they work in an office, and they are a nuisance to all. Arguably a business has more tangible losses as they pay someone for their time handling such spam. But that is the way it is.

The problem is how you define "individual" or "corporate", and that has always been an issue. I am pretty sure the ICO used to be a bit bad at this, but it seems the latest guidance from them is actually in line with the regulations, to my shock.

Specifically they say

"The marketing rules in PECR refer to “subscribers”. For example, this means the customer named on the bill for a telephone line or internet connection. There are two type of subscribers in PECR - corporate and individual."

This is in line with the regulations. The distinction between individual and corporate subscriber is a matter of the contract for the internet connection for the delivery of the email.

Usually, for an employee, in an office, the contract is between the company and their ISP. So a corporate subscriber, and not covered by PECR for spam.

But it gets interesting when people are working from home. Which contract applies. Which internet connection applies? Those home workers may be contracting for their internet connection as individuals, and then receiving that (corporate) email over that connection. Does that make them "individual subscribers".

At what point is the email "delivered" to them, or to "the email address"? and is it over their personal internet access, even if read from their office mail server. What if they read the email at the office, and later read it again at home or on their mobile? Was it delivered to an individual subscriber or a corporate subscriber or both?

My solution

For me I have made its easier. I contract with A&A for the A&A domain, email services, and my home internet access, as an individual. Indeed, I am even billed personally (albeit a nominal amount) for "Internet connection used for delivery of email to all @aa.net.uk addresses". I pay personally for all of the A&A email services, and for the domain, and whatever internet connection is used to deliver that email. So in my case all email to any A&A "business" email address is clearly delivered under a contract with an "individual subscriber", and so is subject to PECR.

The argument from some muppet insisting that as an employee I am not an individual subscriber seems to have gone quiet when I explained that. We will see.

At the end of the day any business, no matter how big, could have one of its directors contracted and invoiced personally for all business email at £1/month, making all that email subject to PECR if they want, and allowing them to sue, personally, for every spam the company gets.


The moral of the story is don't send unsolicited marketing emails. At all. Ever. Simple as that!

Ask your MP?

Companies bad at banking

I was discussing with a colleague the other day how so many companies are so bad with banking. In some ways we have been lucky, but to be fa...