Deprecated: Function create_function() is deprecated in /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php on line 258

Warning: Cannot modify header information - headers already sent by (output started at /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php:258) in /home/qualit96/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1372

Warning: Cannot modify header information - headers already sent by (output started at /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php:258) in /home/qualit96/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1372

Warning: Cannot modify header information - headers already sent by (output started at /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php:258) in /home/qualit96/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1372

Warning: Cannot modify header information - headers already sent by (output started at /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php:258) in /home/qualit96/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1372

Warning: Cannot modify header information - headers already sent by (output started at /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php:258) in /home/qualit96/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1372

Warning: Cannot modify header information - headers already sent by (output started at /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php:258) in /home/qualit96/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1372

Warning: Cannot modify header information - headers already sent by (output started at /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php:258) in /home/qualit96/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1372

Warning: Cannot modify header information - headers already sent by (output started at /home/qualit96/public_html/wp-content/plugins/revslider/includes/framework/functions-wordpress.class.php:258) in /home/qualit96/public_html/wp-includes/rest-api/class-wp-rest-server.php on line 1372
{"id":13429,"date":"2017-11-29T21:35:23","date_gmt":"2017-11-29T16:35:23","guid":{"rendered":"http:\/\/quality-spectrum.com\/?p=13429"},"modified":"2019-11-20T21:04:39","modified_gmt":"2019-11-20T16:04:39","slug":"the-not-so-small-code-changes","status":"publish","type":"post","link":"https:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/","title":{"rendered":"The \u2018not\u2019 so small code changes"},"content":{"rendered":"

I recently made the good old \u2018one liner change\u2019 in our automation framework having a 22-hour batch run with one permutation only. We discovered a week before regression my \u2018small change\u2019 had caused a straight 25% false failures. When my awesome team suggested to revert the change, I realized I did not recognize the demon at that time. This demon goes by many names, \u2018one liner change\u2019, \u2018small change\u2019, \u2018localized change\u2019 and so on (and will be referred as demon from here on in letter and spirit).<\/p>\n

 <\/p>\n

Cause of the trap<\/h2>\n

Have you ever sat with a friend driving a car and you feel a bit unsafe, like he \/ she does not have as much control over the car? And how is the driver feeling in that moment, pretty confident for the most part. I feel a similar case happens when one person on the team feels about the \u2018small change\u2019 in code. In the moment of making the change, it feels like we were just putting a bandage on a little bunny\u2019s scratch. Till later on it turns out that was a lion we just misfired a pump action at and now are running for our lives.<\/p>\n

 <\/p>\n

The demon effect<\/h2>\n

The demon is lethal mainly because it does not look like will create much of a problem. Often teams end up making such changes close to regression \/ release giving less time to react. Eventually the decision of releasing with bugs or delaying the release has to be taken which no one likes. I would equate this with \u201cPutting good money after bad money\u201d (adding more time to salvage the situation) hardly ever works except for gifting with more frustration (my published thesis on the subject here<\/b><\/a>).<\/p>\n

 <\/p>\n

Small and \u2018not so small\u2019 change<\/h2>\n

While small changes or localized changes do exist, sometimes the demon is misunderstood for one. What defines a demon then? A formula I like to use is if the change is encapsulated within a small area of the application, a low-level module or one class affecting functionality of just that module or class. The mistake I have seen made is a functionality which is not encapsulated within a confined class \/ module but we feel it\u2019s used only in one or few specific areas being confused with a localized change. Unless there is no way this change can be accessed or affect directly anything outside its scope, it\u2019s not a localized change.<\/p>\n

 <\/p>\n

Quarantine the demon<\/h2>\n

The change must be done no doubt, but can be done in time of peace, not on the 11th<\/sup> hour a day before regression. Implement it in the early sprints of a release, so there is time to react and adjust before the deadline hits. Firstly, while implementing you hopefully will not be in a rush and can think through. Secondly there would be time to test issues around just that change and would be easier to identify the cause of bugs we see.<\/p>\n

 <\/p>\n

A general best practice is to make changes in increments rather than doing the whole big change at once. If you have automation running on UI or API level, that makes things easier. As you push the big change in increments, you get to know right away any outright effects it might have. And if you don\u2019t have automation, I would say first think of doing that, otherwise you can focus manual testing as much possible towards testing the ripple.<\/p>\n

 <\/p>\n

Big decisions take time<\/h2>\n

Like in life big decisions take time not just to research on, but to think about and reflect upon. Similarly, I feel taking time for architectural changes to \u2018sink in\u2019 or internalize takes time. By doubling the resources working on it, it would not get done in half the time. For big changes, I usually start thinking about them ahead of time with my team, so when we do start doing it we have things in perspective and can make a better judgement.<\/p>\n

 <\/p>\n

Care to share what else would you would do to make an architectural change transition smoothly?<\/p>\n<\/div>

<\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":13427,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[40],"tags":[],"yoast_head":"\nThe \u2018not\u2019 so small code changes - Quality Spectrum<\/title>\n<meta name=\"robots\" content=\"index, follow\" \/>\n<meta name=\"googlebot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta name=\"bingbot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The \u2018not\u2019 so small code changes - Quality Spectrum\" \/>\n<meta property=\"og:url\" content=\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/\" \/>\n<meta property=\"og:site_name\" content=\"Quality Spectrum\" \/>\n<meta property=\"article:published_time\" content=\"2017-11-29T16:35:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-20T16:04:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/quality-spectrum.com\/wp-content\/uploads\/2017\/11\/notSoSmallChange.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@aali_khalid\" \/>\n<meta name=\"twitter:site\" content=\"@aali_khalid\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/quality-spectrum.com\/#organization\",\"name\":\"Quality Spectrum\",\"url\":\"https:\/\/quality-spectrum.com\/\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/alikhalid\/\",\"https:\/\/www.youtube.com\/c\/QualitySpectrum\",\"https:\/\/twitter.com\/aali_khalid\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/quality-spectrum.com\/#logo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/quality-spectrum.com\/wp-content\/uploads\/2019\/11\/QS-logo-mobile-e1574510459832.png\",\"width\":40,\"height\":40,\"caption\":\"Quality Spectrum\"},\"image\":{\"@id\":\"https:\/\/quality-spectrum.com\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/quality-spectrum.com\/#website\",\"url\":\"https:\/\/quality-spectrum.com\/\",\"name\":\"Quality Spectrum\",\"description\":\"Redefining software quality\",\"publisher\":{\"@id\":\"https:\/\/quality-spectrum.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/quality-spectrum.com\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/quality-spectrum.com\/wp-content\/uploads\/2017\/11\/notSoSmallChange.jpg\",\"width\":1280,\"height\":720},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/#webpage\",\"url\":\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/\",\"name\":\"The \\u2018not\\u2019 so small code changes - Quality Spectrum\",\"isPartOf\":{\"@id\":\"https:\/\/quality-spectrum.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/#primaryimage\"},\"datePublished\":\"2017-11-29T16:35:23+00:00\",\"dateModified\":\"2019-11-20T16:04:39+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/\"]}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/#webpage\"},\"author\":{\"@id\":\"https:\/\/quality-spectrum.com\/#\/schema\/person\/4805a00d7139e111ea9430e17cc8f28c\"},\"headline\":\"The \\u2018not\\u2019 so small code changes\",\"datePublished\":\"2017-11-29T16:35:23+00:00\",\"dateModified\":\"2019-11-20T16:04:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/#webpage\"},\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/quality-spectrum.com\/#organization\"},\"image\":{\"@id\":\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/#primaryimage\"},\"articleSection\":\"Management\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/quality-spectrum.com\/the-not-so-small-code-changes\/#respond\"]}]},{\"@type\":[\"Person\"],\"@id\":\"https:\/\/quality-spectrum.com\/#\/schema\/person\/4805a00d7139e111ea9430e17cc8f28c\",\"name\":\"Ali Khalid\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/quality-spectrum.com\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70cbf539f218f275a77959dd2e56bddb?s=96&d=mm&r=g\",\"caption\":\"Ali Khalid\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/posts\/13429"}],"collection":[{"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/comments?post=13429"}],"version-history":[{"count":4,"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/posts\/13429\/revisions"}],"predecessor-version":[{"id":13753,"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/posts\/13429\/revisions\/13753"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/media\/13427"}],"wp:attachment":[{"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/media?parent=13429"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/categories?post=13429"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/quality-spectrum.com\/wp-json\/wp\/v2\/tags?post=13429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}