As we continuously strive to become better product engineers at Aspire Systems, we have been identifying different sets of best practices for our technology teams to follow. While many of these practices may see quite generic, we believe that it sets the base – especially for new members in the team, and can be a useful checklist for the more experienced folks as well.
We’ve defined good engineering practices, coding and design practices, performance and usability engineering practices and testing best practices. We’ll post them up here one by one, starting with our take on good engineering practices.
Please feel free to let us know whether you agree or disagree with any of these – whether you think some of them aren’t really applicable in some cases – or if you have any additions/modifications to these lists. I look forward to hearing from you.
Our list of good Engineering Practices that will help you produce higher quality output:
1. Dig deep into requirements: Collaborate frequently with all stakeholders and do more prototyping to clarify requirements. Use the Pareto rule: spend 20% of the effort required to identify 80% of the requirements, without getting into elaborate ceremonies. The remaining requirements will automatically fall in place once you start the iteration(s). Postpone doing any development work until you are clear with the concept (while everyone understands that you should expect changes).
2. Write structured code: Think how you will structure your code before you start writing. Write your code in small pieces – multiple functions and methods. Extract common functionality into methods and never duplicate code. Always look for reusing existing methods.
3. Use code analysis tools: Make sure that you have a source code analysis tool such as FxCOP, PMD, etc. integrated with your IDE. This will help you do code analysis easily and also help you adhere to coding standards.
4. Self review your work: Make sure you review all your work products. Never release deliverables without reviews. Generate a report from your defect tracking tool and do a root cause analysis on the bugs you have introduced. This will help you continually improve.
5. Write automated unit tests: Always write automated unit test cases as a part of your work. Integrate them as a part of your automated builds.
6. Test early and often: Testing your work is your responsibility. In addition to testing on your machine, always move your code to a fresh environment and test again. Never release your deliverables without testing.
7. Document your code well: Make sure you add inline comments in your code. All functions and methods should be adequately commented. Provide extensive commenting for complex logic. Generate code documentation with tools like nDoc, javadoc and review it.
8. Synchronize your code everyday: Make sure you synchronize your code with the repository on a daily basis. This will ensure that you have up-to-date source code from everyone and will reduce integration issues.
9. Communicate extensively: Communicate every day with your team and manager on your progress and challenges. Update your project management system on a daily basis (time sheet, project plan, task status, defect status, wiki, burn-down chart, etc.).