Code quality sins made by startups in their software development process
One could assume, that wrong choices and shortcomings in the matter of ensuring a proper high quality of code, are independent from the way the team is responsible for the software production process. However, there are particular circumstances which lead one or another form of team organization to affect the occurrence of specific problems.
The rest of the article is available below free e-book form
Code quality sins made by startups in their software development process
Table of contents:
Software development process quality sins
In terms of code quality, a small startup team may face difficulties different from those faced by a large software house – the differences may occur, i.a. in the capacity of testing teams, or availability of QA experts. In terms of startups, which must take every dollar into account, they are often tempted to make compromises in terms of code quality. Startups are a separate category here, as in their case, code and developed software quality may in general, may be affected by additional factors.
Among the aforementioned, one may primarily distinguish limited funding, often acquired from investors who put large pressure, or from crowdfunding. The aforementioned in turn, causes rush and the necessity to release de facto test versions of applications as fast as possible. Another obstacle, which startups must overcome, are changing, often unrealistic expectations and strong competition.
Software-specific quality sins
Practice shows, that these issues are actually reflected in code quality. The results may be found on every level of the project, and in every phase. Therefore, let us take a look at the most common sins committed by startups, resulting in the decrease of code quality, and other obstacles during the software development process, and finally, the decrease of the end user’s satisfaction.
Infrastructure issues
The first challenges faced by every software development startup appear already at the moment of planning the solution architecture. The most common issue is excessive architecture complexity, impeding or even preventing the expansion of functionalities, integration with external components, as well as, scalability. This in turn may limit the development of the entire project.
Another issue related to design is the selection of architecture, which will not separate the operations of particular modules. In result, instead of executing a component-function approach, we have a horizontally sliced architecture, where modules operating in a more or less separated way are responsible for execution of one task. This highly impedes a replacement or even an update of each of them, and builds a system of unnecessary dependencies.
Documentation and concept issues
A common issue during the software development process is excess code complexity. Obviously, each programming team is facing the issue, however, the dynamics of startups that face staff issues, and limited funds, are making them particularly prone to negative consequences. In result of solving simple issues with complex algorithms, we are facing a situation, where a single change or error fix are related to the necessity of meticulous learning of the entire software source code.
This challenge is usually in pair with another – gaps in documentation or badly constructed documentation. Unnecessary or vague commentaries, or no documented functions, directly translates to issues of the entire startup. It is more difficult to expand and scale the entire project, when the programmers are more eager to involve themselves in new projects, than in works on an already developed and badly documented code.
Style consistency and code review issues
Additionally, a challenge remains, related to software styles’ inconsistency. The lack of unified programming practice, e.g. within the scope of applying the one responsibility principle, is another threat to the future of the startup. It can be noted on the example of inconsistencies in naming classes, methods or variables. Allowing for freedom in this matter leads straight into chaos, which will shoot back during the subsequent production phases. Standards in naming will allow for their almost intuitive application.
A way to avoid such mistakes, as well as, weed out ill programming practices already within the early phases of production, is to introduce a consequentially executed code review program. The lack of planned code reviews leads to underestimating the QA role in the entire project, and causes the project to be developed blindly, using trial and error method, as it lacks the critical component in the form of the voice of a party that is not directly involved in the development of a given component or even the entire program.
Testing shortcomings
It will not be an overstatement to say, that an entire separate publication could be dedicated to lacks and shortcomings in testing, and it would still not exhaust the subject. More and more, and it is also related to the truly large IT companies (e.g. Windows Insider program created by Microsoft), testing is delegated on end users, which results infinite public beta tests or the decrease of customer satisfaction.
One of the shortcomings is the lack of unit tests, i.e. those which are focused on particular units, e.g. objects, if we are dealing with a Java project. Shortcomings in this aspect are easy to avoid – there are many tools at our disposal, that automate unit tests, allowing to eliminate code bugs on a continual basis, without the risk that they will be detected only in later production phases, when fixing them will be even more difficult.
Another mistake – or even an entire group of mistakes – done by startups, is omitting tests unrelated to software functionality. Under the pressure of time, investors, and with limited funds, startups focus on producing a functional program, while often omitting such issues as security, or accessibility features, that should in no way be underestimated.
Success-driven challenges
One can list many such examples – i.a. the lack of tests for integration with CDN providers, reducing the number of users serviced simultaneously, lack of latency tests for applications related to the location of the user, lack of memory leaks tests, or tests in UI/UX. Obviously, there are many other challenges awaiting for startups, as for other organizations, however, for startups, operating under the pressure of time and having limited resources at their disposal, the aforementioned shortcomings may decide on the fate of the entire project.