After a very long time in development, REAL Software's new feedback system is finally available to the public and in use.

I've been working on this system for a long time, since about mid-March if I recall correctly. It's so nice to finally see it live. I'm so proud to have contributed this to REAL Software, since it is such a crucial part of the company. Sure, I've worked on critical parts of the company for about a year now (new website backend, new servers, new order system), but there is something special about this. That other stuff is all very important, probably more than the feedback system, but this is an app that our customers will use frequently.

We've already been getting many compliments about the design of the app, and I do plan to do a post-mortem type article on the company blog. It does surprise me though, because although I find the UI simple, it's certainly not ground-breaking in my opinion. Or I just have high standards.

Early in the development process, we discussed a very critical choice: web-based or desktop-based. The discussion was heavily weighted towards web-based, and I could certainly do it, but I saw an opportunity to do something special. By creating a desktop app, it could be designed to show-off some of the abilities of REALbasic (not that the IDE does not already do that) and it allows us an unprecedented level of integration with our products and our user's systems.

Since it was being developed on the desktop, the argument was made that this should be completely integrated into REALbasic. While an interesting thought, that posed a couple problems:

  1. If REALbasic crashes, that system has a lot of functionality that needs to work inside an application that has already had an exception and locked up. There is a lot of potential for lost information there.
  2. If there is a minor bug in the feedback system, it could not be fixed until the next release of REALbasic. That's a significant problem for a new system. Keeping it separate allows us to push updates (yes, it has an auto-update system) to our users without them downloading the entire REALbasic package.
  3. What about our other products? Should a customer really be expected to launch REALbasic just to report a bug about our website or REAL Server? No.

So development on the app began from the ground up. Code was developed to handle preferences correctly on each platform, open source projects were utilized to provide animation, client-to-server communication and CoreFoundation support, and the source list and automatic updates were provided by code I had laying around and needed a good testing route. Right off the bat, many of the core systems of the application were falling into place.

Another big source of debate is the app's client-to-server communication method. This app does not speak to our database directly. An abstraction layer was implemented on the server to provide security and ease development. During the beta process, many bugs were fixed simply by updating server-side code. Using a straight SQL connection could not have done that. If we needed to move databases, upgrade servers, etc then we would need to issue an update to app. Instead, we could switch the database backend entirely without the app ever complaining. There's no database login details in the app, nor does it even know where the database is. That provides a significant amount of security. This abstraction layer also allows the activity viewer to work. You'll notice that the app almost never locks up or appears unresponsive. That's another thing an SQL connection could not have provided. There is still some debate that the app should be speaking directly to our REAL Server, but I stand by my position that this abstraction layer is not only very useful, but very important.

We quickly realized people would be asking for some of this functionality in REALbasic. It'll happen. I don't know when, and I don't know what, but we are aware of some gaps in the REALbasic framework that the code from this app can fill.

We have big plans for this tool. Remember, this is the 1.0.0 release. There is plenty of room to grow. Of course, I can't say what ideas are floating around, but I will say it will keep evolving.

Lastly, although I did all the development work on the app, the entire team provided lots useful feedback, suggestions, requirements, etc. I can't take all the credit.