1. Apply uniform design layouts for forms.  This will help with the learning curve for employees new to the application.  
    1. To increase performance of form and drop-down list loading, use stored queries for your record sources because they have already been optimized by Access. Note: the Access form wizard will create Select SQL statements for record sources, and these are not optimum.
    1. Use validation rules to help prevent data entry errors by restricting what information can be entered into a field.  Use a message box or onscreen area to let the user know what is needed. Using the field's tag property is an easy way to encode the type(s) of validation each field needs, one can then loop through the field's collection to do the validations. 
    1. Index the fields that you will need for criteria selection in your queries and fields used in queries that join the tables, to increase performance speed. 
    1. Optimize the data types to use the least amount of memory and storage and increase processing speed.
    1. Always put code error handling in your routines so you have control of what logic to apply.  An MDE file will stop executing without telling you or your user anything useful about the error.  Don't use macros (that do not allow error trapping) except for custom menus for the same reason.
    1. Allow users only a copy of the front-end access program file (which contains everything but the data and which is linked to the back-end data file.)
    1. Always split the Access application between a front-end and a back-end (Data). Place the back-end data MDB on the network share, for quicker reads and writes. 
    1. You need to compact data back-end regularly. This will check to see if any table indexing or any data records are corrupt. This practice also reduces the file size.
    1. Assign one person, and in his absence a second, to back up the data and store it off site regularly without overwriting the last back up. How often you back up is determined by how much data are you willing to re-enter and how much time might have gone by until the loss is detected.
    1. When compacting, make sure your version of Access is up to date, so there was no reissuing of previously issued auto numbers, and that you make a back-up copy of the original file.
    1. Do not use Memo data type fields over a network.  They have different indexing that is much more susceptible to corrupting during a write-back to the server.  In 14 years, I have only seen record level table corruption of Memo data type fields.
    1. Use a main menu form or some other non-data entry form that is always kept open and is linked to a small application table.  This will stop the repeated opening and closing of the LDB (record locking file) when each form is opened then close before opening another form.  This will prevent a slowdown over a network connection. 
    1. Use auto number field for linking tables to dependent children tables.  They are difficult for users to modify and offer better indexing performance.
    1. Use lookup drop down lists for text fields, which store the "long integer" auto number of the lookup table. If historical data is needed in a lookup table whose value is likely to change, ensure that the value in the lookup table is also stored in the main table along with the "long integer" key of the lookup table.
    1. All foreign key field names should have the same spelling as their parent table's primary key field. This aids Microsoft Access programming, and the Access Programmer so queries will link tables automatically, and sub forms link to main forms.
    1. If automating other parts of Microsoft Office, use late binding so you do not have to worry about with what version of another office software, such as Word, Excel or Outlook, is being used on the individual desktop machines.

    1. Use the same name in both parent and child tables, when relating an auto number field from the master table to the corresponding long integer field in the dependent child table to aid maintenance and understanding about the relationships.
    1. Don't use record sets in a multi-user environment unless it is based on a read-only snapshot and there are no updates that could conflict with the con-currency of other users. Solution, wrap the updates in a transaction which upon failure notifies of write conflicts and asked the user to get other users off before retrying.
    1. Set track name AutoCorrect to off.  (Access 2000 and later.)
    1. Always use Option Explicit in VBA code to ensure no undeclared variables.  
    1. Keep your Jet 4.0 Engine version up to date.
    1. On large record set updates, use record set operations with Begin Trans and Commit Trans to speed up record set updates by temporarily storing them in a memory buffer first.
    1. Avoid right joins in queries, if at all possible, for performance unless program or business logic requires it.