Author: Şahap DAYIBAŞ, Technical Team Leader / Embedded Systems
We have already started talking about the challenges of distributed agile teams in our previous blog post “Remote Teams in an Era of Agile”. Now, we continue with another topic which is essential to succeed in an era of agile software development.
Technical excellence is one of the most significant prerequisites for agile frameworks. Some people might still think that it is not so critical topic looking at the scrum guide or any other framework definitions because they do not explicitly mention about any technical practices that you can take as reference. However, technical excellence is one of the principles behind agile manifesto which emphasizes technical excellence for enhanced agility. Agile teams should place enough emphasis on this topic so that they can get the maximum benefit from agility.
There are quite a few techniques and practices available so that agile teams can adapt to themselves. Even teams start their development process without applying any of these practices, they will realize later that these practices are crucial in the long term because of experienced technical debts along the way and having problems with developing and delivering high-quality products successfully.
I will try to give you brief information about some concepts and practices in the following sections. Although there are lots of things to mention for each section individually, let’s start to look at from higher perspective. We can discuss them in more detailed in the next blog posts.
Design and Architecture
Agile Software Development requires to develop high-quality software to manage reaching goals and provide sustainability in the long term. For this reason, software architecture and design are the skeletons of the systems. There are various well-known practices available for agile software development frameworks. Pair Programming, Test-Driven Development (TDD), Unit Testing, Clean Code and Refactoring are the ones which we use in our projects to achieve technical excellence globally.
Definition of Done (DoD)
Definition of Done is a set of criteria which are required and must be met to deliver the product backlog items in the desired quality and consider a job as complete. Individual features or user stories may have specific “done” criteria in addition to the ones that apply to work in general. Definition of Done provides better transparency in the case of team members are not co-located to prevent misunderstandings. My hands-zone experience is that it is easy to create a list with high numbers of items at the very beginning of the project. However, it is more important to form a list of feasible items which is well accepted from team members rather than focusing on a high number of list items. Scrum Teams will find the correct and required items along the way of development eventually via conducting retrospective meetings and as a result of empiricism.
Continues Integration (CI)
Continues Integration is a software development practice which development teams use to integrate their works into a single repository frequently. The main objective of CI is to minimize the effort required for integration problems and be able to develop high-quality releasable software by increasing integration frequency. The practice of CI should not be confused with the tools that assist it. Continuous Integration is the first and foremost matter of attitude rather than tools. It aims to lessen the pain of integration by increasing its frequency. Automated builds play a vital role in this concept. The importance and benefit of having CI significantly important if there are multiple and physically distributed teams. The reason behind is that CI helps them to find integration problems earlier and reduce integration bottlenecks.
Quality Assurance (QA)
All the above topics above mainly serve to produce a high-quality software product which is the essential outcome of the process. There are several main contributors like processes, tools, people to the quality. The overall quality mostly depends on the quality of the above contributors. Quality Assurance is the set of practices which aims to provide required and enough quality in the product. The cross-functional agile teams need to have a quality mindset and vision from the very beginning of the project. Every member of the team should be responsible for the quality of the outcome.
Overall, it may be concluded that there are various practices, techniques and collaborations to enable the business to achieve its objectives in an era of agile. We should always keep the focus on system design & architecture to evolve it continuously. In addition to that, we can be more quality-oriented via using a continuous integration environment and making quality assurance an ongoing activity through the process. Finally, putting all the necessary actions into a Definition of Done list as a result of the continuous improvement approach, we can have live references that are grown out of our experiences.