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!

 


11
Dec 17

Discover your product, easy.

The thing with designing a software is that in most cases the idea of how should it look like is quite vague. As a person responsible for the project you were probably asked to deliver a brief description of its purpose.  But do you really know what to write? Most likely you will not be the only user of this system. How should you know what all the groups of interest actually need? And what is possible to achieve?

What is Product Discovery?

Product Discovery is a service that any consulting firm or software house should offer. It helps to understand what kind of an IT solution will be most suitable and correspondent with the specific requirements of your organization. But first, let’s see if you have actually recognized them all and if everything you might imagine truly applies. The best way to do it is to hold a workshop and invite representatives of each department to take part in it. With the help of a professional Business Analyst (designated by the software house), you will easily create the concept of your future product.

8 stages of Product Discovery workshop

And how does such a workshop look like? Well, it depends on an organization. In general, it is possible to distinguish 8 stages of so-called Product Discovery. Not all of them may apply to your specific organization but let’s go through them and find out your options.

1. The Horizon

product discovery

At this stage, you are going to look at a wider perspective of the whole process. First, you will get familiar with the agenda of this very meeting. You will also learn the nomenclature and all the definitions that are going to be necessary along the way. Next, you will hear about the methodologies in software development, and possibly get the idea of which one to choose. Finally, you might actually see the horizon – an overall idea of the product. But that is only stage one.  We are just getting started.

2. Recognition of the main business process

product discovery

You need to remember that the software itself is no remedy for any performance issues if it does not correspond with what you actually do at your company. Having that in mind, a very important part of the Product Discovery is its second stage. During this take of the workshop you will identify all the steps of your key business procedures. It is going to help to correctly design the system in the long term. The last thing you want is that your brand new application becomes the next bottleneck in your organization, right?

3. Determination of the general goals

product discovery

After you have recognized all the stages of your business process, it is important to gather them all and come up with just a few objectives. Those goals you set during the stage #3 of Product Discovery should stay with you throughout the whole time of software development. Each part of the system needs to be consistent with what is the general direction of the project.  This approach guarantees the success of the IT endeavor and makes every little functionality work in favor of your business.

4. Basic system demonstration

Is the software you think you need actually the best option?

product discovery

In some cases, the team involved in the project already has an idea about which type of existing software could be adjusted – if Open Source – to work with the specific requirements of the company. If so, it is the best moment to do a quick demonstration of such solution. This way you will be able to compare your business process with the capabilities of a certain product. It might be that it is exactly what you are looking for or… not at all. Having this knowledge at such an early stage of the project is going to save you a lot of time and money.

5. IT environment study

product discovery

A very important factor for any software development project is to be aware of all the other systems around it. There is a lot of potential in creating a well-communicated platform of many IT solutions. This way you will avoid repeating the information that already exists in your organization. In order to recognize what you already have and how it should correlate with the new piece of software, it is useful to do a simple outline showing the necessary integrations.

6. System beneficiaries recognition

product discovery

At the beginning of the article, we have made a prediction that you are not going to be the only user of the future software… At this point of Product Discovery workshop you should finally think of who is going to actually work with it. Before you make a judgment of what the software has to do, find out who will be using it and… ask them what they really need!

7. Value Proposition

based on a diagram that shows representatives of each department and their “Jobs, Pains and Gains

product discovery

The Value Proposition stage should lead you to a conclusion about more specific functionalities of the software. At this point, you should ask the future key users what kind of tasks (“Jobs”) they are facing during their work hours. Of some, you might just not be aware. After that, it is important to compare the results with the so-called “Pains”. It means shifting the attention onto all the things that are slowing down the progress in certain departments. Finally, think about what there is to do to fix all the problems along the way. The knowledge about challenges in your organization will help to design a comprehensive solution customized to your specific needs.

8. Comparison of the business process and the software idea

product discovery

The last stage of Product Discovery means a comparison of your business process with the more comprehensible idea of the software. The most important question to ask at this point is: How this case could look like in the system? This is when the concept of what needs to be done comes to life. This is when you discover your product! This is also when you can start the pre-implementation analysis and begin the development with the use of the chosen methodology and the help of a preferable software house.

What should you expect from the software house?

Of course, you are not going to be alone with all this work! 8 stages are quite a lot and you need someone to moderate the whole thing. The smartest way is to ask the software house to designate a professional Business Analyst to guide you through the process. Such person is going to be experienced and well-equipped to take on the responsibility of handling the meeting correctly.

Only thanks to such support you will fully benefit from the workshop! Their job is to make sure that one and all understand what is being discussed and that everyone is using the same nomenclature. It happens in some organizations that some terms mean different things in other departments. It might look like something obvious but it is crucial to the success of the Product Discovery that all the parties are on the same page, at all times! This is also how you will find out how competent your possible business partner actually is. If they have all the necessary qualifications, they will also offer a reliable support later on. This feeling of a mutual trust will be essential during the actual software development. And if something is going to be really clear about Product Discovery it is not only your big idea for the software but also the fact if the company you teamed up with is up for the job.


03
Oct 17
body leasing

Find out the difference between Body Leasing and Development Teams Outsourcing!

The rapidly growing demand for IT workers that we are currently experiencing caused the increase of difficulties while hiring properly qualified employees. Access to fully-fledged IT staff is a problem of small and middle-size companies as well as corporations with large HR budgets. In this situation, instead of hiring IT workers full time it is way more convenient to use services such as Body Leasing or Development Teams Outsourcing.

What is the difference between Body Leasing and Development Teams Outsourcing?

Looking closer at the software development market you have probably noticed that many software houses apart from classic implementations offer also outsourcing of IT specialists. If you find it hard to spot the difference between Body Leasing and Development Teams Outsourcing, this article is exactly what you have been looking for.

Body Leasing is a periodical hire of IT professionals holding competences from different areas of software development. It is most commonly used to streamline the project management and reduce costs of the implementation. It can be suitable for large, medium and even small companies.

In other words, Body Leasing is a way of getting services of individual development team members in order to implement an IT project of your choosing. It is a solution recommended for all the companies that have an experience in software development, know what they would like to achieve and how, but at the same time need some support to build up a team. The only thing they are missing is a skilled Scrum Master, Business Analyst or a single Developer.

In the case of Development Teams Outsourcing, it is possible to request a whole, complete and experienced team to work on your project without having to invest the time of your company’s human resources. The difference is that it is not only a single person holding a set of skills from a certain area of interest but a team on its own working to get things done for a stakeholder. You don’t need to have knowledge regarding individual stages of software development because the people you hire have it covered and are able to deliver the result you have ordered. They could also be working remotely from a different country and you will be informed only about the outcome of each Sprint. Your job as a stakeholder is to accept the product as it is or communicate the changes to be done. This is also why Time & Material price settlement is a preferable choice while pursuing IT projects developed by outsourced teams (more about it why, later on in this article).

Advantages of Body Leasing and Development Teams Outsourcing

Body Leasing, as well as Development Teams Outsourcing, were created to reduce the cost of employment in the long run. The main advantage of those solutions is that companies no longer waste time looking for IT specialists on the market and thus avoid the financial outlay of constant recruitment. Turning to a software house that is offering to outsource its own employees makes it easier to get an IT project on track. As a client of such company, you don’t have to maintain a full-time employee nor a team of specialist for a single project. Those two solutions help you save on equipment, licenses, and often also on the office space. Furthermore, outsourcing in general allows engaging professionals for a short period of time. In such situations, the lack of rigid costs associated with traditional forms of employment is a great convenience for the company.

Mistakes to avoid if deciding on Body Leasing or Development Teams Outsourcing

The most crucial part of the software development takes place usually right at the beginning of the process. The choice of the supplier and then the early stage of negotiations will most likely shape the rest of the cooperation between the participants. To avoid misunderstandings and make the job easier to handle remotely, you should definitely very carefully check the references and read through Service Level Agreement. In the classic Body Leasing, a fundamental mistake is usually a too poorly defined candidate’s profile. For example, clients often point onto too much competency in relation to their actual needs. As a result, the cost of the order as well as the time of delivery increases unnecessarily. To avoid this, it is worthwhile to designate a person (Project Owner) who will attend the meetings of the development team and take responsibility on what is actually being done. This way it should be easier to profile the actual needs of the customer.

Price settlement – how does it work?

Both Body Leasing and Development Teams Outsourcing can be based on Time & Material or fixed price agreements. The most efficient way is definitely the first option, which is characterized as the calculation of hours worked by a specialist on the project (based on the so-called timesheet). The second model involves evaluating the project, calculating the assumptions and the outcome as well as team’s performance (which is quite subjective). Understandably, it is way harder to agree on the software’s value as it is done and one of the parties would like to already start using it (preferably before paying for it) and the other is still waiting for the compensation. To avoid presumable conflicts it is recommended to use the agile price settlement on the on grounds of Time & Material.

Let’s sum it up!

More and more often companies are interested in hiring experts for a particular project only; especially developers proficient in PHP and JavaScript and its extensions. Forms of this employment can be very diverse: from having a single professional consult on a project to the use of the entire development team. As both Body Leasing and Development Teams Outsourcing become more and more popular, before choosing one it is crucial to examine individual needs and to decide which form could be more beneficial for a specific company or project. Body Leasing is usually more profitable for companies that already have the experience in software development and need just the support from one or couple of individual team members. Development Teams Outsourcing is most viable rather in the case of firms from other branches that do not hire IT specialist and need complex assistance.

For more information about Body Leasing and Development Teams Outsourcing contact our team directly!