Subscription Pricing is for Stagnating Products

I make desktop apps, and sell them for a one time fee. It’s a really simple business model, and my customers seem to like it. After you bought one of my apps, you can use it as long as you like. I believe this is a good deal for my customers, it’s a good deal for me, and it’s how it should be.

However, a lot of software publishers have been switching to subscription pricing lately. Usually the argument is that modern apps aren’t static; developers continuously work on bugfixes and new features; and if people keep using a piece of software it’s only fair if they keep paying for it. Allegedly it’s not sustainable to deliver free updates to people who only paid once.

But how come I can make a living with buy-once apps?

The secret is growth. As long as my app gains new users every day, new people will buy my app. And it doesn’t cost me any money to give updates to existing users.

So why are other companies so eager to switch to subscription pricing? I believe the answer is that they are stagnating.

Microsoft and Adobe are a perfect example of this case. Both companies completely dominate their market. They have little perspective to grow, since everyone who needs their software is already using it anyway. Paid upgrades won’t help. Many designers would be happy with a version of Illustrator that is a couple of years old, and the typical office worker is probably even opposed to upgrading their good old copy of Word. Thus, the only way to increase their revenue is to charge their existing users more. Hence, subscription pricing.

As a small independent developer, I’m in the opposite position. I’m far away from market dominance, my user base is growing every day, and I don’t need to charge recurrent fees for users of my software. And it works out just well.

The one thing I don’t understand is why smaller companies are also trying to switch to subscriptions? Are they also suffering from a stagnating user base, and hoping to increase their bottom line? If that is the case, they are doomed — subscription pricing will only diminish their user base even faster, and won’t fix the underlying problems that led to a lack of growth in the first place.

My Very Own Office

I had a private office for some time at university. Most students were offered a desk in a shared office, but due to the smouldering turf wars at the institute it was decided that I should work in an unused assistant professor office. I was a placeholder, to make sure no other research group could claim the space. I didn’t care too much about office politics, but I quickly grew fond of my very own work space. I had a large old desk with drawers and a spacious filing cabinet. When I closed the door, there was nothing but a slight hum from my workstation. Peace and quiet, only interrupted by the occasional faint sound of footsteps down the hall.

I did like the company of my colleagues. I bought a small Kenwood espresso machine and some cups, which quickly made my office a popular location for occasional coffee breaks. A bit of office gossip was a welcome distraction after hours of staring at the same formulas, waiting for an elusive epiphany.

Of course all that abruptly changed once the new assistant professor arrived. I had to remove the espresso machine. Workers carried out the old desk and filing cabinet, painted the walls, and brought a new desk for the new owner.

I haven’t had the luxury of my own office ever since. I’ve worked out of shared offices, from home, and from co-working spaces. Working conditions varied wildly; sometimes it was pretty quiet, but sometimes it was impossible to work. Especially at home, after my first kid was born, it slowly became impossible to concentrate.

Around the summer of 2015, my newest app Postico really started to gain traction. My efforts to become an individual software developer were now starting to pay off financially as well. Across all my apps, I had reached around 5000€ of monthly revenue. I decided that was enough to afford a real office for myself, so I started looking for office space.

It turns out that small offices are neither cheap nor readily available. There were plenty of ads for large offices, but almost nothing that was suitable for a solo developer. The offers I got were either windowless or otherwise uninviting; not a place where you’d like to spend your workday. One realtor showed me a small office in a commercial building. There was a shared break room, with the filthiest coffee maker I’ve ever seen. The kitchen sink looked like it belonged in some industrial complex, and in a corner of the room there was a small toilet, separated from the rest of the room with thin dividers. And it wasn’t even cheap!

When my initial search didn’t pan out, I started to look at small apartments — and I quickly found what is now my very own office. It’s 50 square meters, has a nice kitchen and bathroom. It’s right in the center of Linz, in one of its typical old town houses. It has a very high ceiling and large windows. The building has a beautiful facade, and a door made from wrought iron and glass.


For the past few months I have now been working from this office. It’s wonderful. Most of the time, I work completely alone. Occasionally, I do miss the socialising aspect of a shared office, but once I’m “in the zone,” I forget everything else and enjoy the distraction-free work environment. Whenever I’ve had to work in a shared environment, I felt a bit tense. It made me ever so slightly uneasy, when there was someone potentially watching me. But when I’m alone, I can relax. I can dive into my work undistracted. And when I get off-track and end up surfing the web aimlessly, it’s nice to know there’s nobody here to judge me but myself.

Customer Support

It should be trivial to contact customer support. The best way is to have an email address like prominently visible on every page of your website. Don’t use web forms and don’t make people select arbitrary options before contacting support. Under no circumstances expect customers to create an account on your website before they can contact you.

This should be obvious if you have any sympathy at all for your customers. It would seem spiteful to require a customer, desperate enough to contact customer support, to jump through hoops just to contact you. Plain old decency towards your fellow coinhabitants on this little planet should make you understand that.

This is the point where most people will say something like “but we don’t have the capacities to deal with all those emails from our customers. We must put some obstacles in their way to avoid them from flooding our inbox.” And at first that sounds absolutely reasonable. Now, in my opinion you should just hire more people to deal with support if you can’t handle the volume. However I understand this is not possible if your business model requires you to serve large amounts of customers with limited staff. But reducing the number of support request by making contact harder does not solve the problem, it merely hides the issue. The problems of people that can’t find a way to contact you don’t magically disappear. These people will probably get angry, they might abandon your product, and you’d be none the wiser because they can’t contact you!

The most dangerous part of this is that you have no control over which customers you turn down. Requiring user accounts or filling web forms with half a dozen required forms will make many people change their mind about contacting you. But you have absolutely no way of controlling who will get through. Do you prevent people who waste your time from contacting you? Or do you risk losing your most loyal customers because they can’t get help once they need it after happily paying you for years?

I’d like to draw your attention to a very significant group of users that you are sure to scare away: potential new users. Often, when people first try a product, they will run into bugs or issues because they will use your product in unexpected ways. These potential customers usually do not care the slightest about your product. They’re just evaluating it and they will happily conclude that your entire product is crap if they run into the tiniest flaw during initial testing. It is essential that these people get help as quickly and simple as possible, or you lose your possibly only chance to make them your customers.

Note that I’m only talking about making it easy for customers to contact you. I didn’t say that you need to actually provide support for every issue. It’s absolutely reasonable to tell a customer that their request is too complex or too specific to be handled by customer support. You may tell them that they need to get paid support to answer their specific question. I’d even go as far as to say that you don’t even need to answer every request; for example if someone sends you an insulting email, there’s absolutely no reason for you to respond.

The important part is that it is now your decision which customers to help. If you are overwhelmed, you get to pick and choose which support requests are important enough to follow up on. If you scare customers away with pointless bureaucracy before they contact you, you have no say in which support requests you end up with. You’ll probably end up with only obnoxious people contacting you. But if you filter requests after people contact you, you’re in control. You can make active decisions.

The reason why it’s so important to let customers contact you is simple: it’s the most direct way of customer feedback. No amount of usability testing or customer surveys are going to tell you about how customers use your software in the real world. You’ll only get a glimpse of real problems by listening to customer support requests. Support requests are the quickest way to discover rough edges and pain points. In my experience, most support requests deal with the same topics again and again. This means that dealing with them is pretty simple; you can prepare responses to most common queries and don’t need to spend a lot of time per request.

But the real opportunity is of course to fix the common pain points underlying the most common support topics. For example, I often got support requests from customers asking how to activate their license. The answer was simple; just double click the license file. I added instructions to the purchase confirmation email, I added instructions on my website and in the documentation. People still asked me. Nobody seemed to get this intuitive way of activating my app. So finally, I put a button labelled “Activate” in a prominent position. It seemed inelegant, but after that, I was never asked about activation again. By paying attention to customer support, I was able to remove a pain point for many users, that would never have occurred to me on my own. I had thought it was completely obvious how to activate my app.

If you fix enough of those pain points, customer support requests will go down; not because people don’t contact you, but because people don’t have any problems anymore!

Work time and productivity

When you’re self-employed, you can choose how many hours to work. Many people end up working even more than employees — you feel guilty when you’re not spending every waking moment working on your business. I fall into that trap too, sometimes, but I’ve realised working long hours isn’t necessary for making a living.

Currently I work about 20 hours a week. I take my two boys to daycare at eight, and pick them up at noon. This gives me four hours of uninterrupted work time, five days a week. Sometimes I wish I had more time to work, but on the rare occasion that I do work longer hours, I’m not really more productive. Limiting my work time somehow encourages me to make use of the little time I’ve got.

When you’re working on a project that takes a long time to develop, it doesn’t make sense to rush anything. It’s more important to be persistent. I try to work on my product every day, and every little bit I add makes my product a little better. My customers don’t care if it took me a week or a month to implement a feature. They only care if it works.

I work slowly. I don’t subscribe to the ideas of “rapid iteration” and I don’t think you should “fail fast”. Instead, I try to work at a slow but steady pace. I try to make sure I get closer to my goals every day, without burning out on the way to get there.

There’s a nice side effect of working slowly: You have lots of time to think about things you are doing. When you work 4 hours per day, there is a lot of time left for your mind to reconsider your solutions, and to come up with smarter or more elegant ways to solve the problems you encountered. I think this is especially important when working on a large project. When you’re banging out code 10 hours per day, you won’t have time to reconsider any of the dozens of decisions you made that day.

I retired an iPhone app

Almost two years ago, in January 2013, I made an iPhone app. It took me about two weeks from start to finish. I ported my Access database reading library from OS X to iOS. Then I added some drawing code that I made for an app I never released, and assembled a simple app for viewing Access databases on the iPhone. I named the product “Access View” and uploaded it to the App Store.

It was initially rejected. Since I was pretty busy, I didn’t really care about that. I only bothered to respond to the trivial rejection reason about a month later. After some tiring back and forth with app review, it was finally accepted and available for sale at a price of €1,79.

Initially I got nice feedback, and a bunch of feature requests. I made around 5 sales a week, so I decided to wait with implementing new features. I said to myself, if sales ever pick up, I’d start improving the app. But sales never picked up. Then iOS 7 arrived, and my app looked really outdated all of a sudden. I thought to myself, well, if I have some spare time, I’ll update it to iOS 7. I never had any spare time to update it.

So now I had an outdated app in the App store, making very little revenue, and no plans to improve it. At some point I decided that I might as well make the app free. Even if I don’t make any profits from it, maybe some people find it useful. It was also a sort of experiment: How many more people would download my app if it was free?

The first day that the app was free, 1000 people downloaded it. I was thrilled! I was excited to see the number on the next day, and was a bit disappointed when only 350 people downloaded it. The peak was quickly gone, and stabilized at around 10 to 20 downloads per day.

I got an occasional email suggesting new features, and I always replied that I didn’t have time to implement them. I figured, it would be better to have a not very good free Access reader on the store rather than none at all. And it felt good to give something away for free!

Then iOS 8 arrived. A feature in Access View broke, and users started emailing me about crashes in my app on the new iPhone. That was when I decided it was time to retire my app. I have no time to work on it, it’s not generating any revenue, and it’s broken. I logged into iTunes Connect, removed the app from sale, removed it from my homepage, and started writing this blog post.

Access View was downloaded by 2500 people and generated a revenue of 700€. It was my first attempt at selling an iPhone app, and for the time being it will also be my last.

I learned that even if an app takes only two weeks to develop, there’s a lot of additional effort connected with distributing it on the App Store. Dealing with App review, making a website, handling customer support… all these things required more of my time than actually programming the app.

It’s important to focus. I’m good at making Mac apps, and discontinuing my iPhone app leaves more time to work on MDB Viewer,  PG Commander and

Leaving Academia

I recently left academia. I was a graduate student, and I had just passed my qualification exam. I should have started to work on my grand project that would lead to my thesis. But instead I decided to leave. I decided that I’ve spent enough time being educated.

Being in grad school just started to feel weird. I started thinking about all the things I’ve accomplished in my life. I’ve participated in the “physics olympics”. I’ve graduated from high school. I’ve graduated from university after studying physics for 6 years. I’ve worked on multiple archaeological web databases on the side. And yet, I was still going to school, and I still had to write one exam after another, proving that I was worthy to continue. After my qualifying exam, I just got sick of it. Sick of having to prove to other people whether I’m worthy or not. I know what I can do, and that’s enough.

I started thinking about why I was going to grad school. Was it to get a better job? I was pursuing a PhD in computer graphics. With that degree, I would have two main options: attempt a career in academia, or look for a job in the entertainment industry. A career in academia would just require even more proving my worthiness. As a postdoc I wouldn’t take literal exams, but I would submit lots of papers, hoping that they would be accepted, or apply for grants, or interview for better positions. I’d constantly be evaluated. That’s not what I was looking for. So I’d have to look for a job in the entertainment industry. But it turns out that this is a hard business. It’s extremely competitive, and people work extreme hours. There’s constant pressure to finish a project on a looming deadline, only to start with the next stressful project.

If I’m not going to grad school because of job opportunities, what other reasons are there? Pursuing my interests? As a PhD student you get to choose some interesting problem and work on that, right? That’s what I naively imagined before I started at the institute. Some day at lunch I told my supervisor about this idea I had. We could take his fluid simulation method from computer graphics and apply it to a problem related to molten polymers. There was this experiment by a group of applied physicists that would fit nicely. He asked me how many people would be interested in the problem. Maybe a handful, I said. And then I realized that there was no way I could work on that problem. Success in academia is measured in the number of citations your paper receives. What point is there in writing a paper that is only interesting to such a small audience? To be successful you need to target a large audience, and not just pursue whatever obscure problem takes your fancy.

There seemed to be only one reason to continue: If I’d finish grad school, I could introduce myself as “Dr. Egger”. I’d have a really prestigious degree! But is that really worth four years of my life? I myself tend to not think very highly of people who care only about degrees. Most people I care about don’t care about degrees. It seems that going to grad school just for the sake of having a degree is not a very good reason for me.

Why was I continuing with this? I had applied to the institute because I didn’t want to stay at my previous university, and I saw a poster advertising a really nice graduate program. Applying seemed to be the natural thing to do. Was I just working here because I was accepted when I applied?

So I left academia. I decided it’s time to stop educating myself, and put all that education to some use.

Realistic textures in user interfaces

There’s been a lot of discussion about the realistic style of user interfaces that is so popular right now. Many of the design-conscious crowd advocate simpler, flat interfaces, with clean typography. But there are reasons why textures in general are so popular, and realistic textures in particular.

Why are user interfaces textured?

Textures hide imperfections of the physical display. Even though displays are getting better and better, they are far from perfect. Maybe the backlight illumination isn’t completely constant. Maybe the difference in the viewing angle leads to subtle color variations from top to bottom of the screen. If a user interface contains a lot of solid colors, these imperfections will stick out. The more visible those imperfections are, the more you will be aware of the physical device you are using. But modern user interfaces try to immerse the user. You should have the feeling of touching the app you are using, not a screen. A texture can help. It hides dust and fingerprints. The more details are displayed on the screen, the less visible all the physical imperfections become.

But there’s an even more important reason to use textures; it has to do with the way our eyes work. Our eyes do not simply transmit an image from the retina to the brain. On the contrary, the cells in our retina already perform moderately complex computations before transmitting information over the optic nerve. One of these computations is motion detection. That’s why we can spot moving objects instantly. But this motion detection depends on tiny details in the texture of the moving object. If we observe a moving object with no texture, it doesn’t feel like it is moving. Now if we see a featureless colored rectangle move across the screen, those motion detection cells won’t fire. Even worse, they might respond to the subtle texture of the display itself. Our brain will still use other clues to determine the rectangle is moving, but the retina will say it’s standing still. The conflicting signals will break the immersion; and we will become aware we are looking at a screen. But if the moving rectangle is textured, it will appear as a real, solid, moving object.

Now textures aren’t totally necessary for immersion. You can become totally immersed in an 8 bit video game just like you can become totally immersed in a book when the story is good; but immersion is a lot faster and easier when you don’t have contradicting input from your senses. That’s why user interfaces are textured.

Why do user interfaces use realistic textures?

A lot of the discussion about skeuomorphic design centered on the use of textures resembling materials in the real world, like leather or paper. I’ve explained why textures are important, but my arguments would allow for any texture. And indeed, any texture can be used for the described effects. For example, Apple uses a subtle noise texture in OS X window title bars that doesn’t resemble a real world texture. But why do so many apps use fake leather, or wood, or paper?

One reason is that materials from the real world carry a meaning. Paper in the real world is printed on, or meant for writing on. This makes a paper texture perfectly suited for a content area in a digital user interface. Leather on the other hand is not usually written on, so a leather texture is more fitting for decorative elements. By using appropriate textures, designers can give subtle clues to the user.

But a much simpler explanation for the use of real world textures is that we are used to them. People like familiar textures. Take a look at the furniture people buy. Most of it is made from chipboard now, covered with a printed texture. By far the most popular texture is some variation of wood grain. Why? When you could print any conceivable pattern on furniture? It’s because an artificial pattern would stick out. When you see it you would stop to inspect it more closely. People don’t want a piece of furniture to attract attention, they want it to be part of the room. It’s the same in a digital user interface. The designer wants to use some kind of texture, and decides to go with a natural texture. The natural texture will not distract, because everyone knows this texture already. Nobody will pay attention to inspect a simple wood texture more closely, because we are already familiar with wood grain.


Modern user interfaces, especially on touch screens, aim to immerse the user; to let you feel as if you were manipulating objects in an app directly. Textures facilitate this immersion. While arbitrary artificial textures could be used, realistic textures are less obtrusive. A completely flat user interface might be considered more pleasing from an aesthetic point of view, but it can never feel as natural as an interface with realistic textures.