My wife took my Air and so for a moment I thought I could not write this blog post without going to the office. But I turns out that a reader had donated an Apple Wireless Keyboard that was unused so far. So I only had link that to my iPad 2.
I’ve been selling component code for many months now and so it somewhat irritates me when Verious comes out of the closet claiming to be the “first market place for mobile app components”. I was about to ignore that until today – on Flipboard – I read another such announcement: Appcelerator unveils – yet another – “open marketplace to unlock mobile innovation”.
Both statements are misleading and – as somebody on Twitter put it – these companies are just trying to cash in with the iOS craze. And there are more. Let me share my thoughts.
I started selling components out of necessity. I had been laid of by Amdocs a month earlier, facing the hard deadline of swimming or drowning two months later. Something had to happen that would allow me to sustain myself. I was dabbling in iOS on the side, now all my income had to come from it.
And strangely enough, the popularity (read: traffic) I had built in my site before let to sufficient sales to surpass my income from apps by a factor or 2 or 3. I was lovin’ it, dealing with developers is much different than receiving “feedback” from users.
Apps are 60% design (or thereabouts) if we believe what Apple says. That also means that by myself I could never hope to make apps that have hit potential. The dozen or so apps I released in my own name are more or less a playground for me to try out techniques and technologies. Whenever I deal with clients who are contracting me to build an app for them I am upfront about me not being a designer. I will only start coding once I see some fleshed out mockups and the artwork can be provided. Of course I could whip something together in Photoshop too, but that would be a waste of people’s money if I am charging my normal contracting rate.
Better do what you are good at. I found that I like to work as part of something bigger and concentrate on small areas that resonate with my expertise. I love to build things that somebody could take and put into his app. If I am paying for the R&D myself, then it will be a component that I am going to sell. If somebody else pays for it, then it is his.
Speaking of payment. The very first component that I built was DTChartView which I developed for an app that has since been threatened to be sued out of the app store. At normal market rates a library like that would be worth like 2 man weeks. You would have to hire somebody for 2 weeks, 5 days a week, 8 hours a day to build that and pay this person around $8000.
But in the example of DTChartView my business sense kicked in. I offered to be charging only a fraction of this ludicrious amount to the developer if I could also sell this component to other clients. We had a deal and my first component was taking shape.
So if you find yourself developing something that has potential as a stand-alone component you could formulate an offer along these lines: “You can either pay me full rate for this component and get exclusivity for it. Or I charge you 10% of the actual development cost and I get to sell it to other clients as well”. Capital on app development is always short, so most clients don’t need to own this part of the code exclusively.
I added a couple more small components and that allowed me this good start I had. Soon afterwards somebody approached me to build DTAboutViewController to have a flexible configurable about screen for his app. Same offer from my side. Same result, about a month later I had another component to sell.
Componetizing your software forces you to compartmentize your classes. No longer can you put model references in your view classes if you plan to reuse your code or make components out of it. And also it trains your business instinct because you start to consider which parts would be worth another developer’s cash.
Actually you can never actually sell your code. If you did that, then somebody else would own the commercial rights to it. Instead you actually sell licenses to incorporating the code into other people’s apps. Because of this there is another big schism between my personal philosophy and those of all these “marketplaces”.
I sell access to projects in my Subversion repository instead of binary builds for this exact reason. Because I am selling licenses, not code, it is ok if buyers see all there is under the hood of my components. This kind of access allows my clients to also reap the benefits of quick corrections without me having to do another formal release. They just SVN UP and they have it. If I am developing something bigger that I don’t want to touch the stable trunk for, then clients also have full access to the BETAs in my branches.
This tightens the feedback loop and I can be more agile in fixing problems and implementing new features. If the features are benefiting the project as a whole then I don’t charge extra. If they are a special case only of interest to one client then he has to pay for their implementation and gets them exclusively. See above.
One thing I hate about these “component marketplaces” that seems to be common practise is that you don’t get this kind of access to the versioning system where the components are being developed. Instead you get binary builds and thus the impression that you are actually buying a finished product. It might be just my personal impression, but I get the feeling that the developer (and shop owner) just wants to get my money but he is neither interested in entertaining my code critique nor contributions.
There is enough FUD as it is, but companies like Verious bank on it stating their DRM system for components as their unique selling proposition. Hey, somebody could rip off your code and sell it as their own! Be afraid, be very afraid. (and pay us because we help you.)
And I don’t think piracy of source code is an actually existing issue. Developers are honarable people by definition because they also don’t want to see piracy gnaw on their profits. In reality I get frequently surprised by people wanting to purchase the appropriate licenses out of their own motivation.
There is a great example in my Open Source project NSAttributedString+HTML. This is free software but comes with an MIT license. You can use it – even commercially – but you have to attribute it to me. In source code this means you have to include the LICENSE file. In apps this means you have to credit me, say in the About section. But I offer a non-attribution license for 75 Euros that makes allows usage without attribution. I actually sold more of these licenses than some other of my components. This tells me that if the price is right developers will prefer to pay it over (ab)using your source code.
I am interested in having a dialog with my clients. Of course I love to take their money too, but I love to hear suggestions and get feedback. Any kind of store system usually gets between you and your developers. It is their business to so so and they charge you dearly for it. Everywhere between 20 and 30 percent of sales.
Being a player in the component arena also means that you get contacted by all the other “marketplaces” hoping to score you as somebody to sell on their platform. Verious I immediately dismissed because of their DRM-philosophy. Another store is not launched yet. And yet another is launched, but is not harmonizing with my personal philosophy as outlined above.
Actually by writing this I might even drive away one of these players who is still actively courting me. But my integrity and your benefit is more important than business.
These are the things I want from a store before I will even begin to consider selling my components there:
- An affiliate system where I also get a share of sales of other people that I send to their store
- I want to be able to keep the descriptions of my components on my own site but only link to the shopping bag system on theirs.
- A software versioning system, Subversion or Git
- An inssue tracker that interfaces with the versioning system.
- Possibly an automated or continuous integration system that automatically builds binary packages of tagged revisions (for users who prefer a file dump)
- A system that allows me to communicate with my developer-clients about my components.
- An account management system that would allow me to elevate specific users to contributor status on certain components so that they can also commit fixes/improvements
If that sounds kind of like GitHub then you are understanding me correctly. GitHub is free for open source software and that is great. Unfortunately their business model is to charge for non-open repositories but they don’t give you a store. If GitHub would realize this then they could wipe out the “component marketplace” competition over night. Psst, nobody tell them. 😉
If a component store wants to be worth a share of your hard-earned profits then they have to automate the above mentioned items for you. Add to that the traffic they might get on their centralized site. You as a developer should only have to worry about your code, all other infrastructure should be provided.
Imagine – if you will – a hobbyist developer who does not have his own SCM. He would sign up with this utopian service, develop his code in the provided git repository, track issues in the attached issue tracker, communicate with his peers and have the invoicing also taken care of. That is the vision that I am after ever since I first wrote about the Ultimate iOS Parts Store.
For lack of a partner that offers all of this I keep doing it myself. I did a quick query of Twitter about what percentage of sales you think would be appropriate of recommending my components. The median response was around 5%, much less than 20-30% that these other stores want as their cut.
I have a deal for you: if somebody mentions that you recommended a component when he purchases it, then you get 5%. If you have a component that I could put in my own store, then I am only taking 10% of sales for creating the PDF invoices by hand.
And if you already have your own sales system in place then there is also another possibility for us to collaborate. Let me add your components to my parts store as well and link to your affiliate system. I’ve been doing that for a month now with SensibleCocoa and we are very pleased with the results. (Disclaimer: I get 10% of sales of SensibleTableview)
We are all in this together. Don’t let somebody who is trying to profit from your success come between you and your developer-clients.