Episode 21: Burkhard on Qt Embedded Systems
Welcome to Episode 21 of my newsletter on Qt Embedded Systems!
August was a pretty busy month for me. I gave four legacy code workshops as an add-on to James W. Grenning's TDD courses, extended my license compliance tool to Buildroot, and gave a license compliance workshop. Last weekend, I celebrated the 89th birthday of my Dad. Hence my newsletter is two days late and a bit shorter than usual.
I continue my post about pricing services. After covering hourly billing and value pricing last month, I'll discuss productised services, advisory retainers, workshops and trainings this month. This newsletter is completed by Liz Keogh's post Estimating Complexity. I relate the complexity of work to its value.
Enjoy reading and take care - Burkhard 💜
My Thoughts on Pricing Services (Part 2)
Last month, I discussed how to price services with hourly billing and value pricing, when to use which method and how to get higher fees. As promised, I'll talk about productised services, advisory retainers, workshops and trainings this month.
As a business developer at Nokia Qt (2009-2012), I had to convince automotive companies, TV, STB and house appliance makers to use Qt. As Nokia was interested in creating a huge pool of Qt developers and not in selling Qt licenses, I explained to every potential customer how to use Qt under LGPL.
When I started my solo business 8 years ago, it was only natural that I advised my customers whether to use Qt Commercial or Qt LGPL. Since 2016, I have been writing and talking regularly about licensing in general and Qt licensing in particular. I often get emails with Qt license questions. In 2018, a customer finally tasked me with checking the license compliance of their Qt embedded Linux system - as part of an hourly-rate development project.
This first compliance check took me 3 weeks. I did the check manually. I worked with a supplier on the same project. The supplier heard about my license work and asked me if I could do the same for their embedded Linux system. Of course, I could. I built a utility that helped me to do over 60% of the compliance checks automatically. The utility also has a database so that I can reuse the results from previous checks. That brings me to 80%.
I am just about to start my 5th compliance project. With every project, I improve the utility, the documentation and the presentations. Earlier customers receive these improvements. I reduced the effort for the actual compliance check and for three 2-hour workshops from 3 weeks to 2-3 days. The customers have a fully checked Qt embedded Linux system and know how to do the compliance check themselves.
A productised service is mostly a product with a little bit of service (e.g., customisations). In my case, the product part comprises the utility, the database, the process, the documentation and the presentation - all the things I create once and reuse multiple times. The service part comprises the actual compliance check and improving my product - all the things on which I spend time. Productised services have a fixed price like every product. Hence, the goal is to minimise the time spent on the service part. Every improvement costs some time now but amortises over the next projects.
The fixed price is an excellent selling point for my licensing service. My customers typically had several calls from Qt sales people. A company producing 1000 devices per year with a team of 3 Qt developers pays over €100,000 for the next 5 years. And that's the discounted price for paying the 5 years now in advance. As their products often have lifetimes of 10-15 years, they can at least double or triple their costs. That's a lot of money for small- and medium-sized companies.
The full version of my service currently costs €22,800. This includes an assessment of the customer's concrete licensing situation, a license compliance check of their full embedded Linux system and teaching them how to do the check themselves (the usual three price options). From then on, the customer will spend 1-2 days for every release. They pay me €22,800 once and can do the compliance check for all their products for as long as they want - independent of the units shipped and of the number of developers. And bonus: they must do the compliance check no matter whether they use Qt Commercial or Qt LGPL. This is value pricing at its best.
Guess what? I never had a customer complain about too high fees. So, the price seems fair for my customers. And it's certainly fair for me.
I have ideas for more options with less recurring effort. For example, I could check the Linux BSPs of some widely-used CoMs, SBCs and terminals and offer the result with my tools to costumers. After paying, customers would just download an archive from my website. I would turn the productised service into a product. Another option would be to record videos from my workshops and my trainings and sell the videos together with my tools to customers.
How do you identify suitable candidates for productised services?
A service is a good candidate for productising,
if many companies need this service,
if I have provided (nearly) the same service for multiple customers, or
if the recurring effort (e.g., customisation) is less than 25% of the original one-time effort.
Every company selling devices with an embedded Linux system need my license compliance service. The original effort was 3 weeks. The recurring effort now is 2-3 days.
Another example: I have implemented CAN communication between terminal and machine three times, Ethernet communication once and Bluetooth communication once. I have implemented the terminal-machine communication five times - paid by the hour. The implementations took 8 weeks on average, which amounts to €30,000-40,000. Five customers paying good money and many more machine manufacturers constitute a need.
Unfortunately, I never retained the usage rights for any of these machine communication components. I didn't think about usage rights for the first four implementations. The customer for the 5th implementation paid a 20% premium for exclusive, indefinite usage rights. I can wait for a 6th implementation, where I finally get the usage rights, or I can invest some of my saved money to build such a component.
I am currently leaning to financing the initial implementation myself. My idea is to implement a walking skeleton of the hexagonal architecture with a simple machine communication component and a simple GUI (see my recent talk A Successful Architecture for Qt Embedded Systems). The component would have a properly defined port interface implemented by a CAN adapter. When I sell the first version of the walking skeleton, I can extend the CAN adapter to the customer's requirements or add a Bluetooth or Ethernet adapter. I can also add a cloud communication component with adapters for AWS, Azure and other cloud services.
As I know the efforts for the ports and adapters fairly well (from my timesheets), I can value-price these services. When I have done a port with one adapter in a custom project, I can offer this port and with the same or a slightly different adapter as a productised service. I'd gradually move from custom value-priced projects to productised services.
Jonathan Stark defines retainers as follows (bold emphasis mine): "[A retainer is a] specific type of productized service where you offer your clients access to your expertise on a subscription basis - typically monthly but sometimes quarterly or even annually. A client asks you a question over an agreed upon channel (e.g., phone, email, Basecamp, Slack, etc) and you answer within an agreed upon time frame (e.g., “within 90 minutes for requests made during business hours, next business day for after hours requests”). Think of it as a hotline to your brain."
A retainer gives customers access to my brain but not to my hands. My retainer contracts explicitly state that I do not write any code. I counsel people to design a successful system architecture, to build high-performance teams, to build high-quality products, or to solve complicated or complex problems that they don't know how to solve.
Typically, my customers pose a question by email. I answer easy questions by email and set up a quick call to discuss more difficult questions. In some cases, I can answer the question or point customers to a post or video with the answer. In other cases, I can give customers some options how to start solving the problem. Customers would try out the options. We would discuss their results and decide what to try next. We proceed in an inspect-and-adapt feedback cycle. If I draw a blank, I'd do some research to find a starting point.
It's important that the customers do the actual work guided by my expertise. As a rule of thumb, one interaction with the customer should not take longer than 1 hour. If it's a tough problem, it may take 2 hours. If it takes longer, I usually start doing the customer's work, which I shouldn't. My coaching should enable customers to solve their problems on their own. My job is done when the customer doesn't need me any more - the sooner the better.
I have priced retainers in two ways so far:
a fixed block of hours per month, or
a fixed price per month for unlimited access to my brain.
I use the first model when I coach a team during the development of a product. The team can do the simple work (levels 1 and 2 of Liz Keogh's taxonomy) mostly on their own but needs some guidance for the more complicated work (levels 3-5). The danger when coaching several developers is that they try to dump their implementation work on me - especially when they know that the coach is a pretty good developer.
I protect myself against this danger by setting an upper limit per month, say, 40 hours. The customers must pay the full block of 40 hours (in advance, of course), no matter whether they use it or not. That's only fair, because I must be available 40 hours per month for this customer. I also put in a clause that the customer and I should strive to distribute the 40 hours evenly over the month. I cannot guarantee that I am available 40 hours in the last week of the month.Yes, even customers have a tendency to procrastinate.
My hourly rate for the retainer is 1.5-2 times higher than my rate for writing code on an hourly basis. A retainer is about knowledge transfer and not about doing the actual work. The higher rate deters customers from using me as an extra developer on short notice. If they still use me for implementation work, so be it. I love coding.
I have successfully sold and done one fixed-block retainer. Last week, I sent out the proposal for a second fixed-block retainer. I am waiting for the answer.
I use the second model (fixed price with unlimited access) when I coach 1-2 people doing high-value work like creating a system architecture or forming a high-performance team. These people can ask me unlimited questions about a given topic (e.g., system architecture). I will answer these questions by email or in a call. The answer should not take longer than 1 hour.
I will neither draw any architecture diagrams, nor write down any requirements, nor automate builds, tests and releases. Instead I will point out architectural options, brainstorm requirements, and give guidance for CI/CD solutions. I provide the only or further solution options to customer problems. We discuss the pros and cons of the options and select the best option. The customer implements the selected option. I am available for answering further questions during the implementation, but I don't get involved in the implementation.
I set a fixed price per month for the retainer, which corresponds to the value I provide to the customer. For example, customers can save a lot of money, if they use the hexagonal architecture instead of the big-ball-of-mud architecture from the start, if they know that LoRa will not have enough bandwidth for the communication between a terminal and a robot in another room but that Bluetooth LongRange has, or if they integrate the telematics unit into the terminal. Customers can earn more money, if my advice helps them bring the product to the market earlier or if it enables them to offer new features that their competitors don't have.
The value and hence the price differ from customer to customer. At the moment, my minimum price is at 50-75% of a full month billed at my normal hourly rate. I offer three options for monthly, quarterly and half-yearly subscriptions, with discounts for the longer subscription periods. The customer and I have the right to cancel the subscription at the end of each period. Payments are in advance to start a subscription period. If I work with a customer for the first time, I'll only offer the monthly subscription. If the customer and I know and trust each other, I'll offer the longer subscriptions. A shorter subscription period and the option to cancel protect me from the customer abusing the unlimited access to my expertise.
So far, I have offered one fixed-price retainer, which was rejected. My price was too high for a bootstrapped startup. I didn't lower the price and didn't fall back to the fixed-block retainer, because that would have devalued my offering. I suggested one or two half-day workshops at a later time instead. The customer likes the idea. Let's see how much. I learn with every retainer and adapt the terms accordingly.
Retainers give plenty of opportunities to identify separate high-value projects, which I can execute for the customer. During an architecture retainer, the customer could ask me, for example, whether to use Bluetooth Long Range or LoRa for the wireless communication between a terminal and a robot in another room. I could implement a prototype to find out. I would make a separate fixed-price offer for the project, which would not be part of the retainer. A follow-up project could be the implementation of the communication component for the product - again as a fixed-price project.
Here are my guidelines for advisory retainers:
I try to keep the number of people, who have access to me, to a minimum. 1-2 people are ideal.
If I coach 3 or more people doing low-value work, I'll offer a retainer for a fixed block of hours per month.
If I coach 1-2 people doing high-value work, I'll offer a retainer for a fixed-price per month with unlimited access to my knowledge.
My guidelines will almost certainly change over time, when I get more experience with retainers.
Workshops and Trainings
The startup, which rejected my fixed-price retainer, is open to one or two half-day workshops, where they can ask me anything about their system architecture. I could offer such ask-me-anything-about-architecture workshops to companies or to the public.
How would I price such a half-day workshop? I'd look at the public training offers for Qt embedded applications. For example, ICS offers a 5-day course Building an Embedded Application with Qt for $2,500 per person. Half a day of this training costs $250. As an architecture workshop provides much higher value than a coding workshop, $500 per person seems like a fair price. This price is in line with similar workshops. For companies, I would charge a fixed price of $2,500 and more, which depends on the value, of course. I might offer the first public workshop at a discounted price of $350-400. I'll adapt the price depending on how easy it is to fill the public workshops and to find customers for the private workshops.
I can turn the half-day architecture workshop into a multi-day training by designing the architecture of a Qt embedded system along the lines of my eponymous series and implementing a walking skeleton of a machine terminal. The price for such a special training should be higher than for a general-purpose Qt-embedded training. Preparing a training is a lot more effort than preparing a workshop. Hence, I would extend my original workshop gradually by more half-day workshops until I have a complete training. As the workshops build on each other, I can also offer the workshops as options building on each other.
I find ideas for workshops and trainings in the same way as ideas for productised services. I look for recurring activities in projects, invest good time in the creation of workshops and trainings, and give them many times to amortise my initial investment. Productised services, workshops and trainings are excellent door openers for new customers, especially if they are essential to customer success. They can easily turn into development projects for parts of the product or even the full product.