You have to be a good salesman

Episode #5 of my story starting here.

After the army, I wanted to keep working with my clients, but to avoid being an independent because of the tax+duties nightmare it had been to brutally stop doing business. This is a very important learning: create an actual company, put a limit to your liability in case things go sour. The other thing was that I had also come to experience what one of the best friends of my father had told me quite early on: « you’re going to make good money writing software and you’re going to lose a lot of it in maintenance ». That was really where I was, my first clients were mainly calling me for glitches to fix and minor changes, while new clients paid the bills but would join the growing number of people calling with small problems to address.

With a friend, we decided to create a company together and diversify: we would still do software development, because that’s our main skill, but we would also create a service that would bring in steady revenue. The idea was obvious to us: our customers were already calling us for whatever problem they had with their computers, regardless of whether it was related to our code or not. Acknowledging this, we started promoting a service where, for a monthly fee, we would take care of their backups, regularly clean up their configuration and come fix issues they might have. Basically, being like an IT department for small businesses. I still look at that idea like an excellent idea but it failed miserably for one simple reason: people absolutely needed it, but they didn’t know they did. We sold the service relatively easily to our existing customers but it was an uphill battle with new prospects. Back in 1989, most people had the expectation that, because they paid so much for a computer, the technical support should come with it and cover any problem arising of its use. They could understand why they should pay for software or for the time we were spending writing custom code, but paying for its maintenance was alien to them (« come on, this has to be guaranteed ») and paying for services outside of training was not understood at all. We spent an awful amount of time trying to convince people that they had to have someone take care of their systems, trying to make them aware of the benefits but what was obvious to us, they were blind to. That’s where you need a good salesman in a startup, someone who isn’t going to just try and convince people, but sell, because we would have needed to grow, to reach a critical mass of customers, scale the service and be able to factually demonstrate the benefits. But neither of us was a good salesman, I’m still enormously challenged in that department, and we ended up in a situation where we only created more work for ourselves, with essentially our existing customers now calling us even more than before. So we went back to just software development, which was the only available decision.

Some people have told me « you were too early ». No we weren’t, we were exactly at the right time, with the right idea. It was poor execution, not poor execution in the making of the product, poor execution in the bringing to market. You will often hear me claim sternly that « ideas are nothing, execution is everything », I say this because I know, I’ve been knowing this, first-hand, for over thirty years.

Locked up

Toshiba T1100

Episode #4 of my story starting here.

It feels strangely weird to sit at home, in confinement because of COVID-19 measures, typing my story. It feels reminiscent of the kind of H.P. Lovecraft novel told via the pen of an unfortunate hero, prisoner of his hiding place, putting his story to paper before the untold happens… Fortunately, reality can never be as grim as an H.P. Lovecraft novel, there is always that to cheer us up !

After my first exciting project, I focused on doing simpler things even though I always end up needing some unexpected feature, like that very simple contract with a video club that led me to have to figure out how to encode barcodes and get a matrix printer to print them with enough contrast. This makes me feel so old: people went to shops to rent movies, on tapes as big as a cigar box, dot matrix printers, researching standards in books, this is all so ancient now !

My main customer at the time was an architect studio doing a lot of expertise work for insurance companies. They go on site, analyse what’s going on, send notes to their small army of assistants who, back at the office, type and send the reports and archive copies. Bookcases and bookcases of reports, everywhere. This was before Novell owned the LAN market and they had a server that was connected to maybe eight PC’s via a serial cable each, there were cables running everywhere ! From a software standpoint, that server was really only visible as a shared disk, and every station directly wrote to it like if it were its own. I learned to be very defensive in my coding practice then, any discrepancy between the versions of the code the stations ran could lead to corrupting the database (which was still really a bunch of ISAM files). Corrupted databases led me to spending many nights fixing and restructuring the data while nobody was working, enjoying the photography of architecture books while machine was crunching through records.

I’ve spoken about trust before in this series, and that leads me to the main learning of this contract, a learning I keep sharing to this day with everybody who embarks in a software project, as a software person or as a client : the client is tied to whomever writes the software, uncomfortably tightly. If the writer disappears, the software will die. Sometimes slowly, sometimes abruptly. This is a problem in my profession, something we haven’t figured how to fix yet, it comes from the fact that there are 101 correct ways to do anything and they are constantly evolving, which results in every engineer doing things in a different way. So, when the person who writes your software disappears, it is a massive problem. An that’s exactly what happened then…

I had my contacts, I thought it was all sorted out, but it wasn’t: I got called for military service. In the few weeks notice I had, I did my best to warn my customers and provide the most stable subset of their projects that I could in the short time and, next thing I know, I arrived early at that base in Orange. I got assigned to a dormitory, I was first, I picked a bed and made it up ; after a few hours, others arrived, each of them starting by dropping their bag on the one bed that was made, having me go « who do you think made that bed ? ». A very long year was starting, which I have lived through like captivity.

After two months of « classes », I got assigned to a base in Roquebrune-Cap-Martin quite close to home (contacts did work in some way), and after two more months of standing guard, I finally found some space: I volunteered to work at the petrol pump station, nobody wanted to do that, it stinks and you’re always dirty, but I had noticed that beyond filling up the buses and cars in the morning, the guy there had a desk all to himself and nobody seemed to bother him very much. So, when he got released I took his place. The architects bought me a Toshiba T1100, and I was back in business, serving fuel in the morning, coding like a madman in the afternoon !

With confinement beginning today, it’s quite odd to remember that period of time that was both extremely depressing to me and the illustration that, one step at a time, by never giving up, by working together, there is always a way to climb back up.

Historical Metadata
Year: 1988
CPU: 8086 8/16bits,8MHz,1C1T
GPU: n/a
RAM: 640KB Storage: 32MB?
Connectivity: Netbios over RS-232-C, 720KB Floppy disks
Language: C

A rewrite takes about a quarter of the time

Episode #3 of my story starting here.

In the 80’s, my bread and butter was writing software that would print quotes+invoices and manage a leads+customer database. The word database, at the time, really covered ISAM files together with separate B-tree files mapping a key to a record number. To me, it feels a bit ironic that we’re back to reasoning in terms of key-value pairs with sometimes quite complex composite values, although it shouldn’t feel like that as performance was and still is dependent on the number of times you need to go fetch data (which equally applies whether you’re thinking RAM, SSD, HDD, LAN or Cloud (i.e. always)).

I wrote ipdraw for an IP20 store, they are a german brand of furniture and most of that store’s business was in modular cabinets and bookcases. The complexity is that, in order to quote a project, you need to figure out the exact list of parts you’re going to need, the size of each board or piece of glass, the number of handles, hinges and screws, as well as the time it’s going to take to put it all together. The one trick that made the whole application possible was that a bookcase lies against a wall, it can be represented as a series of columns of various heights, each column described as a series of sections. It’s really a 2D problem, it is really a list of lists. We love lists ! This led to a user interface where operations on the layout where easy to understand, so much so that it could be done in front of the client, while discussing options. Impressively for the time, it could also show 3D views of the project and, again because of the almost 2D nature of the data, it was possible to efficiently sort every object and every face that made it. I remember being surprised myself that it could actually be done.

I wrote a first version in Turbo Pascal, that worked well enough for that store that I met with the French head of the franchise to discuss also making the software available to the rest of the stores. I was already thinking about ways to get the product translated in German… I felt the meeting went well, people liked the software and they wanted more, they wanted to be able to output on a plotter rather than a printer, and they also wanted to be able to quote projects larger than a wall, or not related to a wall at all (desks, meeting rooms, etc). This meeting was going to be the biggest business lesson in my whole life…

I had no idea how to do the plotter thing (I knew proper Hidden Lines Removal was a non starter), but I had a decent idea about how to do the 3D in raster now that things were broken down into convex sections, so I went ahead and started ipdraw 2.0. Turbo C had come out, I had converted all the libraries I had written for Pascal, so I switched to C and rewrote everything. I often say « a rewrite takes about a quarter of the time the original took », and that’s about how long it took. I often also say « … but it will take pretty much exactly the same amount of Q&A », which did take about that long too… The cost of making software really isn’t so much in the writing of the code as it is in the ensuring it does what it should in all the bloody cases.

That version 2.0 was looking amazing plus, Moore’s law to the rescue, it ran exceptionally fast on the shiny new generation of PC’s… But let’s go back to that business lesson I was talking about. I had taken upon myself to do the development on my funds, hoping to sell the software by the dozen once it was ready, but every time I was thinking « this is the version », there was a complaint about some special item in the catalog that could not be rendered. I think I finally realised this would never end when they required rounded corner desks… I had made a classic mistake: I was working for free and they were trying to make the most of it. Always make sure your client has a stake in the project, make sure that there is both common interest and common risk.

The irony is that they did not really need all this rendering, the actual business need was the parts lists necessary to all quotes and invoices. I was focusing too much on the graphics side of it, and they did too… Around the same time, I was contracted by a kitchens store and when I had shown them ipdraw, they said « that’s exactly what we need, except the graphics » : they had professional draftsmen who drew plans to drool for. This ended up being much better business, much better customer satisfaction and really good reuse of code…

Historical Metadata
Year: 1986
CPU: 8086 8/16bits,8MHz,1C1T
GPU: Hercules
RAM: 640KB Storage: 20MB
Connectivity: 360KB Floppy disks
Language: v1 Pascal; v2 C

How I decided to become an entrepreneur

Episode #2 of my story starting here.

By the mid-80’s, when my friends were making pocket money by giving lessons to kids, I started writing programs for my friends’ parents. After IBM had made micro-computers a serious thing, everybody was buying PC’s; only to realise you could only go so far with BASIC or Multiplan. Most of the time, they were artisans or small businesses wanting to automate invoices, quotes, a bit of stock management. Nothing too complex on the surface although I faced straight away the bane of software development: nobody wants to do things exactly the same way and, with flexibility comes complexity.

At that time, I was at University studying towards a Maths+Physics degree that would give me access to the Computer Science cursus I was after. There was a computer course as part of that and, since I had already taught myself Pascal, the teacher let me attend the 2nd year courses straight away. I wasn’t so keen on thermodynamics or quantum physics or clever calculus methods, instead I was spending my time in the computer labs, making use of as much screen time as I could get. Several teachers gave me a hand even though I was a bit of a stowaway, there was a beautiful spirit of discovery and exploration because the PC, and the Macintosh, were such new things at the time that we were all learning from each other’s experiments.

As my project, I had chosen to look at the problem of Hidden Line Removal. High resolution graphics back then was about wireframe rendering at 720×350, monochrome (as in black or green). Which, on a 10MHz processor with a few hundred kilobytes of RAM turns out to be quite challenging. As a matter of fact, it turns out quite challenging whatever the hardware because the base operation is about splitting segments across their intersections in image space and, as the face count grows, number of intersections increase, and resulting segments become smaller and smaller. You quickly run into numerical precision problems. So, as always with computers, the solution is to avoid having to do the calculations in the first place and leverage special cases wherever possible. After a couple of years of that I still hadn’t managed to get that Math+Physics degree but I had become very experienced with 3D graphics.

There came a point where I had to chose between those jobs I was doing on the side and university: I had reached the revenue threshold where I needed to do proper invoices and declarations, pay taxes and act as a professional. There was also this opportunity I was seeing with the father of a friend: he had a furniture store specialised in made-to-measure cabinets, he needed a program to compute all parts required (boards, hinges, handles, screws…) and print quotes and invoices. I created a graphics UI for him that let him just draw the project and let the computer worry about what parts were needed. It printed parts lists, made quotes, and… displayed a 3D representation of the resulting layout. His store was a franchise, no doubt I would be able to sell the software to the other stores, no doubt I would be able to sell the concept to other interior design companies. My mind was set, I can do this, I will, enough with these tensors, laplacians and wave functions: I’m not a scientist, I am an Entrepreneur !

My first paid job

After almost twelve years at Intel, the company has decided to let me go. Like I often say, with a job at an American company, the ejector seat is fitted as standard; so, no hard feelings. It feels quite strange, though, to sit down and put a CV together at this stage in my career: there is so much I want to talk about ! Which led me to something obvious: why not blog about it? So, here we go, first post in a series where I will look back at past projects and the learnings I took from them.

It was the early 80’s, I was sixteen, maybe seventeen, and had fallen obsessively in love with programmable calculators like my TI59 and micro computers like my ZX81. I also had been practicing fencing since the age of 10 and, I’m not sure how, in discussions at my club, the idea came up that a computer might make the management of a competition more efficient. Ever the enthusiast, I ended up volunteering and being asked to make a proposal for the federation to consider…

I had to present the project in front of the federation council, a number of people I had the utmost respect for, and I was absolutely terrified. I was sitting at the table, waiting for my turn to speak, listening to the other topics when I noticed something that has helped me for many years afterwards: under the table, the president’s hand were moving nervously. In that instant I understood that even for a great speaker like him, someone so confident and respected, speaking in public was intimidating. What a powerful revelation!

I went for a solution that would be really easy to carry around, I told them they should buy a SHARP PC-1211 and its printer. Even at the time, it qualified more as a calculator than a computer, but I was convinced I could write a program on it that would do the job. And I did. I spent part of my summer writing the code on paper and the rest making it work once the actual machine was made available to me. Looking back, I’m not even sure how this could work, the machine can only show one line at a time, it has so little memory that it’s even difficult for me, now, to accept we ran competitions using it. But we did, the machine handled group phases followed by direct eliminations, it printed results and next bouts on tiny bits of paper that were proudly displayed between phases… A couple of years later, PC clones had become cheap enough, they got one, a full size printer and some professional software. In the blink of an eye things had evolved from tedious paperwork to complete automation !

After this project, there was no question: « this is what I do ». I was useful to society, I experienced this feeling of achievement, people trusted me ! To this day, this remains my drive: being trusted with a problem to solve, and cracking it.

Historical Metadata
Year: 1982
OS: n/a
CPU: custom 4bits,0.25MHz,1C1T
GPU: n/a
RAM: 1.5KB(?!) Storage: n/a
Connectivity: cassette tapes