Archive for October, 2009

How to Send Emails to Your Clients w/ Quintify Databases

This and That No Comments »

I’ve often said that I’d be Quintify’s biggest fan - even if I wasn’t working for the company. There are so many ways that a custom database can streamline your business and make it much more efficient. One of those ways is being able to do everything you need to do from one location. So many people I talk to are using excel to store their contacts, then are uploading them to an email sending service to be able to communicate to those clients. And then any time they add to that contact list, they’ve got to re-upload their files, taking more time out of their busy day.

With a Quintify database - you can do all of this from one place. Your client records are updated in real time and you can easily add them to specific segments when setting up the client. When you’re ready to send an email blast - you’re working with up-to-date client segments and you don’t have to re-upload your data. Super easy!

Today I recorded a tutorial on the basics of sending an email blast using a Quintify database. People send all types of emails with our databases - from newsletters and announcements to sales and promotional emails. You can click on the tutorial below to get a 7-minute overview of how to send emails to your clients. Creating, testing and scheduling!

In the very near future, I’m going to create a tutorial on how to uitilize our WYSIWIG (what you see is what you get) editor so you can make amazing emails to send out to your clients. For now, here’s the basic overview. Enjoy!

How to Send Emails to Your Clients: http://www.quintify.com/tutorials/emailbasic/emailbasic.html

Traction — Get a Grip on Your Business

Business Development, Databases No Comments »

I’ve stayed up late tonight reading “Traction: Get a Grip on Your Business” by Gino Wockman. It’s awesome, and I’m very excited about implementing it in Quintify.

For a while now I’ve wanted us to build in a “business development” module into our Quintify business database software to go along with the CRM, project/task management, order fulfillment, invoicing/AR, marketing, CMS, etc. that we already include. I’m going to build Traction’s model into our own database system, and if it goes as well as I think it will, I’m going to talk to Gino’s company about us having a Traction-branded version of Quintify::Complete. (One nice thing about our code generator is that such stuff can get implemented pretty quickly. I’d also like to create an ActionCOACH-branded version using their business development model.)

I’ve heard the things in Traction before — from Michael Gerber, Reggie Shropshire, and others. But Traction really explains things in an easy-to-understand-and-implement way. Or perhaps I’ve been exposed to the concepts enough that they are finally taking root.

Some Best Practices in Data Modeling for Web Application Development

Databases No Comments »

(I’m speaking at an undergraduate database class today at UNCW and needed a place to stick some supplemental notes, and thought I’d put them here.)

Some best practices in data modeling for web application development, particularly for “backend” business systems:

1. Initially focus on database tables, fields and relationships and not what the web pages are going to look like. If the data model is right, the user interface will (pretty much) take care of itself.

2. For all major “things” in your system, have a table for notes: product_note, client_note, quote_note, task_note, etc. (And encourage users to add notes.)

3. For each database table, have the following fields:

  • date added
  • date last modified
  • last modified by

4. At the application level, have edit locks to prevent two users from trying to edit the same record at the same time, with the one submitting the form last overwriting the one who submitted it first. (At the data model level, in addition to the three recommend fields above, also have “date last locked” and “last locked by”.)

5. Think through (and discuss with your client) one-to-many vs. many-to-many relationships. For example, when setting up a database for a school, does each class have one and only one teacher or can a class have multiple teachers? When discussing this with a client, ask them if the relationship in question needs a select list (one-to-many) or checkboxes (many-to-many) in the web form. In our example, some schools will be one-to-many but others will be many-to-many. Getting this right from the start will save headaches down the road.

6. Log user access — both system access (logins) and page access (page views and actions). You probably won’t often need to know who accessed what page when and from where, but when you do, having that info in the database is golden.

7. Be careful about losing historical information. For example, if you have a product table that contains “unit_cost”, you might be tempted to not include “unit_cost” in your order_line database table, since that info is already available in the product table and “don’t duplicate info” is a value. However, over time the products’ costs are likely to change, and at that point you won’t know what the cost was for a product ordered last year unless you captured that info in the order_line database table. The solution is to have the “unit_cost” in the order_line table.

8. When setting up the data model for user access, seriously consider having users and usergroups be “many to many”, so that user access to particular parts of the system is “nonlinear”. I’ve seen others’ systems where each user could be given basic access, or intermediate access, or admin access, and I’ve heard about a system where one’s access rights were a scale from 1 to 100, with someone at a 70 getting everything below that, and someone at an 80 getting everything below that. It’s much better to have multiple usergroups (e.g. customer service, accounting, marketing, etc.) and then allow users to be in multiple usergroups based on their roles within the organization, which each usergroup having its own set of access permissions.

9. I name all of my “join table” tables with a “j” at the front, e.g. jstudent_class and jemployee_usergroup. This is really helpful for quickly knowing what relationship type the table encompasses.

10. Sometimes calculated fields are OK. For some reason at one point in my life I was under the impression that calculated fields in database tables were evil, but there are times when they are very helpful, particularly depending upon the framework you are using. With wm, we can set a flag for a field being a calculation, so that it doesn’t show up in the add/edit form, but it does show up in the display and the search filters. The only catch is that we need to add the code for the calculation, but we have things in place to handle that.

———–

Any comments, or any more you’d like to add?