Techn(olog)ical Debt And How To AVOID Its Dreadful Consequences

23
Mar 18
technical debt technological debt

Techn(olog)ical Debt And How To AVOID Its Dreadful Consequences

With Just A Drop Of Dish Soap And A Sponge

 

The best explanation we have encountered of what the technical debt actually means was by comparing the concept to … doing the dishes!

Annotation:  for the sake of this metaphor please forget dishwashers exist. 🙂

Thus, let’s break it down. If you are one of those who not particularly enjoy cleaning up after dinner right away, you will be able to relate. When you finally find the motivation to handle all that mess it is very likely it will take a lot of time and effort. Getting rid of that dried out food waste is probably going to drive you crazy. On the other hand, if done immediately it is not going to take more than just a couple of minutes. A drop of dish soap and a sponge is all you need!

Same with IT projects. Taking care of the issues right away is going to save resources in the future. If you are going to wait and leave unresolved bugs behind they will definitely pile up as a stack of dirty dishes in your kitchen sink.

 

Technological Debt In Theory

 

Technological debt (sometimes also: technical debt, code debt or design debt) stands for an implied cost of additional rework caused by choosing an easy approach to software development. The phenomenon is widely known since the ‘90s. An example of it was initially dished up ↑ ? by a well-known and influential software engineer and computer consultant from USA, Edward Yourdon. As he described it, the technical debt means the lack of the bigger idea, plan or project behind the software in progress. The term is also associated with Howard Cunningham,  a computer programmer who developed the first wiki. The pioneer in design patterns and extreme programming was not satisfied with the quality of the application he was working on. He then stated that some practices generate a technological debt, which will then result in a difficult and slow development of a given programming project. Over time, the concept evolved to take on more general meanings.

Currently, it is understood as a part of an IT system created without taking care of the quality of the code. It means that day-to-day technological debt is growing and influencing the work of developers around the world as we speak.

 

Common Causes Of The Technical Debt

 

Technical debt can be caused by multiple reasons.  To name just a few:

Insufficient up-front definition, where development starts before any design takes place. This is done to save time but often has to be reworked later.

Business pressures, where the investor requires the release before all of the necessary changes are complete.

Lack of process or understanding, where businesses make decisions without considering the implications or following any of the professional software development methodologies.

Tightly-coupled components, where functions are not modular, the software is not flexible enough to adapt to changes in the business needs.

Lack of a test suite, which encourages quick and risky band-aids to fix bugs.

Lack of collaboration, where knowledge is not shared around the organization, or junior developers are not properly mentored.

Parallel development on two or more branches accrues technical debt because of the work required to merge the changes into a single source base. The more changes that are done in isolation, the more debt is piled up.

Delayed refactoring – As the requirements for a project evolve, it may become clear that parts of the code have become inefficient or difficult to edit and must be refactored in order to support future requirements. The longer that refactoring is delayed, and the more code is added, the bigger the debt.

Lack of alignment to standards, where industry standard features, frameworks, technologies are ignored.

Lack of knowledge, when the developer simply does not know how to write elegant code.

Poor technological leadership where poorly thought out commands handed down increase the technical debt.

 

technological debt technical debt

 

How Can You AVOID Technical Debt?

 

In general, the technical debt is a result of poorly made decisions. In order to avoid its dreadful consequences, it is important to cooperate with specialists who know their job and are following the rules of modern agile software development. One of the fundamental principles of such methodology is examining the quality of code as you proceed with the project. At the same time, it is equally important to provide the compatibility of the system and your individual business needs. The biggest advantage of the agile approach is allowing the change at every stage of the implementation. It means that you can take the project and start expanding it in a totally different direction whenever you see fit.

While searching for a software house look for an organization experienced in the framework of Scrum. We recommend it because you and the team do not need to follow a strict documentation only for the sake of it. There is no requirement of signing a specification before moving on with the development. As the Product Owner, you are fully in charge of how your software is going to look like. Above and beyond, there is no technical debt! Because you receive a working piece of software in short periods (Sprints) you have the full control over the quality of your application. There is basically no risk of leaving unsolved bugs and problems behind and having to deal with them in the future.

 

More about the advantages of Scrum we have covered in the following blog post: https://evolpe.software/scrum/ 

 

summary

A technological or technical debt (as you will) is a real threat that influences everyone who has to do with software development. We cannot deny that it is going to be difficult to get rid of the consequences of not paying it off globally. What you -as an entrepreneur- can do, is not to add to it! Or at least, pay your dues as soon as possible. If you are looking for a business partner to help you along the way of software development project – ask them about their experience in agile methodology. This is objectively the best way to stay in control of the quality of the code. Do not be afraid of making changes in your software. If you see the anticipated version is not going to satisfy your evolving business needs, modify it! Also, be confident asking for a proper training for admins and users. A professional software house has to provide the support to make sure that… no dishes are pilling up in your sink. 😉

 


22
Jan 18
scrum

Why We Love Scrum (And You Should, Too!)

Having developed IT solutions for dozens of companies from all around the world, we have had to do with both traditional and agile methodologies. Over the years we have come to the conclusion that there is no better way of understanding customer’s needs and translating them into software than with a little help of… a whiteboard and a pad of sticky notes.

As surprising as it sounds it is the only requirement necessary to start working in Scrum. And not even a definite one. The essence of Scrum is intangible. It is rather a set of values, rules and roles than a strict procedure to follow or a tool to use. This is probably the first reason why we have liked it so much. It gives us room for creativeness, unconventional solutions and freedom of expressing our perspective. All that works perfectly in favor of solving complex problems, prioritizing tasks and delegating them to individual members of the team.

Agile and Scrum – is it any different?

scrum agile

At the beginning, it might get a little confusing. Not to delve too far into the theory, Agile refers to a set of methods and practices based on the values and principles expressed in the Agile Manifesto, which includes things like collaboration, self-organization, and cross-functionality of teams. Scrum to say the least is one of the many frameworks that fall into the category of agile development. As Ken Schwaber and Jeff Sutherland explain in the Scrum Guide: “it consists of Scrum Teams and their associated roles, events, artifacts, and rules. Each component within the framework serves a specific purpose and is essential to Scrum’s success and usage. The rules of Scrum bind together the events, roles, and artifacts, governing the relationships and interaction between them”.

Why we prefer this particular way is mostly because it can be easily adjusted to the requirements of our client. This way no matter what your field of expertise is, what kind of business process needs to be tamed by the software – we will be able to help you.

scrum agile

If you still do not quite get the difference, try comparing… a diet and a recipe. A recipe for a particular dish needs to correspond with your diet. Otherwise, you will never see results! A diet is something “bigger” which determines what kind of recipe you are going to choose from the cookbook. Same with software development. Or any other project for that matter. There is no Scrum if you do not follow Agile Manifesto. Or at least you cannot say you have been following “doctor’s orders”.

 

 

 

Scrum is people

You really do not need much to begin working in Scrum. If there is a team of people willing to try, you are good to go!

scrumStart from assigning jobs. The actual tools you are going to use (the famous whiteboard for example) are not as important as getting the roles right.

First of all, the Scrum project requires a Product Owner. This is the person who represents user’s best interest and has the authority to say what goes into the final product. She or he stays in charge of an artifact typical for Scrum called Backlog. Product Owner not only approves the list of tasks and requirements but also prioritizes everything on it. The question a Product Owner needs to answer the most is: Is it a “Must Have” or a “Nice to Have” feature?

 

Every group requires a leader, someone who will discipline the rest. Without it there is a fair risk of procrastinating, trumping up or losing the motivation. Having that in mind, another very important role “to cast” is the role of a Scrum Master – the person who helps the team move along with the job. But being a leader means so much more than just bossing people around. In Scrum, the leader is also a servant. Not even the Scrum Master has the power to tell the Development Team how to turn Product Backlog into an Increment of a potentially releasable functionality!

Speaking of, a Development Team is a group of people responsible for delivering shippable product increments every Sprint (which is the goal!). The team needs to be self-organizing and cross-functional. It means that they independently decide how to proceed with the job and hold the competencies necessary to do so; without depending on others who are not a part of the team.

In our world of software development, the members of the Scrum Team are mostly programmers. Sometimes also sales representatives or business analysts. Regardless of what is their position in the company though, Scrum never recognizes titles other than a Developer. In the Development Team, everyone is equal and have the same right to speak up at any time.

Additionally, Scrum recognizes 5 rules of how the people involved should cooperate. Everything in order to organize the job and properly allocate responsibilities to the members of the team.

  1. Commitment: Team members individually commit to achieving their team goals, each and every Sprint.
  2. Courage: Team members know they have the courage to work through conflict and challenges together so that they can do the right thing.
  3. Focus: Team members focus exclusively on their team goals and the Sprint Backlog; there should be no work done other than through their Backlog.
  4. Openness: Team members and their stakeholders agree to be transparent about their work and any challenges they face.
  5. Respect: Team members respect each other to be technically capable and to work with good intent.

 

About the artifacts

– explaining all that weird stuff we have mentioned (and some more)

scrum

While talking about the roles, we have failed not to use some other cryptic terms. Therefore, we owe you some explanation.

First of all – Product Backlog. It is an ordered list of everything that is needed in the product or simply the only source of requirements and changes to be made. It contains a description of features, functions, requirements, enhancements, and necessary fixes. Important sidenote: it is never complete! It evolves constantly, as the product and the environment change.

 

Sprint. We have used that referring to a single iteration, a period of time (usually 2 weeks) in which the Development Team is obliged to introduce a finished Increment to the project.

The Increment is the sum of all the tasks completed during a single Sprint. It must be in useable condition and meet the definition of “Done.” It is up to the Development Team and the Product Owner to decide how that definition sounds like. What we say at eVolpe Software House is that it just means a working piece of software, 100% ready to be introduced to our client.

(But we have not explained everything about the Sprint yet!)

A Sprint consists of a couple of smaller parts. It is full 10 working days after all. Those elements are the Sprint Planning, Daily Scrums, the development work, the Sprint Review, and the Sprint Retrospective. Now, let’s quickly go through them.

The Sprint Planning is a meeting being held in order to answer two following questions:

  1. What can we deliver in the upcoming Sprint?

  2. How will we achieve that?

 

The Daily Scrum (or Stand-Up) is an about 15-minutes-long meeting held to synchronize activities and create a plan for the next 24 hours. This is done by inspecting the work since the last Daily Scrum and forecasting the work that could be done before the next one.

A Sprint Review is held at the end of the Sprint to inspect the Increment and adapt the Product Backlog (if needed). During the Sprint Review, the Scrum Team and stakeholders collaborate about what was done in the Sprint. Based on that, attendees collaborate on the next things that could be done to optimize project’s value.

The Sprint Retrospective is an opportunity for the Team to inspect itself and create a plan for improvements to be enacted during the next Sprint.

3 Pillars of Scrum (and the whiteboard, at last)

scrumCongratulations, you have made it to the end of this article and here it is your price! We are finally going to speak on the whiteboard!

An important principle of Scrum is the idea of Transparency. It means that all the Developers should be aware of what everyone else is working on and what the Team is trying to accomplish. In order to assure that, we are using a professional software – called Redmine – along with a little more conventional tool.

Making things clear and visible on a whiteboard is really helping us run the projects properly. It also boosts our creativity. Being able to comprehend the whole process with just one look is definitely making things easier for many of us.

Another pillar of the framework is the rule of frequent Inspection. It helps to detect undesirable variances. It should not eclipse the bigger picture or get in the way of the work though.  The idea is to keep the track of the progress and react if anything goes wrong for some reason.

The third big pillar of Scrum is called Adaptation. If an inspector notices something unusual the adjustment must be made as soon as possible to minimize further damage.

The three pillars together assure the success of the project and make everyone’s job so much easier.


Because there is so much more to say about Scrum than what we were able to fit in a single blog post, we invite you to check our other publications.

Here we speak about Product Discovery – one of the first steps to a successful IT project: https://evolpe.software/product-discovery/.

Here you will find information about the specifics of Agile Software Development in Poland: https://evolpe.software/it-software-development-poland/.

Finally, if you are interested in having your software developed in Scrum, give us a call!