Last year after attending the Shareware Industry Conferences, I was surprised how much people were able to make with one or two products. TechSmith supports over 100 employees with two products, SnagIt and Camtasia. Another developer sells a product, which is extremely narrow and technologically basic yet generates over $200K a year in net income.
I look at this static analysis tool, which is actually a diversion from my main pursuit, and see rich possibilities. It’s becoming a more interesting product than I envisioned. Right now, I am looking at offering three different products, one free version and two commercial versions. Of the commercial versions, I would only have to sell a few thousand to actually generate a million in revenues (which doesn’t seem that difficult). The free version allows me to engage in interesting marketing tactics, build awareness, and charge somewhat higher for the commercial versions ($199 and $399 is currently what I am looking at). Upgrading from the intermediate to the higher-end commercial version will be a straightforward difference. There won’t be an evaluation period for the commercial versions, but I will probably offer 60–day money-back guarantees. Bloggers will probably get a special offer.
The free product will likely have parameter validation for the base class library, and the commercial versions will probably sport validation for all of WindowsForms, WebForms, and the upcoming WinFX API. The commercial versions will have more detailed error information as well. The high-end product will probably have the ability to add customized rules and API specifications, command-line versions, and XML output. I’ll most likely offer free upgrades to version 2.0.
I noted some limitations of my product in an earlier blog post. Most of the limitations have since been removed. I was able to add complete support for static typing in my underlying interpreter and also distinguish between C# and Visual Basic semantics. The floating-point limitation still remains, but I may eventually address this limitation with support for big integers, big decimals and rational numbers.
I eventually plan to move on to my next project, which involves an futuristic graphical IDE, based on a wordprocessing engine that I previously developed, and work on NStatic part-time. It’s all the same code-base and there will be substantial cross-pollination between all my projects. It won’t be a replacement for any industrial strength IDEs, but might be unique and useful to be used alongside those tools. It’s also an interim product, intend to mature my wordprocessing technology, which I will probably then have to port over from GDI+ to Avalon.
I read this post on the future of IDEs by Erik Meijer, and it seems that Microsoft is thinking along the same lines that I am. I am thinking of the following ideas: (Microsoft seems to be becoming exponentially more innovative with time, and, in a decade, might actually be a place I might be tempted to rejoin again.)
- Making C# feel more like a dynamic, interpreted, REPL language through the use of a symbolic interpreter. Code is always live and can be statically debugged. As Erik states, programming will “shake of the yoke of the dreaded (edit, compile, run, debug)* loop and replace it with a lightweight (edit=compile=run=debug) experience.”
- In the future, code and documents will begin to resemble each other. IDEs become more like wordprocessing as code moves away from text, and wordprocessing becomes more like IDEs as wordprocessors understand documents better.
- Operations become more intelligent. Search and replace, for example, become generalized refactoring (IntelliJ already has an incomplete implementation of this idea.)
- Being able to unilaterally extend the language, and free ourselves from the benevolent tyranny of people like Guy Steele, Anders Hejlsberg, Herb Sutter, and Bjarne Stroustrup.
Of course, the usual caveat applies. These are just thoughts and not promises.
I looked at IntelliJ from JetBrains, and it looks like one of the few intelligent applications out there. Recently, the company released an early version of the (MPS) Metaprogramming System, which is a graphical IDE, that I have not looked into, and probably won’t until after I release my own products. There is also some recent rumors about things happening in Intentional Software.
Developing for Developers
Speaking of developer tools, Bob Walsh of MicroISV recently wrote “Don’t write a product for programmers.”
For most programmers who decide to go micro-ISV, the first impulse is to write an app or tool or library for other programmers. Very common, very human, very wrong. Now don’t get me wrong, I love new programming tools and stuff as much as the next programmer. And if you’ve got a genuine product that will solve one of my many unmet needs, I’m going to poke around Google until I find you.
But as a micro-ISV market, programmers suck. Unless you’re product does something I really am impressed with, the typical programmer is going to puff up their chest and huff, “I could code that in an afternoon!” as they click off your web page. What’s more, the programmer market is from a marketing point of view dozens of tiny little programming language enclaves, each jealous of the others.
I don’t know if the two reasons given for not writing for developers is valid in my case. (1) Will developer’s think “I could code NStatic in an afternoon?” (2) It’s fairly easy for me to incorporate other languages for code analysis.
I actually never wanted to write for developers, but, rather, for a mainstream audience, but, if developers insist on giving me money, I might have to delay my dream some.
Mentioning my interim product in my blog has gotten me a little paranoid. I noticed this in one of Joel’s forums.
[KF writes] You quote: "Our newest hire Stefan is developing a pretty shockingly sophisticated automatic testing system"
Is this for internal use only or something to sell for the future? If for sell I know I would be interested. I need automated testing and have looked at TestComplete. I doubt I need 90% of what it has though. Just curious.[Joel replies] Testing apps are one of those weird categories where the gap between something that is useful to test one product and something that is useful to test any product is enormous.
Hmm… Could Joel be producing something similar?
I do eventually expect Microsoft to come along and obsolete the product in a few years, since Microsoft appears to be investing heavily in code analysis research as part of its security, reliability, and Team Suite push.