Skip to content
Quality blog post image

In modern software development, small increments are released to production swiftly to meet business goals. This enables fast reaction to the market, on-time fixes, and prototyping with reasonably low risk. The foundation for this is an agile and highly skilled team with diverse know-how and ambition to do better. 

In this blog post, I will give ideas from 5 different viewpoints on software development. I hope these ideas will help you to improve the quality of your software development.

Technology

Let’s start with an integral one, technology. First of all, enable fast development with the right architecture and tools. Secondly, every member of the team should have a production-like environment available at any given time. Furthermore, the environments used in every stage from idea to production should be available for those who need them, on-demand. To achieve this, the technology needs to be used to our advantage, not just because it’s techy.

Version control, test automation, and continuous integration are the foundations of the delivery pipeline. Code and configurations should be stored in the version control as a single source of truth. All the assets should also be accessible to everyone who wishes to contribute. This enables developers to have the same version to work on. This also helps the team to avoid unnecessary merge conflicts and detached branches. Code should be pushed to the repository often in order to share the changes with everyone. Test automation and automated pipeline steps ensure that the software is at a deployable stage all the time. Test automation should be seen as part of the product, not as a burden. Finally, continuous integration enables the tested code to be pushed and integrated automatically.

Continuous delivery reduces the lead time to get environments on demand. It enables continuous automated testing and allows small teams to safely and independently develop, test, and deploy their work into production. This makes deployments and releases a routine part of daily work. Architecture should support this kind of approach. Loosely coupled components and automated tests in unit, component, integration, system, and end-to-end levels are the way to go.

Tech logos on a laptop
Image: Morgan Richardson

Way of working

For a team to perform and meet the given goals, the work environment needs to be solid and inspiring. There needs to be the right amount of meetings (with purpose), brainstorming, quiet times, and analysis. For work to sail smoothly forward from idea to production, all work should be visible and planned. 

Sometimes most of the time goes to firefighting and other unplanned work. The key to avoiding this kind of setting is a high level of autonomy. The team can independently decide what is the best approach to a given problem. This also means that the team must frequently assess their ways of working and continuously improve.

Team

It is good to have roles and responsibilities in a team, but one must keep in mind that the people working in those roles are not only what the role describes. 

For example, a tester in a team is usually most active in the testing activities but can do a lot more if given the chance. Testing as an activity can and should be done from every role’s perspective to achieve better and faster results. But still, the different opinions and points of view can truly be understood only via communication, trust, and honesty. For a team to work effectively the people must want to work towards the same goals together. Getting to know each other, building trust, and accepting differences are the fundamentals of a good team. Learning these aspects will take time but it is indeed worth it.

The team has to have the possibility to influence the whole delivery process from idea to production, and the autonomy to make decisions. Tools for achieving results include highly automated pipelines, where all the changes and increments are tested early, built, deployed, and finally released to production with monitoring and analytics in place. This all sounds wonderful, easy, and fun, but on the contrary, it is hard and takes a lot of effort to maintain. Lack of communication and unclear goals may lead to poor patterns, knowledge gaps, and overall suboptimal quality.

This kind of high-performance team can not be created easily and swiftly. The organization must have patience and trust in people, so that team building is seen as an important phase in projects and product development. With time, autonomy, and communication, the team can find common goals and means to achieve them. 

Image: Annie Spratt

Learning

Wisdom is the understanding that you do not know everything. The team should have time to explore and learn new things and then share these learnings. New ideas should be embraced and experimented with open-minded culture. Of course, these ideas should have some kind of goals and measures so that they can be evaluated and then decided whether to keep or discard.

Demos, reviews, and retrospectives are great sources of learning from each other. There should be enough time for the team to represent, review and examine what and how they are developing. This will lead to new ideas on how to improve, and what to examine and explore in the future. 

There are a lot of great software development communities where ideas and best practices are openly shared across companies. There are also plenty of conferences that are held online for easy access to new knowledge. Attending these kinds of more relaxed activities is also a good way to have breaks from day-to-day work.

Feedback

Early and fast feedback prevents most of the bugs from going to production. Sources of feedback are for example the team, review, telemetry, monitoring, test automation, testing, customer feedback, and the market. This list could be expanded much more. The point is that there are many feedback sources and the best course of action is to find them and then shorten the feedback loop and amplify the feedback in general. Each member of the team is also a valuable source of feedback. There must be time to review and learn from other team members’ work. Communication and trust are important so that people are accustomed to giving and receiving feedback.

Image: John Schnobrich

Conclusion

These were my ideas about technology, way of working, the team, learning and feedback, and how these key aspects can be improved to make better software with better quality. These ideas could also offer solutions for people seeking meaningful work without firefighting and interruptions. By being interested in learning the new and willing to challenge the old, and by sharing our knowledge and experiences, we will be able to achieve better quality.

About the writer


Juuso Issakainen

DevOps/QA Lead

Juuso loves a good cup of coffee. He also likes to have conversations about technology and sports. Juuso has been working in the IT industry for 10 years in many quality-oriented roles. In his free time, he likes to play games, throw frisbees and enjoy nature and life.

Search