The breadwinner product

This may feel a bit random of a post, as Business and Economics are not my areas of expertise and I usually do my best not talk about stuff I don’t know, but I have seen the complete disregard for this concept lately and I thought it would be a good starting point to define here, before I talk about it, what a “breadwinner product” is, from my point of view.

The term breadwinner is used generally to refer to the primary income-earner in a household. While I have not seen this very often extended to products and services in companies, I think it should be fairly obvious how the extension would work.

In a world of startups there are still plenty of companies that have a real “breadwinner product”, even when acting as startups. This is the case for instance of the company I used to contract out for, in Los Angeles: they have been in activity for a number of years with a different, barely related product, and I was contracting out for their new project.

I think it’s important to think of this term, because without having this concept in mind, it’s hard to understand a lot of business decisions of many companies, why startups such as Revolut are “sweeping up the market” and so on.

This is something that came up on Twitter a time or two: a significant amount of geeks appear to wilfully ignore the needs of a business, and the marketing concepts as words of the devil, and will refuse to try considering whether decisions made business sense, and instead they will either try to judge decisions based purely on technical merits, or even just on their own direct interests. Now it is true that technical merits can make good business sense, but sometimes there are very good long-term vision reasons that people don’t appreciate on the pure technical point of view.

In particular, sometimes it’s hard to understand why a service by a company that may appear as a startup is based on “old” technology, but it may just be the case that it is actually a “traditional” company trying to pivot into a different market or a different brand or level of service. And when that happens, there’s at least some gravity pull to keep the stack in line with the previous technology. Particularly if the new service can piggyback on the old one for a while, both in term of revenue, technology and staff.

So in the case of the company I referred to above, when I started contracting out they were already providing a separate service that was built on a real legacy technology, ran on a stack based on bare metal servers with RedHat 5. Since the new service had two components, one of them ended up being based on the same stack and the other one (which I was setting up) ended up based on Gentoo Linux with containers instead. The same way as the Tinderbox used to be run. If you wonder why one would run two stacks this separate, the answer is that messing with the breadwinner product, most of the time, is a risky endeavour and unless you have a very good reason to do so, you don’t.

So even though I was effectively building a new architecture from scratch, and was setting up new servers, with more proper monitoring (based on Munin and Icinga), and Puppet for configuration management, I was not allowed to touch the old service. And rightly so, as it was definitely brittle and it would have lead to actually losing money, as that service was running in production, while the new one was not ready yet, and the few users of it would be able to be told about maintenance windows in advance.

There is often a tipping point though, when the cost of running a legacy service is higher than the revenue the service is bringing in. For that company that happened right as I was leaving it to start working at my current place of work. The owner though was more business savvy than many other people I met before and since, and was actually already planning how to cut some expenses. Indeed the last thing I helped that company with was setting up a single1 baremetal server with multiple containers to virtualise their former fully bare metal hardware, and bring it physically to a new location (Fremont, CA) to cut on the hosting costs.

The more the breadwinner service is making money, and the less the company is experimenting with alternative approaches to cut the costs in the future or to build up new services or open new market opportunities, the more working for those companies become hard. Of all the possible things I can complain about my boss at the time, ability to deal with business details was not one of those. Actually, I think that despite leaving me in quite the bad predicament afterwards, he did end up teaching me quite a bit of the nitty-gritty details of doing business, particularly US-style — and I may not entirely like it either.

But all in all, I think this is something lots more people in tech should learn about. Because I still maintain that Free Software can only be marketed by businesses and to be able to have your project cater to business users without selling its soul, you need to be able to tell what they need and how they need it provided.

  1. Okay, actually a bit more than one: a single machine ran the production environment for the legacy servers, and acted as warm-backup for the new service; another machine ran the production environment for the new service, and acted as warm-backup for the new service. A pair of the older baremetal servers acted as database backends for both systems.

The dot-io boom, or how open source projects are breeding startups

You may remember that some months ago I stopped updating the blog. Part of it was a technical problem of having the content on Typo (for more than a few reasons), part of it was disappointed in the current free software and open source scene. I vented this disappointed to the people over at FSFE that and they suggested I should have gone to the yearly meeting in Berlin to talk about them, but I was otherwise engaged, and I really felt I needed to withdraw from the scene for a while to think things over.

Open source and free software have, over the years, attracted people for widely different reasons. In the beginning, it was probably mostly the ethics, it also attracted tinkerers and hackers of course. I was attracted to it as an user because I liked tinkering, but as a developer because I was hoping it would lead me to find a good job. You can judge me if you want, but growing up in a blue collar family, finding a good job was actually something I was taught to be always mindful of. And it’s not fair, but I had the skills and time (and lack of extreme pressure to find said job) that I managed to spend a significant amount of time on free software development.

I went to a technical school, and the default career out of it when I joined was working for a fairly big insurance company, whose headquarters were (and as far as I know still are) not far from where I grew up. Ending up at the Italian telco (Telecom Italia) was considered a huge score — this was a time before university was considered mandatory to do anything at all wherever you wanted to go (not that I think that’s the case now).

My hopes were to find something better: originally, that meant hoping to move to a slightly bigger city (Padua) and work at Sun Microsystems, that happened to have a local branch. And it seemed like the open source would get you noticed. Of course at the end I ended up slightly more North than I planned – in Ireland – and Sun is gone replaced by a much bigger corporation that, well, let’s just say does not interest me at all.

Was open source needed for me to get where I am? Probably yes, if nothing else because it made me grow more than anything else I could have done otherwise. I see many of my classmates, who even after going to university ended up in the same insurance company, or at the local telco, or one of the many big consultancy companies. The latter is the group that tends to be the most miserable. On the other hand I also have colleagues at my current company who came from the same year of the same high school as me — except they went on to university, while I didn’t. I’m not sure who got the better deal but we’re all happy, mostly.

What I see right now though, and that worries a bit, is that many people see open source as a way to jump-start a startup. And that is perfectly okay if that’s how you present yourself, but it is disingenuous when you effectively hide behind open-source projects to either avoid scrutiny or to make yourself more appealing, and what you end up with is a fake open source project which probably is not free software in the license, and easily so even in the spirit.

I have complained before about a certain project, that decided to refuse my offer to work on a shared format specification because they thought a single contributor not part of their core team can leave the scene at any moment. Even leaving aside the fact that I probably maintained open-source code for more than they were active on said scene, this is quite the stance. Indeed when I suggested this format is needed, their answer was that they are already working on that behind closed doors together with vendors. Given how they rebranded themselves from a diabetes management software to a quantified self tool, I assume their talks with vendor went just as about everybody expected.

But that was already just a final straw; the project itself was supposedly open-source, but beside for the obvious build or typo fixes, their open source repository only had internal contributions. I’m not sure if it was because they didn’t want to accept external contributions or because the possible contributors were turned down by CLA requirements or something like that, it’s not really something I cared enough to look into. In addition to the open source repository, though, most of the service was closed-source, making it nearly impossible to leverage in a free way.

My impression at this point is that whereas before your average “hacker” would be mostly looking to publish whatever they were working on as an open source project, possibly to use it as a ticket to find a job (either because of skill or being paid to maintain the software), nowadays any side project is a chance to a startup… whether a business plan is available for it or not.

And because you want at some point to make money, if you are a startup, you need to have at least some plan B, some reserve on the code, that makes your startup itself valuable, at least to a point. And that usually makes for poor open source contributions as noticed above, and as, good timing, CyanogenMod turned out to be. Similar things have happened and keep happening over time with OpenWRT too, although that one probably already went through the phase of startup-importance into a more community-driven project, although clearly not a mature enough one.

So here it is, I’m grumpy and old at this point, but I think a lot of us in the free software and open source world should do better to consider the importance of maintaining community projects as such, and avoid hiding targets of “startupizzation”, rather than just caring about firmware lock-in and “tivoization.” I wish I had a solution to this but I really don’t, I can only rant, at least for now.

The Uber of Ubers

Looking at it from the outside, I’m still not sure how Uber became at the same time the religious icon of the new dot-io boom (to replace dot-com, of course), and the effigy to burn for all the things that are wrong with Silicon Valley’s lack of social awareness.

I think there are multiple problems with Uber, and all its spawnlings, the first obvious one is that at some point people started describing “The Uber of {thing}” for all kind of startups that try to provide services at slashed costs, usually by exploiting people with reduced means. And that meant that new “founders” decided to make “The Uber of {other thing}” by exploiting people with reduced means. Normalizing a bad behaviour just causes more of it.

Another problem I see is in the analysis of Uber and all its spawnlings, and it’s related to the point above. For most of the analysis I read, the authors keep making statements based on the idea that people use Uber almost exclusively because it’s cheap, and thus every of its spawnlings should just cut costs to all points.

I’m a Uber user, sometimes. I’m not happy about that, I dislike their cost-cutting policies, and I do think that the above-noted bad behaviour is cancerogenous to society in general and Silicon Valley in particular. And I would care, since I work for one of the companies out of said Valley. So why do I use Uber? Well, for the most part it’s about convenience in saving time and actions, rather than saving money. I’ll try to stay on the topic of hired transport, and share a few stories and experiences that helped forming my opinion over time.

The first time I needed to use hired cars was possibly ten years ago by now. Just like now, I didn’t have a driving license, and indeed to go and see customers I’d either manage to go somewhere close, or at least to the station, with my father, sister or friends, or I’d otherwise have to ask them to come to me to bring whatever is needed. This worked a few times, but there have been others it didn’t. In one case, I was asked to go to the HQ of one of my customers (about an hour and a half, almost two, from the place I lived), and I had noone to help me, so I contacted a car service to ask how much it would cost me to hire a car according to those timing — subject to me getting either the expense back from the customer, or at least a contract worth me putting up the money first, of course, which means ask a quote first, confirm after. The customer decided instead to send me the paperwork themselves, so I said no to the quote, and moved on.

Fast forward some time, maybe a few months, and the same customer contacts me to give them a one week course at their office, since they just recently started working on new, Linux-based devices, and they have not enough experience with them. This time the contract is worth well the money, and so I contact the car service for a new quote, and here’s my first impression with Italian professional car hire companies. Instead of the same price they quoted me a few months ago, which was of around €100/day (so €50 each way), they quoted me €190/day — I assumed at first this was for difference in demand; the day before I was supposed to give the course, they mailed me saying the price was now €250, and told me they wanted the whole money upfront, or they wouldn’t send a car… that one was not good, particularly because I wouldn’t have the money right there and then, the agreement with the customer was that they would pay me the travel expense on the day in cash, so I only had to upfront the first trip

When I pointed out that was the first time I heard of that to the car service, the owner went on a tirade of insulting because according to him I had been disrespectful cancelling the quote the time before, and that he was so sure I wouldn’t go through with it he didn’t even reserve me a car this time either. I panicked as I had no way to get to my customer’s and my mother had to find another car service to hire, that would take a one day notice, and that would take cash. She found one, for less money than the other service, and I managed to go and give the course. It turned out once at the course that one of the guys who was attending didn’t live far from me, so I actually cancelled the car service that night, which they did without charging any extra fee, and I instead expense the fuel for the then-colleague who picked me up and brought me back.

This shows that the ethics of different companies in Italy can be fairly different. I’ll skip ahead to two years back, when my mother turned 60 and I wanted to surprise her, by getting to her place on her birthday without telling her, or anybody that might slip and tell her (it was hard, but I managed to keep it hidden from everybody.) Part of that, it meant I didn’t have anyone who could pick me up at the airport, so I decided to get a cab. First problem, no cab in Venice appear to ever accept cards, only cash, and by the way Venice airport removed the ATM from land-side arrivals, you can either get it airside (which I didn’t) or you have to go back to the city to pick up cash. So he had to drive me to the closest ATM to my mother’s place (which is not very close) and then to her’s. It took me less than half an hour total, it’s less than 17km road from Venice Marco Polo Airport to my mother’s. It costed me €70.

Let’s compare and contrast with my life in Dublin. I don’t use Uber here; it’s available, but only with its UberTAXI service, that calls you a normal cab. That’s usually OK, cabs are aplenty over here, and many accept credit cards just fine. The service is good, never had any crazy experience like the one in Italy, although at least in one case recently I found what seemed like an incompetent driver at the airport, but it’s like once in three years, I don’t mind. But UberTAXI does not handle tipping, and tipping taxi drivers here is normal.

Instead there are multiple competing services in addition to Uber that handle calling cabs, the one I use (Hailo) was recently merged with a foreign competitor. It works in a very similar way to Uber, except it’s optimized for the taxi flow, including the tipping, showing up the license, being able to track down lost items and so on. It has similar problems with airport pick up that Uber had in various other parts of the world though. In particular, they can’t pick up at arrivals, but only at departure, and police and airport staff don’t like that. Indeed in the case I was referring to earlier, with the incompetent driver, I ended up waiting a good quarter of an hour at the airport, and one of the airport people reminded me that they have cabs just on the other side.

But I explained to him one of the reasons why I like using Hailo (when it works): it makes expensing things easier. Even when paying by card, handling the tipping and receipts are not always a solved problem. From one side, it’s easier for me not to have to do mental arithmetic, particularly when it’s late at night and coming back from who-knows-where around Europe, or when it’s early morning and I just arrived with a red eye. From the other, I have a clearly marked receipt in my email inbox that my manager will have no problem approving for expensing. A couple of cabs I took from the airport, before Hailo was available, managed to use PayPal, or Square, or other similar tools that do send me the receipt by email, but the vast majority, even when accepting cards, only gave me a blank piece of paper that I could write down myself.

I guess the point is that for many of the business travellers, paying with cash, or personal credit card, and getting a blank receipts make for an easy fiddling target. Myself, I use a corporate card, so I can only expense whatever the card was charged for, since I don’t need to fiddle. On the other hand, the lack of a properly-written receipt makes it difficult for my manager to approve them, because he can’t see that I followed policy on taxi tipping. Funnily enough one of the most consistent places I got receipts in (once I learnt fa piao to ask for it) was Shanghai: every taxi has the same (government issue?) machine that prints receipts, so I only had to keep those and scan them. Of course they were all cash expenses, which is not great for me.

There is one more thing for which I like Hailo, Uber and similar apps, even when I’m not expensing the trips. These apps are handy particularly when I’m in a foreign country I don’t know (or not know well) because it allows me to get a car wherever I am without knowing where to find the taxi rank, and to provide a destination based on the addresses I know already — this worked out well almost everywhere except in Shanghai; Baidu Maps do not respond to western names, so I couldn’t even find The Westin with it. One of the taxi companies around the Valley published their own mobile app, I tried it out and it was essentially a single page with a button that initiated a call to their normal taxi line; while I’ve been at this point to the Mothership enough to kind of know where I am most of the time, I don’t know I’d be able to describe where I am when calling for a cab.

All these conveniences might sound petty to you. They are clearly first world problems. But they are clearly worthwhile for a number of people, for sure to business travellers, but clearly not only. And they do not need to be tied to the exploitation of less favoured categories. Unfortunately, “founders” end up copying what looks like the meaty part of another business idea, and they seem to be copying that out of Uber, rather than the convenience.

So in all of this, why and where do I use Uber? Well, clearly mostly in the States, but also in many parts of Europe, mostly, in places where there is no other better app (that for instance calls taxis only, like Hailo), or where there is, but it’s not available in English (or another language I understand), or in the couple of cases in which they only allow you to set it up with a local phone number — by the way, Hailo used to be that way, too. Uber has the added convenience that is one app that works effectively everywhere — one account, my US phone number connected to it, and it works out. And it works in most of the States I visit, and I don’t have to figure out what the local app is, particularly for those cities I visit once only, for a conference, or something like that.

Am I proud of it? No. I don’t like Uber, and I would rather have an alternative that is more ethical and works under similar condition; a single taxi app that works across, if not the world, at least most of Europe, and a sister one that works throughout the US. If it means paying more for it, it’s okay: not only I can afford it (and so I think that ethically I should be paying it), but in most cases these hires are for work travel, which means someone else who can definitely afford it would foot the bill! Note, as I said above, I have no interest in cheating the company I work for; I’m just saying that they do not need for me to use Uber to save money compared to taxis.