It doesn’t imply that we don’t strive to accurately implement these methods; we just need to stay flexible. As part of this flexibility, we should think about overall structures that make a project successful and how consistency and coherence can improve your odds of achieving the "ideal." Because there isn't a "playbook" on the components of the ideal software development project, we pulled together some of our most tried and true best practices that make software development projects at Dialexa work better:
1. Code Simplicity
Strive to keep your code simple.
Code simplicity is an idea that came from Max Kanat-Alexander, a software developer at Google and Community Lead and Release Manager of the Bugzilla project. The idea is to reduce unnecessary complexity in software development. The code simplicity movement goes hand in hand with other software principles such as DRY (Don’t Repeat Yourself), introduced in the book The Pragmatic Programmer, and YAGNI (You Aren’t Gonna Need It), a mantra in agile development. Max has some interesting posts on this idea in his Code Simplicity blog.
Continuously test from end to end.
Initially I was a skeptic of Test Driven Development (TDD) as it seemed too prescriptive. Over time, I have realized that TDD gives you more confidence regarding your code quality. On the other hand, Behavior Driven Development (BDD) allows you to learn the features and requirements directly from the customer and that alignment translates into code that is closer to the users’ needs. Full integration testing ensures that all components are working together as expected and increases code coverage.
3. Code Coherence
Keep it consistent across your team.
When working with a team, it's important to have a consistent style guide for your codebase. If you have a codebase where you CAN tell who wrote a particular file then there isn’t consistency between authors. There are many tools to enforce consistent style; here are three we like:
- ESLint is an extremely configurable linter and has gained a lot of popularity in the community.
- Editorconfig is a tool to enable consistency between the many editors and IDE’s that your developers use.
4. Code Reviews
Don’t be shy, allow someone to check your code!
Everyone makes mistakes. An attitude which allows you to acknowledge imperfections is the first step to investing your trust in a code review. Having a colleague read over your pull requests before merging is a good way to ensure final code quality. Code reviews help reduce bugs in the product – that's the bottom line - so give up that idea of perfection. “The Code Review Mindset" is a great article on the importance of code reviews.
Set your time and budget estimates realistically.
A realistic budget keeps your software project from feeling too much pressure. With agile methods, this enables the scope to flex more easily as the project progresses, but an estimate that is truly off can cause problems in quality, morale and output. Estimation can be quite tricky – as it's hard to find a happy balance between being realistic and sandbagging when there are so many unknowns. Rest assured, better estimation comes with experience, and there are many tools available to assist with software development project coding estimates. Here is a good list to start.
In reality, the “ideal software development project” may never exist! Each project has its own characteristics, flaws, joys, sorrows, dreams, features, users, bugs, codebases, test cases and many other components. Hopefully these concepts make your projects more consistent and coherent. When in doubt, share your knowledge, encourage trust among your development team, stay positive, and remember - you will ship!
Find out where great products come from with our End-to-End Product Development Guide.
Image #2: http://imgs.xkcd.com/comics/tasks.png