At the very least process flows should be documented. We put a lot of comments in our code as well. We have a trace system which servers to document the code execution as well. it is turned off by default so that it doesn't impact production. Can be easily turned on in dev, test and mirror environments.
If you disciplined about coding standards then this helps as well. Use proper descriptive variable names. Database table names and column names should not be cryptic. Proper coding conventions can go a long way in making the system self documenting.
In database design for example when you create 2 tables that have a foreign key relationship, have column names reflect this. If you have an employee table and a employees_department table then name the linking employee I'd column in both as EMPLOYEE_ID. This makes the relationship intuitive and obvious. The column name is also descriptive. I have seen tables with column names ESF08A. You have to waste time tracking down what this means.
If you disciplined about coding standards then this helps as well. Use proper descriptive variable names. Database table names and column names should not be cryptic. Proper coding conventions can go a long way in making the system self documenting.
In database design for example when you create 2 tables that have a foreign key relationship, have column names reflect this. If you have an employee table and a employees_department table then name the linking employee I'd column in both as EMPLOYEE_ID. This makes the relationship intuitive and obvious. The column name is also descriptive. I have seen tables with column names ESF08A. You have to waste time tracking down what this means.