I started working on Rapid-Dev more than a year ago, at the time I had some extra time and i was looking how to use it to do something i really needed. looking back and trying to see what made me actually start that is quite interesting.
So what has led to the development of Rapid Dev?
Feel the need
the first thing that actually pushed me into this project, is a need I felt. It can be summarized very simply. If my IDE is smart enough to do a background compilation, why do I need to tell it to execute my tests every time? and than wait for the results? It should be smart enough to do that while im working and have the results ready for me when I need them.
I also remember that I looked at my development environment and found all sorts of tools/tweaks that were suppose to solve this. However all of them just came close, but none gave a full solution to the problem. I had TestDriven.NET installed which allowed me to execute the test from inside the IDE. I had my projects kick off an NUnit GUI when I pushed the debug button, and I had machine (CI server) that kicked in tests on every commit. All of these were good but again none answered my basic need:
I NEED to get a faster feedback from my unit tests.
Investigate the Market
Actually that's probably not a good description of what happened. I didn't went into a full investigation mode. I did felt a need, and at that time I heard about JUnitMax so I was quite sure that like most things, someone already solved this specific issue. It actually took me quite a while to really grasp that there was no such tool in the .NET world. so if I want one, I'll need to create one on my own.
During this search I also encountered a second Java tool - InfiniTest, which just made annoyed me. Those java guys have TWO solutions and the .NET has none!
On the up side, this made me confident that the need is legitimate and not pure personal, i.e. there is a market for this. Which really encouraged me to actually start working on it
And last, looking at JUnitMax and InfiniTest made me realize that they solved the problem in ways I not only i can repeat in .NET, but given my current background knowledge, I really can solve it technically wise.
Find the Courage
Having the courage to actually start was really the hard part. developing Rapid-Dev was not the first idea i had, and I've seen other had many good ideas as well. However there's a long distance from a raw idea to a full product. A good idea is just a starting point and the road from an idea into a full product is hard.
My initial doubts were like everything else technical. while I did know what exactly I needed to do, at first I thought to use the same approach we used at Typemock Isolator development. The problem was that duplicating that would be a significant effort, an effort I didn't want to invest. It took some digging and researching to understand that to solve my actual needs here, I just needed a subset of thee abilities, a subset which required much less effort to develop.
Next, I was really scared from the possible competition, during that time I heard rumors about VS2010 Testing Impact. At that time that looked too close to what I was about to do. And while I suspected that like always MS will only support her MSTest framework (and not NUnit), it was a risk I had to take. (and the thought of taking MS as a possible competition, even today is not a happy thought)
And if that was not enough, I don't recall the exact timing, but soon after I started I saw that Kent Beck has halted his JUnitMax development:
Putting Max on the Back Burner
that really made me think twice about continuing.
That's all that had to make me start, the combination of a really viable need, along with the technical ability to solve the issue combined with a strong inkling to disregard everything as a minor obstacle. I don't know if the decision was right or wrong, the road is still long. However, I am having fun along the way and I feel thats the important thing.