SoftwareBY RabIT software engineering · March 30, 2020

With the rapidly growing popularity of digital entrepreneurship and business process digitization, demand for software products is at an all time high.

Due to the accelerating demand, global competition, as well as other factors like the increased use of outsourcing, low development costs and faster time-to-market are quickly becoming top priorities over product quality.

 

“Why should I care?” you might ask.

If you are planning to, or already in the process of developing a software product, ignoring the quality side of the process can easily lead to wasting the entire development budget and severely hurting your business.

Throughout our work we’ve encountered many software projects that were struggling to move forward because the code base had gotten so unstable that it was difficult, or straight up impossible to develop further. In a few cases, more than 12 months worth of development investment would have resulted in an unusable product without intervention.

 

The goal of this article is to highlight the importance of maintaining high source code quality throughout the software product life cycle. We will talk about the possible effects of low-quality code on your project (and entire business) and list effective ways to ensure high product quality.

 

 

What does high source code quality mean?

To avoid being vague, first let us try to elaborate on what we mean by high source code quality.

High quality code means that you source code must perform well with regard to the following:

  • Performance – The software is optimized in terms of size, memory consumption, input/output operations, ect.
  • Readability – The source code is easy to follow, standards of indentation and formatting are met, so that the code and its structure are clearly visible.
  • Maintainability – Signifies the efficiency by which the code base can be understood, repaired, or enhanced.
  • Compatibility – The software’s ability to properly run on all intended devices and operating systems.
  • Security – The code base is continuously being checked for vulnerabilities like malicious code that can be discovered and exploited by outside parties.
  • Understandability – The code is easy to understand for new developers in the future for increased time-efficiency.
  • Documentation – All-inclusive and up-to-date source code documentation is written throughout the project.

 

What does low-quality code look like?

Now that we’ve established what high source code quality actually means, you probably have an idea about what poor code looks like. If a code base is lacking in the qualities listed above, it is considered low quality.

To be more specific, low-quality source code:

  • has poor performance (too large file sizes, runs slowly),
  • is difficult to read and understand for developers,
  • is difficult (and expensive) to maintain and develop further,
  • has compatibility issues with different devices and operating systems,
  • has easily exploitable vulnerabilities,
  • is poorly documented.

 

In our opinion, it’s a bad idea to wait to check the quality of your product’s source code before live release. By that point, fixing these issues becomes much more expensive and time-consuming than it should be.

This is why source code should be written following high quality standards in the first place. We talk about ways to achieve this in the sections below.

 

How does poor source code quality affect a project or business?

Technical debt is “a concept in software development that reflects the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer.”

It’s pretty much the software development term for sweeping issues under the rug that you’ll have to deal with later. Constantly choosing the easy way out has real consequences for long-term projects. Too much technical debt can eventually cripple the development process entirely.

 

technical debt source code quality

Dilbert by Scott Adams

 

The symptoms of low-quality code only start to appear in later project stages, by the time software features are getting more complex. This only makes them more dangerous.

If developers don’t review the source code frequently, by the time they notice something’s wrong, it’s usually too late. Development tasks start to take longer to complete, bug fixes take up more and more of the team’s time, missing deadlines and prolonging crucial updates.

From a business perspective, software product development is an investment from which you expect a return – so just like any other. This return can come in the form of revenues if we’re talking about an SaaS solution, or cost savings and increased efficiency if we’re talking about software for internal, organizational use.

However, with a low-quality product that doesn’t sell, or effectively improve internal processes, your chances for a return drop significantly. In more severe cases, if the final product doesn’t reach live release at all, the development project can be considered a complete loss. This can mean multiple tens or hundreds of thousands of dollars worth of pointless spending, which can be crippling for most businesses.

If you can’t maintain an acceptable level of code quality, the “best case” scenario is that you’ll eventually get a working product, but at a much higher total investment cost.

Poor source code quality can also negatively impact customers’ perception of your product, and the whole organization. If a new release receives overly negative reviews from early users, it will take a lot of time and effort to win them over. While experience shows this isn’t impossible, it’s still better to prevent a fire from starting than having to put it out!

 

How can you ensure high code quality?

If you don’t have the necessary technical knowledge, it will be difficult for you to assess code quality without help from the development team. You’ll most likely only notice client-side issues related to speed, device compatibility and others directly affecting the user experience.

A common practice is to hire a third-party consultant to help with this part of the project. If this is not an option, however, the development team must introduce their own quality assurance and code review processes for quality management.

 

Quality assurance testing

Quality assurance, or QA testing should be an essential part of the software development life cycle. Its goal is to validate the quality and functionality of the software before release, and make sure that the final product provides the best possible user experience.

The main benefit of QA testing is detecting bugs and errors in the software well before it gets released.

 

Here are a few widely-used types of QA testing:

  • Usability testing – Checking if end users will be able to easily use and understand the software. Helps identify usability issues and improve user experience.
  • Compatibility testing – Verify that the software works perfectly on devices with various screen sizes, running different operating systems. In case of web applications, this includes testing cross-browser compatibility as well.
  • Functional testing – Checking whether the software works in accordance with feature specifications and business requirements.
  • Performance testing – Also known as load and stress testing. It means testing the robustness and stability of the software under extreme conditions.
  • Security testing – Systematically checking the software for exploitable vulnerabilities. Today there’s a whole separate field in IT specializing in security testing called Ethical Hacking.

 

Code review & analysis

Code review is also a kind of quality assurance activity, where a software developer checks an already written source code for errors and bugs. Apart from manual code reviews, there are also a lot of automated tools available for static and dynamic code analysis.

Code review is a process by which developers review each other’s source code. The two roles present in a peer code review are:

  • The author: the person responsible for developing the code being reviewed.
  • The reviewer: the person who is responsible for examining the code.

 

Some commonly used code review methods:

  • Over-the-shoulder reviews – When the author writes a code and simply calls the reviewer over to have a look at it.
  • Email pass-around reviews – Most open-source projects prefer this form of code review. Here, the author emails complete files to reviewers. Reviewers then examine the files and suggest changes.
  • Pair-programming – Two developers write code together at the same workstation.

 

Apart from improved source code quality, code reviews also make it easier to train new development team members. In the long run, they lead to the team having a more consistent coding style overall, improving the whole development process as well.

For larger code bases, your team will likely have to use automated code analysis tools as well. The difference between static and dynamic code analysis is already in their names.

Static code analysis tools examine the source code without executing it, dynamic analysis is conducted while the code is being run. Code analysis tools help developers save a huge amount of time on fixing errors by identifying them in a matter of seconds.

 

Our own team mainly uses these code analysis tools:

  • Checkstyle – a static code analysis tool used in software development for checking if Java source code complies with coding rules.
  • StyleCop – a static code analysis tool from Microsoft that checks C# code for conformance to StyleCop’s recommended coding styles and a subset of Microsoft’s .NET Framework Design Guidelines.
  • PMD – or Programming Mistake Detector is an open source static source code analyzer that reports on issues found within application code.
  • CPD – or Copy/Paste Detector is PMD’s duplicate code detection for (e.g.) Java, JSP, C, C++, ColdFusion, PHP and JavaScript code.
  • ESLint – a static code analysis tool for identifying problematic patterns found in JavaScript code.
  • TSlint – static analysis tool that checks TypeScript code for readability, maintainability, and functionality errors.
  • ReSharper – a group of products that provides a series of features for Visual Studio developers including code analysis, refactoring, navigation, test runner, build runner, etc.
  • JUnit – a unit testing framework for Java often used in test-driven development
  • JaCoCo – an open-source toolkit for measuring and reporting Java code coverage.

For version tracking:

  • GitLab – a web-based DevOps lifecycle tool that provides a Git-repository manager providing wiki, issue-tracking and CI/CD pipeline features.
  • Bitbucket – also web-based version control repository hosting service for source code and development projects that use either Mercurial or Git revision control systems.

 

So what should the development methodology look like?

There is no such thing as a perfect, one-size-fits all development methodology for all teams and all industries. The recommendations in this section are based on our own experience and preferences.

We recommend using an Agile methodology based on Scrum or Kanban. Scrum in particular can be very beneficial for product owners to keep a close eye on the project’s progress. Frequent communication and product demos allow you to have a good overview of the newly completed features and even test them yourself.

This methodology also helps your team break down large and complex projects into smaller, more manageable chunks called sprints. These are 2 weeks long by default, and they contain a previously agreed-upon set of user stories and development tasks.

 

dedicated project manager scrum board

Scrum board example

 

As for team composition, QA testers and senior code reviewers should be integral parts of both small and larger teams. If you have to coordinate the work of multiple parties, a dedicated project manager can also be a valuable addition to the crew.

Here is an example of our own team’s composition for most projects:

 

As I mentioned at the beginning of this section, there is no such thing as a one-size-fits-all methodology. Copy-pasting the Agile manifesto for your team won’t be an ideal solution.

This is why we only recommend it as an outline for your process. It will be up to you to optimize each aspect of the methodology to fit your organization and team composition as much as possible.

We also do this sprint after sprint with our own clients, which is why we recommend it to others. For example, it might not make sense for a larger team to hold daily stand-up meetings, because.they can’t make real progress in 15 minutes. In this case, it might be better to organize a single, longer weekly team meeting instead.

Most other aspects of this methodology can be optimized in similar ways as well.

 

To Summarize

While low code quality is rarely among the leading agenda during product management meetings, it is an increasingly important topic for businesses that rely on custom-built software to grow.

Apart from drastically increasing development costs and time – hurting profit margins -, low source code quality also negatively impacts customer satisfaction.

When it comes to software products, you only have a few seconds to form a positive first impression with users. If their first experience with your product is slow, clunky, or results in a crash, you will need to invest a lot of time and effort to better their opinions.

Instead of having to put out the fires, prevent them by integrating coding standards, quality assurance testing and code review into your development process as early as possible. While it may just seem like extra work early on, it will most definitely save you a lot of headache and resources in the long run.

RabIT software engineering

RabIT is an innovative software engineering company from Hungary. Our goal is to help startups and enterprises drive growth through technology innovation and make a real impact in their industries.

Code quality and transparency are our main priorities throughout each project.

WebBY RabIT software engineering · September 18, 2018

Today we are all users of many different software products, websites and applications. We all know the frustration of trying to stumble through poorly designed, clunky user interfaces. We also how easily they can make us rage-quit them after the first few tries. From these experiences we all know why usability testing is important, but to understand the whole process, we need to start right from the beginning.

Usability testing involves observing and recording the behavior of test subjects who are assigned to complete a set of tasks on your app, website, or other software product. The testing helps you to know whether your site works and how to improve it.

 

There are some elements involved in the usability testing process. These are:

Participant: The participant will perform the activities for which you want to test your software.
Usability tester:  The job of the usability tester is to explain the participants their role and the tasks they have to complete during the test, and pay them when they finish their task.
Shared screen:  Screen sharing software can make the test much more effective. You can easily include the product team into the usability test without stressing the participant. Further, executives will get to know how users see the product or company website.
Recording software: With recording software, you can record the test and analyze it later. It allows the usability tester to focus more on the testing process.
Pre-written usability testing script: It helps you walk the participants through the test smoothly.

 

Make the usability test process as time- and cost-efficient as you can by planning each step of the process in detail. Keep in mind that a detailed script will help the tester to effectively explain the tasks and process to the participant. Most importantly, users should know that they are not being tested, you are testing the software.

The usability tester should not influence the user’s actions in any way. They have to solve their problems and find the solutions on their own. The main work of the usability tester is to provide information about the tasks and the usability testing process. He or she should encourage the participants to actively share their opinions and thoughts. Participants need to be vocal about their thoughts.

Know that the participants may feel frustrated when they are not able to find the solutions right away. When the users reach a level of frustration where they want to leave your website and search elsewhere for solutions, your site fails the test.

Have a meeting with the responsible team after the usability test. Based on the results of the usability test, choose the top three problems that need to be addressed. You need to resolve these issues this month and after one month, repeat the complete process.

 

why usability testing is important

 

Is there a difference between usability testing and user testing?

Sometimes, usability testing is confused with user testing. Usability testing and user testing are two different approaches to reaching different goals. User testing involves interviewing your target audience to determine market demand for your service or product.

Usability testing is also different from focus group testing. In focus group testing, you learn about the experiences and opinions of a group of users regarding your website or product.

Usability testing, on the other hand, is more about seeing if users can understand or use your website or product with common sense. You can choose anyone to be a test subject who views your website with a fresh eye and provide useful information about ease of use. Beginning usability testing with your family members and friends is a good way to get a new and fresh perspective.

 

Subscribe to the RabIT Newsletter

What you get if you join our email list:

  • Actionable insights about software development topics
  • Interesting case studies and news about IT innovation
  • No marketing spam

You can unsubscribe at any time

 

Tools for Usability Testing

Usability testing tools are essential to the success of your website. Here are some tools that can help you conduct usability tests.

Optimizely

This A/B testing platform allows users to track visits as well as conversions. Optimizely offers many features such as visitor segmentation, mobile website testing, multivariate testing, and cross-browser testing. The basic plan is free of cost. However, if you want some extra features, you need to pay for them.

 

Crazy Egg

You can use the tool for 30 days as a free trial, and after that, you have to pay $9 per month. Crazy Egg offers a number of features such as heatmap, scrollmap, confetti, and overlay.

The Heatmap allows you to see where each visitor has clicked on your website. With Scrollmap, you will get to know how far down on the web page a user has scrolled. The Confetti gives you valuable insights regarding visitor sources, search terms etc. The Overlay helps you to know the number of clicks each element on your web page is getting.

 

Five Second Test

UsabilityHub operates this tool. Five Second Test captures a visitor’s first impression of the site. You can run a test in seconds. The process is easy and includes

1. Uploading a mock-up of the web page or uploading a screenshot with a question about the design or functionality included.

2. Five seconds are given to testers to view the web page. After that, they are required to answer the question given.

3. The responses of the testers are then compared.

The paid plans cost about $20 per month.

 

 

Now that you have a clear understanding about why usability testing is important, you can make the first steps to integrate it into your development process. There is no such thing as too early to start usability testing. Be it your new website, blog, mobile app, or custom software, it is always recommended to collect first-hand information about the way the end user sees your platforms as soon as possible.

Thanks for reading!

Other ways to collect early user feedback for your product: Which Type of MVP is Right For Your Business

RabIT software engineering

RabIT is an innovative software engineering company from Hungary. Our goal is to help startups and enterprises drive growth through technology innovation and make a real impact in their industries.

Code quality and transparency are our main priorities throughout each project.

IT ProcessBY RabIT software engineering · July 18, 2018

Today, the importance of a dedicated quality assurance tester often gets overlooked by project managers and clients alike, seeing them as an option rather than a requirement. Quality assurance testing plays a very crucial role in the process of software development. It saves money and time by spotting bugs and errors early in the software development life-cycle.

Software that is newly developed may have inconsistencies, redundancies, and flaws; therefore, proper QA testing is mandatory. The testing ensures that the software product a company is developing meets all requirements, truly provides value to end users and has a long lifespan.

 

Role of a Quality Assurance Tester

QA testers communicate and build relationships with stakeholders, clients, database administrators, project managers, and developers. They help connect everything together and ensure smooth product development.

Quality assurance testers perform tuning, testing, and debugging. They use tools to find the flaws and errors and create a plan for manual testing, working very closely with the development and product teams. They can work independently or as part of a team.

We wrote about improving communication between QA testers and the development team in an Agile setting in last week’s article.

 

why is a quality assurance tester needed on a software development team

 

Skills of a Quality Assurance Tester

  • They are experts in verbal and written communication, finding solutions to complex issues, logic and reasoning, documentation and time management.
  • They have a good experience in software development and quality assurance.
  • They are aware of the ongoing technological trends and recent advancements.
  • They have an excellent knowledge of QA processes, tools, and methodologies.

 

Technical Skills of a Quality Assurance Tester

  • Create methods and procedures to identify the quality of a product
  • Determine enhancement areas
  • Perform risk analysis
  • Understand technical and business objectives
  • Review user interface for consistency
  • Research new testing processes and technologies

 

Subscribe to the RabIT Newsletter

What you get if you join our email list:

  • Actionable insights about software development topics
  • Interesting case studies and news about IT innovation
  • No marketing spam

You can unsubscribe at any time

 

Common misconceptions and why they are wrong

Here are two common misconceptions that we come across, and people actually believe in:

1. The developer should deliver error-free work
2. The software testing should be done solely by developers

Both of these notions are absolutely wrong.

Proficient developers can create code with no or little error. However, they cannot visualize every user scenario. The software testers, on the other hand, hold a strong expertise in finding every possible user scenario to test every function satisfactorily. Developers interpret some requirements and functions in a different way than the client. That’s why it is essential to have a quality assurance tester who can check if everything is functioning as required.

QA testing takes a lot of time to complete, and software developers have to devote a huge amount of time to test a software product properly. Individuals who are experienced in software testing can complete the testing process fast. A quality assurance tester, who possesses exceptional testing skills, can identify the errors and bugs with ease. Moreover, software testers charge less than software developers for their service.

Delivery of a raw software product can upset the client. If they want to avoid this, companies and organizations absolutely need to view software testing as an essential element of the software development life-cycle. These people should be deeply involved in every stage of the development process.

 

quality assurance tester meme

 

To truly understand what is wrong with these misguided ideas, let’s see how they would look in some traditional industries:

Example #1 – Imagine the auto production industry without dedicated quality assurance testers. The automotive industry simply could not work without QA because any resulting functional errors can cause serious injuries to customers. Assembly workers also cannot perform their task flawlessly and assure the quality of the product simultaneously.

Example #2 – Articles that are published in a newspaper also go through many rounds of reviews first. If these articles were published without reviewing and editing, they would be full of grammatical errors, typos, or unreliable information. It is not easy for authors to find their own mistakes in writing. They work to the best of their knowledge.

It works the same way in software development. To ensure quality in the work process and the product, the role of a quality assurance tester is vital in the software product development life-cycle.

 

If you would like to find out more about ways to integrate QA testing into your software development life-cycle more efficiently, feel free to ask your questions at info@rabit.hu, or ask for a free consultation through our website.

RabIT software engineering

RabIT is an innovative software engineering company from Hungary. Our goal is to help startups and enterprises drive growth through technology innovation and make a real impact in their industries.

Code quality and transparency are our main priorities throughout each project.