Even though we started developing an ERP system for small companies, we are considering how to design a system using FileMaker which has the possibility to scale, and allows not just one developer to work on the system at remote places, making maintenance not a nightmare, and shipping new versions and fixes to multiple clients just as easy as it can be.
Imagine a complex piece of business software with many customers who are using the same application, but everyone also with some specific individual needs. Individual needs are a problem in its own.
Reading a lot lately, the decision is still not yet clear.
- We are thinking of dividing the application into modules which are represented by Filemaker files. So, not everything will be in one file. But one file will contain a data structure with many tables and be designed with the Connector-Selector model in mind. This would also allow us to sell modules (e.g. CRM, Accounting, Sales, etc.)
- How then will these modules best be able to inter-connect and talk to each-other?
- Some basic tables (e.g. files which contain tables for general things like list of languages, list of country codes, list of tax rates, list of user interface elements in different languages, could also be kept separate and therefore accessible to every client. Such data almost never changes and will be accessible to everyone.
- Also thinking to maintain a database that holds all the meta data about the application with all tables, all field names, all attributes, even SQL queries, and which could not only serve to make functions and modules behave in a more generic sense referring to names, functions, etc in these meta or system tables.
- Also we are thinking of separating data from the user interface. The UI file would contain all validation for entries, but we do not yet understand the limits as to how far this can go in a complex environment. Are there performance issues? When to break the rule?
My questions - and I hope they are of general interest - and certainly not discussed the first time.
- Is there any "best practice" around for implementing such more complex multi-client, multi-language, multi-user application?
- What should be avoided? What problems are associated? What does not work?
- What are the problems in completely separating data from the UI?
- With a separation model: Does it make sense (not in terms of logical divisions, but in terms of technical usefulness) to use different files representing modules as opposed to have all in one data file, and in one UI file?
- Is there any "framework" around which supports such development to not have to invent the wheel again and again?