6 Coding Practices That Set A Custom Software Development Company Apart
As a custom software development company in the business for close to a decade, we've seen our share of shoddy practices, not just around code, but also when it comes to solid teamwork. Below is the list of best practices we follow that will help you save time and money in the long run.
1 - Custom software development understands the relevance of Coding Style.
High code quality can be re-used and re-developed. Low-quality code doesn’t last.
Too many developers convince themselves that styling issues are not that important. If we've learned anything over years of looking over other people's code, it's that dealing with coding style issues is what developers are most likely to postpone. It can be hard for inexperienced coders to see what good will come out of addressing styling issues. Still, over time, it becomes clear that the moment code quality plunges, it's a snowball effect from there, turning any project into a mess fast. Be finicky about best practices even when they seem negligible. The code should be easily understandable. Complex code makes maintenance and debugging difficult and expensive. Set up linting and code checking tools to give yourself space to worry about more important things.
Pro Tip: We've worked on a number of Ruby projects. Hound or RuboCop plugins for Sublime have come in really handy. They're really good to keep your code in check.
2 - Three levels of Code Reviews
Code reviews are crucial; They better code quality and make your codebase more stable, while helping programmers work together more effectively by building relationships on mutual respect. To ensure that the reviews are consistent, we give our reviewers a checklist.
3 - Thorough self-review
It's important to go into reviews knowing what to look for. Start with structure, test coverage, style, logic, readability (and maintainability), performance, design, and functionality. You can do automated checks for certain things like structure and logic. But other attributes like design and functionality, demand a human reviewer to evaluate.
4 - Two peer reviews
A peer review strategy for code review that's successful demands a balance between a collaborative, non-threatening environment and strictly documented processes.
5 - Unit Test
Smart testing is good and will help you build a stable, valuable product. Smart unit testing delivers relevant information about your software quickly and often. We generally try to allocate time for the Unit tests, but many times startups we work for are in a rush to get the product out, and they are not worried about it. In other words, this requires additional time for developers, and it depends on the customers if they can afford that time.
6 - Code coverage reports
Remember, the higher the code coverage, the lower are your chances of getting undetected software bugs. Straightforward process, add tests, and see if coverage improves. It's easy to set up and measure coverage, once you find the right coverage tool and helps capture bugs in the program flow. But the issue is most code coverage tools are useful for the unit test only. It is crucial to track every test type's coverage (unit, System, API, and even manual). And handy code coverage tools are hard to come by. We use Simplecov to check the code coverage.
Our goal is to catch most of the bugs during the development, and our QA's responsibilities are mostly nonfunctional tests (Performance, scalability, load), although they do some Whitebox and end to end functionality testing when needed.
We have done security testing in the past for a couple of customers (Threat Modelling, Checking Vulnerabilities using Burp vulnerability scanner).
We're all creatures of habit. Finessing the way you work through habits is a great way to avoid having to think too much about every single rule out there. Once you've assimilated a good way of doing something, it will become effortless.
Let's take that time to put some thought into the design and create well-implemented and robust systems, instead of building organic structures that topple at the first sign of a strong breeze. Programming is a balancing act. We're not always building a rocket ship. So remind yourself, onion architecture or over-engineering is as painful to work with as an under-designed code.
Let us know your thoughts here, we'd love to hear your feedback.