About a year ago, I began work on a large project to replace a FoxPro-based line-of-business application with a new modern system that would provide the customer with better visibility and management of their data, as well as improving our ability to rapidly implement new software capabilities to improve their business operations.

Before I get into the details of the new system, I’ll elaborate a bit on the old system. The customer’s Microsoft Visual FoxPro solution had been ported from the pre-Microsoft non-Visual version of FoxPro, so it was entirely text-based. In its previous life, the system resided on an IBM 36 with the users running dumb terminals. That code was later ported over to FoxPro by a previous consultant — Mike Bilodeau — one of the world’s foremost experts on developing business systems on the IBM 36 (Mike passed away in October 2002).

While it’s easy to look at a text-based system today and criticize it for appearing so archaic, the reality is that text-based systems are fantastic for data entry. Frequent users of text-based systems fire off "magical" sequences of numbers and letters needed to navigate through screens with greater speed than they would ever achieve with a graphical interface. Where text-based interfaces fall short is (1) discoverability [the time to bring a new user up to speed on the system], and (2) flexibility [being able to discover new ways to do things, or to handle non-routine tasks]. Both of these shortcomings can lead users to FEAR, rather than embrace, the computer system needed to perform their work responsibilities. Of course, there are also the more image-based reasons for replacing a text-based system in today’s computer environment (e.g. when the "big client" comes to your office and is completely unimpressed by the software your employees use on a day-to-day basis).

This system replacement was a classic custom line of business software project — where the job can only be done through the application of computer software, but there is no commercially-available "off the shelf" software to manage the unique data requirements of the business. This type of project is more complicated when replacing an existing software solution, as one has to meet the requirements of the business while also meeting & managing the expectations of the users. This system also had LOTS of integration with a separate system (the web-based "customer facing" system, as opposed to the "back office" system). So there were lots of moving parts to consider to ensure a smooth replacement.

Around the time that I was determining the architectural / platform approach to take on the new system, I went to the DevConnections conference in Orlando, FL and met the folks from DevExpress, who were demonstrating their new business application framework — eXpressApp Framework™ (XAF). I had learned a bit about XAF from DevExpess’s website, but was excited to see it in person. I was truly inspired by what I saw — a flexible framework that generated a great software interface out-of-the-box, with LOTS of extensibility points for customization. The framework is very well componentized, so if you don’t like the way something is implemented, you can override the code with your own. Another added benefit of going with XAF is that they provide subscribers with source code, so if you don’t understand how something works you can "peek behind the curtain". My fear with any "application framework" was getting stuck into doing things a certain way, and then not being able to meet customer needs or expectations. I was impressed enough with XAF to get past this fear and decide to immerse myself in becoming an expert on the framework. I was comforted by the fact that DevExpess offers excellent support, with code samples to accomplish very sophisticated tasks/customizations.

So after experimenting with the betas of eXpressApp Framework, I made the decision that it would be the most cost-effective path for creating a powerful business application for the client, and began the process of requirements planning and business application development. At this point, XAF was still in beta, but shortly into the project XAF went into "released" status.

The core concept of XAF is that you create standard .net classes to represent your business objects. Each class eventually turns into a database table, and each property in the class (assuming they are persistent properties) turns into a field in the table. XAF then generates a basic yet powerful user interface around each classs, with a "list view" to see records in an overview/grid format, and a "detail view" to view/modify all of the properties of one specific object. The information about all of the classes is combined into an "application model", which can then be customized using a plug-in that XAF installs into Visual Studio. XAF generates both a web- and Windows-based user interface, with a hierarchical solution structure so you can make top-level changes that will show in both UI’s, or changes that are specific to one UI. This really takes away the "boring" part of making LOB software — creating all of the CRUD (create-read-update-delete) screens. From the basic CRUD functionality, you can really dive into all of the customizations that you may need, such as custom data entry forms, specialized functions that transfer data to other systems, etc.

Perhaps one of the most power features in XAF is that is has a FANTASTIC reporting module (using DevExpress’s XtraReports product). Reports must be designed using the Windows-based application, but they can be viewed in either the Windows or web UI. The reporting interface did take quite a bit of work to learn all of the tricks for creating complex criteria, variable sorting, hard-coded printer settings, etc. Fortunately, the solution always ended up being very elegant and component-based, keeping our code clean and easy to maintain.

One of the functions that I was most proud of is something that the users will never touch — the data import routine. The import really is one of the most critical components of the entire system, as it’s one of the only situations where you only get one go at it, without the benefit of time to correct mistakes. Timing was particularly critical because our conversion had to coincide with the end of the calendar month, which unfortunately fell in the middle of the week. In my first go at the conversion code, it took approximately 12 hours to complete — not feasible when you only have 5PM – 7AM as a conversion window. After reading through a lot of DevExpress support resources, I was able to get that down to 4 hours. Most of the previous conversions I’ve worked on involved using something like Microsoft Data Transformation Services (DTS) or complex SQL queries to map table fields and copy the data across. In this situation however, there was a lot of business logic that needed to happen as the data transferred, for example: checking referential integrity, changing strings into numbers, and creating normalized business objects from extremely denormalized data structures. This is where object-oriented programming really came to the rescue. Modern object relational mapping (ORM) software leads to code that is truly quite readable, to the point where I could even share the code with the client and they could understand how data are mapped between the two systems. This decreases the risk of disasterous bugs in the import, therefore increasing the odds of a successful implementation and a happy client.

I am proud to say that all of our maticulous planning and coding paid off, and the implementation was a complete success. I am also proud that we were able to implement enough new features into the software that the users did not revolt against a slowdown in their data entry speeds, since they were now able to better achieve tasks such as searching and analyzing data. Overall, the users of the system feel that they have a better understanding of the system and a greater level of control, eliminating software-induced fear which users can experience with older task-oriented (non user frienly) systems.

Many thanks go to DevExpress for creating an excellent application framework, as well as being there (through their support structure) to help with the complex customization tasks. The base of knowledge we have acquired around eXpressApp Framework have led us to reevaluate what is economically feasible for small businesses on restricted budgets, and given us a competitive advantage in the field of custom line of business software.

If any other solution providers are thinking about using eXpressApp Framework, we feel that we can make a strong case for engaging Info et Cetera Consulting as an XAF consulting resource to help your team get up-to-speed on XAF and succesfully (and economically) create a cutting-edge line of business system.