{"id":3934,"date":"2014-06-24T09:00:14","date_gmt":"2014-06-24T12:00:14","guid":{"rendered":"http:\/\/blog.plataformatec.com.br\/?p=3934"},"modified":"2018-09-24T14:47:25","modified_gmt":"2018-09-24T17:47:25","slug":"the-symptoms-of-low-internal-software-quality","status":"publish","type":"post","link":"https:\/\/blog.plataformatec.com.br\/2014\/06\/the-symptoms-of-low-internal-software-quality\/","title":{"rendered":"The Symptoms of Low Internal Software Quality"},"content":{"rendered":"
It’s known that physical matter deteriorates. People accept that and have always dealt with it. What people don’t accept so easily is that software “deteriorates” too. Unlike physical matter, it doesn’t happen due to some physical or chemical phenomenon. It usually happens because of some business change or people change. Let me give you an example.<\/p>\n
Imagine you’re leading the tech or product team of a startup; you’re the CTO. You already launched your product’s first version, and it was a success. Your business model was validated, and now you’re in a growth stage. That’s awesome! But it has its costs, and it brings a new set of challenges.<\/p>\n
The first version of your product is working, but the codebase is not in the shape you’ll need from now on. Maybe your team’s velocity is not as good as it used be. Your team keeps complaining about the code quality. The CEO and the product director want new features, and your current projections will not meet the business needs.<\/p>\n
It’s not uncommon that one of the main sources of all these problems is the poor quality of your product’s codebase. You may need a refactoring<\/a> 1<\/a><\/sup> or a rewrite<\/a>.<\/p>\n If the internal quality of your product is not good, everyone becomes frustrated.<\/p>\n Your whole team, including developers, will get frustrated because they would like to ship features faster, but the current code quality and architecture are not helping.<\/p>\n The IT, product, and software departments suffer because they’re not able to meet the expectations of the other departments.<\/p>\n The customer also suffers because of frequent bugs, how long it takes for them to be resolved, and how long it takes new features to be launched.<\/p>\n You get the picture.<\/p>\n It’s the leader’s job (let’s say the CTO) to identify when a refactor<\/a> or a rewrite<\/a> is needed. In order to do that, he or she can look around for some symptoms, like the ones below:<\/p>\n The reason you got into one of these situations is probably not a technical one. Maybe you needed to deliver too much, too fast while you were building the first version of your product. Maybe your team didn’t have the maturity and experience in the past they have now. Analyzing the root cause is important too, but you need to do something else. You need to solve your problem.<\/p>\n If you’re experiencing the symptoms above, you probably have a low internal software quality problem<\/strong>. Recognizing the symptoms is already a big step. The next step is to think of solutions. Some solutions you may take include refactoring<\/a> or a rewrite<\/a> process.<\/p>\n There’s no definitive guide about when you should do a big refactor<\/a> or a rewrite<\/a>, because it depends on a lot on your context. That said, there are some rules of thumb that you should consider when evaluating which solution to go with:<\/p>\n When to rewrite<\/strong><\/p>\n When to refactor<\/strong><\/p>\n Choosing one of these options is not an easy decision, and once you go with one of them, there will be an entire new set of concerns you’ll encounter. Stay tuned, in our next blog posts we’ll talk about what to consider when doing a big refactor<\/a> or a rewrite<\/a>.<\/p>\n Now I would like to know about your experiences. Have you ever been in a similar situation? How did you identify that your problem was low internal software quality? Please share with us!<\/p>\n The first post of Low Internal Software Quality series. Not only physical matter deteriorates, software does too It’s known that physical matter deteriorates. People accept that and have always dealt with it. What people don’t accept so easily is that software “deteriorates” too. Unlike physical matter, it doesn’t happen due to some physical or chemical … \u00bb<\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[205,217,218,15],"aioseo_notices":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/posts\/3934"}],"collection":[{"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/comments?post=3934"}],"version-history":[{"count":43,"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/posts\/3934\/revisions"}],"predecessor-version":[{"id":7796,"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/posts\/3934\/revisions\/7796"}],"wp:attachment":[{"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/media?parent=3934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/categories?post=3934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.plataformatec.com.br\/wp-json\/wp\/v2\/tags?post=3934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}When the codebase is not in good shape, everyone can get frustrated<\/h3>\n
Identifying the symptoms<\/h3>\n
\n
Refactor or rewrite?<\/h3>\n
\n
\n
Posts of the Low Internal Software Quality series<\/h4>\n
\n
\n\n
\n","protected":false},"excerpt":{"rendered":"