Now that the beta is trucking along, we've been whittling down the remaining FinFolio R1 features. We have a few things that I'll be highlighting over the next week, starting with grouping. Most portfolio management systems have some sort of grouping structure that lets you create miscellaneous groups of clients, accounts, etc. They usually do this by allowing you to select specific items at the time you create the group; this is called "static" grouping.
Static groups can take a very long time to set up if you have a large database. But the biggest headache is manually maintaining the groups as your data changes. Suppose you create a group called "All Clients In Texas". You must remember to update this group every time you add a client or when an address changes. It's easy for things to slip through the cracks--suppose your client changed his address with the custodian and the change comes down in your daily imports. If your operations group doesn't notice the change, the group doesn't get updated.
When we implemented grouping in FinFolio, we used "dynamic" grouping. Instead of adding individual clients to the "All Clients in Texas" group, you create a filter on the "HomeAddress.State" field for "Texas". Not only is it easier to set up the group, you eliminate all of your ongoing maintenance headaches. FinFolio's dynamic groups are rebuilt every time they are used, so when client addresses change, no updates are necessary.

Dynamic groups not only solve the setup/maintenance problem, they open up a new world of possibilities. You can create groups that change based on fluid information like account values, or recent transactions. Here is a group I created for all accounts that had new shares transferred over the last two weeks.
All households with IRAs worth more than $50,000:

All accounts owning bonds that mature in the last quarter of 2009:

You can create groups for all the major FinFolio data types, including Households, Portfolios, Clients, Accounts and Securities. These groups can drill down into positions, security information, transactions and prices. Of course, you can still create static groups--just use an OR clause with an expression for each item in the group.

Groups are now used all over the software. You can create groups for reporting, billing, and rebalancing. And you can filter all the main lists using groups. The groups are evaluated when you query the database, so if you have >100,000 accounts, FinFolio only brings back the subset of accounts in your group. This server-side grouping keeps your lists and screens responsive and snappy no matter how large the database.

The ease with which we implemented dynamic grouping reflects a payoff for some of the technology hurdles we overcame last year, namely our ORM layer. Using an object model gave us the framework for the group builder. It's fast, incorporates all of our business logic, integrates with the user security model, and runs on any supported database--including DB2 and Oracle. We don't have to worry about SQL injection or the myriad of other issues we would have without an ORM layer.
Editor’s Note: This was written before FinFolio’s official release. Dynamic groups have now been replaced by searches. (Same functionality but much easier to use.)