<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Joost Visser</title>
    <description>The latest articles on Forem by Joost Visser (@jstvssr).</description>
    <link>https://forem.com/jstvssr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F8321%2FJstVssr.jpg</url>
      <title>Forem: Joost Visser</title>
      <link>https://forem.com/jstvssr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jstvssr"/>
    <language>en</language>
    <item>
      <title>Dev during pandemic, how are you doing?</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Tue, 06 Apr 2021 12:19:49 +0000</pubDate>
      <link>https://forem.com/jstvssr/dev-during-pandemic-how-are-you-doing-129n</link>
      <guid>https://forem.com/jstvssr/dev-during-pandemic-how-are-you-doing-129n</guid>
      <description>&lt;h4&gt;
  
  
  Are devs doing better or worse after a year of pandemic programming?
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;By Joost Visser and Magiel Bruntink&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HDXiFeGf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AlldSMdN0WT733d8E5qAaFw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HDXiFeGf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AlldSMdN0WT733d8E5qAaFw.jpeg" alt=""&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@yasmina?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Yasmina H&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/home-office?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How are software developers doing, while working at home?&lt;/p&gt;

&lt;p&gt;Are you missing the office? The bustle, the perks? Your colleagues? Your boss! Are are you happy to sit quietly at home, where you can pound out code without interruptions? Or are you getting disconnected from your team and its mission?&lt;/p&gt;

&lt;p&gt;Developer &lt;strong&gt;happiness&lt;/strong&gt; and developer &lt;strong&gt;productivity&lt;/strong&gt; are known to be interconnected. And both have been impacted by the sudden pandemic-induced switch to fully remote work.&lt;/p&gt;

&lt;p&gt;But has this impact been negative only? Or sometimes positive? And what are the factors that developer and their employers can influence to alleviate the bad and accentuate the good effects?&lt;/p&gt;

&lt;p&gt;Just after the pandemic hit globally, and governments started to instate lock-downs of varying severity, a team of researchers, led by Dr. Paul Ralph and Dr. Sebastian Baltes, decided to &lt;strong&gt;investigate&lt;/strong&gt; the well-being and productivity of software developers around the globe. &lt;a href="https://paulralph.name/wp-content/uploads/2020/05/Pandemic-Programming-Industrial-Summary.pdf"&gt;What did they find?&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Developers’ wellbeing and productivity are suffering”&lt;/li&gt;
&lt;li&gt;“Productivity and wellbeing are closely related”&lt;/li&gt;
&lt;li&gt;“Better home office ergonomics help wellbeing
and productivity”&lt;/li&gt;
&lt;li&gt;“Women, parents, and people with disabilities may
be disproportionately affected”&lt;/li&gt;
&lt;li&gt;“Different people need significantly different kinds
of support”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These findings of the &lt;em&gt;pandemic programming&lt;/em&gt; study are now a year old. In the meantime, waves and lock-downs have come and gone, and many of us are still working from home. &lt;strong&gt;The experience of software developers a couple of weeks into the pandemic versus one year in might have evolved significantly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To see if anything has changed after a year of pandemic, researchers from the University of Leiden and from the Software Improvement Group, decided to conduct an independent &lt;strong&gt;replication&lt;/strong&gt; of the original pandemic programming study.&lt;/p&gt;

&lt;p&gt;If you are a software developer, impacted to some extent by the Covid-19 pandemic, &lt;strong&gt;please take the 10-min survey&lt;/strong&gt; to tell us how your are doing!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take the survey &lt;a href="https://leidenuniv.eu.qualtrics.com/jfe/form/SV_6YyXThvN2a6PBZA"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are donating $500 to an open source project selected by our respondents. Be sure to vote for your favorite cause to donate to!&lt;/p&gt;

&lt;p&gt;The results of the replication study will be available before the summer, and we will publish and link them on this forum and elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read more&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.softwareimprovementgroup.com/resources/new-study-the-pandemic-effects-on-developers-well-being-productivity/"&gt;New study: The pandemic effects on developers' well-being &amp;amp; productivity - SIG | Getting software right for a healthier digital world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.softwareimprovementgroup.com/resources/pandemic-programming/"&gt;Pandemic Programming: Investigating how working from home during COVID-19 is affecting software professionals - SIG | Getting software right for a healthier digital world&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>softwaredevelopment</category>
      <category>wellbeing</category>
      <category>pandemic</category>
    </item>
    <item>
      <title>3 reasons ML disrupts traditional software engineering</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Fri, 19 Mar 2021 17:08:38 +0000</pubDate>
      <link>https://forem.com/jstvssr/3-reasons-ml-disrupts-traditional-software-engineering-1con</link>
      <guid>https://forem.com/jstvssr/3-reasons-ml-disrupts-traditional-software-engineering-1con</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jBO4enpO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AihyCiLSVxzQqESKe6PyMUQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jBO4enpO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AihyCiLSVxzQqESKe6PyMUQ.jpeg" alt=""&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@sloppyperfectionist?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Hans-Peter Gauster&lt;/a&gt; on &lt;a href="/s/photos/chaos?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Traditional software engineering methods have been designed and optimized to help (teams of) developers to build high-quality software in a controlled and cost-effective manner.&lt;/p&gt;

&lt;p&gt;When building software systems that include Machine Learning (ML) components, those traditional software engineering method are challenged by three distinctive characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inherent uncertainty:&lt;/strong&gt; ML components insert a new kind of &lt;strong&gt;uncertainty&lt;/strong&gt; into software systems. While software developers and architects are used to design, build, and test their systems to be able to deal with external factors of uncertainty (network latency, unpredictable user behavior, unreliable hardware), they must now deal with &lt;strong&gt;internal&lt;/strong&gt; components that behave in a non-deterministic fashion. ML components map inputs to outputs in a &lt;strong&gt;probabilistic&lt;/strong&gt; fashion. Take for instance an image-recognition component, that categorizes the input as a cat or a dog, with a certain level of probability, rather than having a crisp outcome.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-driven behavior:&lt;/strong&gt; The behavior of ML components is only very partially determined by the logic that a programmer writes. Instead, behavior is &lt;strong&gt;learned from data&lt;/strong&gt;. This huge dependence on (large volumes of) data, already early in the development stage, changes the development and deployment processes in fundamental ways. Data cleaning, versioning, and wrangling become essential parts of the development cycle. Also in the deployment stage, new challenges arise, such as the need to monitor the (statistical) characteristics of production data versus training data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rapid experimentation&lt;/strong&gt; : Development of ML components is strongly experiment based, where different ML models and different sets of parameters are attempted and evaluated in rapid succession and often in parallel, in order to continuously optimize behavior. This puts the iterative nature of agile software development in over-drive. Where sprints may take 2 to 3 weeks, ML experiments are sometimes initiated, evaluated, and then discarded or adopted within hours.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Researchers in the field of software engineering have begun to study the impact of these challenges. In the &lt;em&gt;Software Engineering for Machine Learning (SE4ML )&lt;/em&gt; project, we have taken the approach of creating a &lt;a href="https://se-ml.github.io/practices/"&gt;&lt;strong&gt;catalog of engineering practices&lt;/strong&gt;&lt;/a&gt; employed by ML teams and advocated for by ML engineering practitioners and researchers.&lt;/p&gt;

&lt;p&gt;So far, our catalog consists of &lt;strong&gt;45&lt;/strong&gt; engineering practices, in 6 different &lt;a href="https://se-ml.github.io/practices/"&gt;categories&lt;/a&gt;, ranging from data management, through model deployment, to governance. We also provide data on how these practices influence team &lt;a href="https://se-ml.github.io/effects"&gt;effectiveness, software quality, traceability&lt;/a&gt;, and various requirements for &lt;a href="https://se-ml.github.io/eu"&gt;trustworthy AI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Do you want to know how you and your team are doing on those practices?Take our 10-minute survey. The survey is anonymous, but if you leave your contact information in the last question, we’ll get back to you with a &lt;strong&gt;team benchmark report&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;➽ Take the 10-minute survey: &lt;a href="https://se-ml.github.io/survey"&gt;https://se-ml.github.io/survey&lt;/a&gt;&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XrkClZRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/EjPvVhlXkAApBAM.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--MuuH3Wt2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/672109807/JstVssr_normal.jpg" alt="Joost Visser profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Joost Visser
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/jstvssr"&gt;@jstvssr&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      How do teams that build &lt;a href="https://twitter.com/hashtag/MachineLearning"&gt;#MachineLearning&lt;/a&gt; applications deal with versioning, deployment, test automation, bias prevention, privacy mechanisms, audit trails, and other engineering and governance practices?&lt;br&gt;&lt;br&gt;Tell us how your team works.&lt;br&gt;&lt;br&gt;A 10min survey: &lt;a href="https://t.co/S0WNaNWFE4"&gt;se-ml.github.io/survey/&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      13:37 PM - 01 Oct 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1311661475715452929" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1311661475715452929" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1311661475715452929" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


</description>
      <category>bestpractices</category>
      <category>softwareengineering</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Why do ML engineers struggle to build trustworthy ML applications?</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Tue, 16 Mar 2021 17:36:33 +0000</pubDate>
      <link>https://forem.com/jstvssr/why-do-ml-engineers-struggle-to-build-trustworthy-ml-applications-3e2g</link>
      <guid>https://forem.com/jstvssr/why-do-ml-engineers-struggle-to-build-trustworthy-ml-applications-3e2g</guid>
      <description>&lt;h4&gt;
  
  
  On the gap between theory and practice and how to close it
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;By Alex Serban and Joost Visser&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;While research on the &lt;strong&gt;Ethics of AI&lt;/strong&gt; increased significantly in recent years, practitioners tend to neglect the risks coming from inequity or unfairness of their ML components. This is one of the insights of the annual &lt;a href="https://hai.stanford.edu/blog/state-ai-10-charts"&gt;State of AI&lt;/a&gt; report for 2020 recently published by the Human-Centered Artificial Intelligence group from Stanford University.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why does this gap exist between theory and practice, and how can it be closed?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In our own research (&lt;a href="https://se-ml.github.io/"&gt;SE4ML&lt;/a&gt;), we have approached this question from several angles, specifically for the major AI sub-area of machine learning (ML).&lt;/p&gt;

&lt;p&gt;On the one hand, we studied ML engineering &lt;strong&gt;practices&lt;/strong&gt; and their level of adoption among ML engineering teams. On the other hand, we studied the &lt;strong&gt;requirements&lt;/strong&gt; for trustworthy ML formulated by policy makers. Finally, we investigated the relative importance of a range of decision drivers for &lt;strong&gt;architects&lt;/strong&gt; of ML systems.&lt;/p&gt;

&lt;p&gt;As we discuss in more detail below, our overall conclusion is that &lt;strong&gt;ML engineering teams lack concrete courses of action for designing and building their systems specifically to satisfy trustworthiness requirements, such as security, robustness, and fairness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Also, we can draw the conclusion that practitioners are &lt;strong&gt;aware&lt;/strong&gt; of the ethical and robustness risks raised by improper development of ML components, but are currently &lt;strong&gt;constrained&lt;/strong&gt; by more traditional concerns such as scaling their systems, or maintaining performance between training and testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are ML engineering practices?
&lt;/h3&gt;

&lt;p&gt;ML engineering is a discipline concerned with developing engineering principles for the design, development, operation and maintenance of software systems with ML components.&lt;/p&gt;

&lt;p&gt;In order to facilitate the adoption of engineering principles by practitioners, we have systematically distilled actionable &lt;strong&gt;engineering practices&lt;/strong&gt; from interviews with practitioners and a broad review of practitioner blogs and academic literature. The resulting practices descriptions are &lt;a href="https://se-ml.github.io/practices/"&gt;catalogued on our website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Moreover, we measure and publish the &lt;strong&gt;adoption&lt;/strong&gt; rate of these practices and their perceived &lt;strong&gt;effects&lt;/strong&gt; , in order to allow assessment and comparison of teams of engineers building software with ML components.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;If you are member of a team that builds software systems with ML components, you can contribute to our research by&lt;/em&gt; &lt;a href="https://se-ml.github.io/survey"&gt;&lt;strong&gt;&lt;em&gt;taking our 10-minute survey&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;em&gt;on ML engineering practices.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Trustworthy ML
&lt;/h3&gt;

&lt;p&gt;Following recent interest by policy makers to address improper use of machine learning (ML), we made efforts to extend our catalogue of practices to include operational practices for &lt;strong&gt;trustworthy ML&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In particular, we followed the requirements for trustworthy ML developed by the High level expert group on AI from the European Commission, which defines &lt;a href="https://ec.europa.eu/digital-single-market/en/news/ethics-guidelines-trustworthy-ai"&gt;trustworthy AI&lt;/a&gt; as being lawful, ethical and robust, and defines &lt;strong&gt;seven key requirements&lt;/strong&gt; for trustworthy AI.&lt;/p&gt;

&lt;p&gt;Inspired by these requirements, we searched the literature for engineering practices that can be directly applied by developers to address ethical and robust development of ML components. In total, we identified &lt;a href="https://se-ml.github.io/eu"&gt;&lt;strong&gt;14 new practices&lt;/strong&gt;&lt;/a&gt;, which include topics such as testing for bias, assuring security, or having the application audited by third parties.&lt;/p&gt;

&lt;p&gt;For all new practices, we summarized the related work into a body of knowledge that follows the same structure as the previous practices from our catalogue, including detailed description, concise statement of intent, motivation, applicability, related practices, and references.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dJnBOJ1X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2A9id1M-LBHK5Qco7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dJnBOJ1X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2A9id1M-LBHK5Qco7s.png" alt=""&gt;&lt;/a&gt;Adoption of practices for trustworthy ML remains low. These &lt;a href="https://se-ml.github.io/eu"&gt;14 practices for trustworthy ML&lt;/a&gt; are defined in detail in our &lt;a href="https://se-ml.github.io/practices/"&gt;ML engineering practices catalog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We also extended our &lt;a href="https://se-ml.github.io/survey"&gt;survey&lt;/a&gt; to measure the adoption of trustworthiness practices by teams developing ML solutions. Unfortunately, we found out that the &lt;strong&gt;practices for trustworthy ML have relatively low adoption&lt;/strong&gt; (as can be seen in the figure above).&lt;/p&gt;

&lt;p&gt;In particular, practices related to assuring &lt;strong&gt;security&lt;/strong&gt; of ML components have the lowest adoption. The contributing factors to these results are diverse. For example, most defenses against adversarial examples — a known threat to ML components — have been breached. Moreover, research into data poisoning attacks shows that only a small percentage of training data needs to be altered in order to induce malicious behaviors. We believe the lack of “off the shelf” solution to security issues of ML components is the largest contributor factor to our results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture of ML systems
&lt;/h3&gt;

&lt;p&gt;In a parallel study, in which we investigated how practitioners define the software architecture of systems with ML components, we asked practitioners to rank the most important decision drivers for their systems.&lt;/p&gt;

&lt;p&gt;Once again, we found out that decision drivers related to trustworthy ML, such as Security, Privacy, or Robustness, were considered less important than more traditional drivers such as Performance or Scalability (as can be seen in the figure below).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lJ1_JxQ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/738/0%2A5YT5NidMTk-KD43D.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lJ1_JxQ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/738/0%2A5YT5NidMTk-KD43D.png" alt=""&gt;&lt;/a&gt;Architectural decision drivers for systems using ML components. Drivers related to trustworthiness tend to be considered less important.&lt;/p&gt;

&lt;p&gt;These results entail that practitioners are still working on solving basic concerns for developing and operationalizing the ML components, and tend to neglect the importance of trustworthy ML requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Outlook
&lt;/h3&gt;

&lt;p&gt;We believe that consistent efforts to address ethics and robustness through the eyes of software engineering will &lt;strong&gt;enhance the ability&lt;/strong&gt; of practitioners to prioritize these requirements and develop trustworthy ML components.&lt;/p&gt;

&lt;p&gt;Moreover, we believe that the adoption of trustworthiness-specific and general ML engineering practices is &lt;strong&gt;interconnected&lt;/strong&gt;. For instance, the practice of continuous integration can make the practices for bias testing more effective.&lt;/p&gt;

&lt;p&gt;Therefore, we are working on defining sets of traditional engineering and trustworthiness related practices that can be directly applied by practitioners to develop more ethical and robust ML components.&lt;/p&gt;

&lt;p&gt;Learn more about the &lt;a href="https://se-ml.github.io/eu"&gt;practices for trustworthy ML&lt;/a&gt; by reading our &lt;a href="https://arxiv.org/pdf/2103.00964.pdf"&gt;publication&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cs.ru.nl/~aserban/"&gt;&lt;em&gt;Alex Serban&lt;/em&gt;&lt;/a&gt; &lt;em&gt;is PhD candidate at Radboud University and guest at the Leiden Institute of Advanced Computer Science.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jstvssr.github.io/"&gt;&lt;em&gt;Joost Visser&lt;/em&gt;&lt;/a&gt; &lt;em&gt;is professor of Software and Data Science at Leiden University.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In the&lt;/em&gt; &lt;a href="https://se-ml.github.io/"&gt;&lt;em&gt;SE4ML project&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, we investigate how software engineering principles and practices need to be adapted or complemented for software systems that incorporate ML components.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you are member of a team that builds software systems with ML components, you can contribute to our research by&lt;/em&gt; &lt;a href="https://se-ml.github.io/survey"&gt;&lt;strong&gt;&lt;em&gt;taking our 10-minute survey&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;em&gt;on ML engineering practices.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>mlengineering</category>
      <category>softwareengineering</category>
      <category>trustworthyai</category>
      <category>practice</category>
    </item>
    <item>
      <title>Software engineering best practices for machine learning</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Wed, 05 Feb 2020 11:10:22 +0000</pubDate>
      <link>https://forem.com/jstvssr/software-engineering-best-practices-for-machine-learning-mm4</link>
      <guid>https://forem.com/jstvssr/software-engineering-best-practices-for-machine-learning-mm4</guid>
      <description>&lt;h4&gt;
  
  
  An awesome 😎 reading list
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vMCrANX9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AdtGn5DE4Z4m-JTWnjCYI0Q.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vMCrANX9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AdtGn5DE4Z4m-JTWnjCYI0Q.jpeg" alt=""&gt;&lt;/a&gt;The awesome &lt;a href="https://www.livrarialello.pt/en-us/"&gt;Livraria Lello&lt;/a&gt; in Porto. Photo by &lt;a href="https://unsplash.com/@ivoafr?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Ivo Rainha&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;An ever-increasing number of organizations are developing applications that involve machine learning components. The complexity and diversity of these applications calls for software engineering techniques to ensure that they are built in a &lt;strong&gt;robust&lt;/strong&gt; and &lt;strong&gt;future-proof&lt;/strong&gt; manner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Do traditional software engineering practices apply equally to the development of applications with ML components, or do these practices need to be adapted to cater for particular ML characteristics?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To investigate this question, we have reviewed both scientific literature and popular publications to identify software engineering best practices that are recommended or used by teams that develop machine learning applications.&lt;/p&gt;

&lt;h4&gt;
  
  
  Awesome literature
&lt;/h4&gt;

&lt;p&gt;Before diving into the best practices that we identified, let me share some early observations about the literature we collected. For more details, you can take a look at the &lt;a href="https://github.com/se-ml/awesome-seml/"&gt;awesome reading list&lt;/a&gt; that we compiled.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Even though the surge of interest in machine learning started relatively recently, there is already a large number of articles, blogs, white papers, etc. readily available. Out of everything we encountered, we selected close to 40 articles to include on our recommended reading list.&lt;/li&gt;
&lt;li&gt;Very few articles cover the entire lifecycle of developing and deploying machine learning applications. Only 3 qualified for our category of &lt;strong&gt;Broad Overviews&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XnZ3CpW3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9gXzSXgOxTiAMvFVvoftIA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XnZ3CpW3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9gXzSXgOxTiAMvFVvoftIA.png" alt=""&gt;&lt;/a&gt;Categories of literature on Software Engineering for Machine Learning applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The scientific literature on the topic of software engineering practices for machine learning is still fairly limited. Only about half of our recommended readings are scientific articles.&lt;/li&gt;
&lt;li&gt;Among authors, there is a lot of variation in how they describe the development process of applications with ML components. There seems to be no clear consensus on the names of steps in the process and the boundaries between them. That said, some broad categories of activities can be recognized. We divided the selected literature into the categories of (1) &lt;strong&gt;Data Management&lt;/strong&gt; , (2) &lt;strong&gt;Model Training&lt;/strong&gt; , and (3) &lt;strong&gt;Deployment and Operation&lt;/strong&gt; , depending on the activities in their scope.&lt;/li&gt;
&lt;li&gt;Additionally, we found valuable articles on how to organize teams and projects involved in development of ML applications. We grouped those into the category of &lt;strong&gt;Social Aspects&lt;/strong&gt;. So far, we identified only one scientific article for that category.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Best practices
&lt;/h4&gt;

&lt;p&gt;Throughout the collected literature, we identified about 40 best practices. These concern for instance data versioning, feature testing, model deployment, and model performance measurement.&lt;/p&gt;

&lt;p&gt;We are currently in the course of creating clear descriptions of these best practices, documenting their literature sources, and organizing them into development process stages.&lt;/p&gt;

&lt;p&gt;We are also investigating to what extent these best practices are actually adopted by practitioners. For this purpose, we are engaging with practitioners through interviews as well as an &lt;a href="https://leidenuniv.eu.qualtrics.com/jfe/form/SV_cJhJOkx3CIm8sEB"&gt;&lt;strong&gt;online survey&lt;/strong&gt;&lt;/a&gt;. This will allow us to measure adoption, but also to identify common challenges for practitioners and researchers in the field.&lt;/p&gt;

&lt;h4&gt;
  
  
  Help us
&lt;/h4&gt;

&lt;p&gt;If you are involved in developing a machine learning application, you can help us by &lt;a href="https://leidenuniv.eu.qualtrics.com/jfe/form/SV_cJhJOkx3CIm8sEB"&gt;&lt;strong&gt;taking the survey&lt;/strong&gt;&lt;/a&gt; and inviting your colleagues and friends to do the same.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://leidenuniv.eu.qualtrics.com/jfe/form/SV_cJhJOkx3CIm8sEB"&gt;Take the 10-minute survey!&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As our research progresses, we will be sharing our results right &lt;a href="https://se-ml.github.io/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Joost Visser is professor of Software and Data Science at Leiden University. Previously, Joost held various leadership positions at the Software Improvement Group. He is the author of numerous publications on software quality and related topics.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Joint work with&lt;/em&gt; &lt;a href="https://cs.ru.nl/~aserban/"&gt;&lt;em&gt;Alex Serban&lt;/em&gt;&lt;/a&gt;&lt;em&gt;,&lt;/em&gt; &lt;a href="http://ada.liacs.nl/members/#Holger"&gt;&lt;em&gt;Holger Hoos&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, and&lt;/em&gt; &lt;a href="http://liacs.leidenuniv.nl/~blomkvander/"&gt;&lt;em&gt;Koen van der Blom&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://leidenuniv.eu.qualtrics.com/jfe/form/SV_cJhJOkx3CIm8sEB"&gt;Survey SE for ML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SE-ML/awesome-seml"&gt;SE-ML/awesome-seml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SE-ML"&gt;Software Engineering for Machine Learning&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>machinelearning</category>
      <category>softwareengineering</category>
      <category>deeplearning</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Are we getting better at software development?</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Thu, 03 May 2018 14:06:31 +0000</pubDate>
      <link>https://forem.com/jstvssr/are-we-getting-better-at-software-development-4gc0</link>
      <guid>https://forem.com/jstvssr/are-we-getting-better-at-software-development-4gc0</guid>
      <description>&lt;h4&gt;
  
  
  Our benchmark of development best practices shows piece-meal improvement
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F480%2F1%2A21nZVyitOSukejh1cuug_Q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F480%2F1%2A21nZVyitOSukejh1cuug_Q.gif"&gt;&lt;/a&gt;Following best practices or typing away blindly?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment automation&lt;/strong&gt; is quickly gaining ground. &lt;strong&gt;Backlog&lt;/strong&gt;  &lt;strong&gt;grooming&lt;/strong&gt; is being perfected further. &lt;strong&gt;Code quality control and automated testing&lt;/strong&gt; are improving, but still not fully adopted by most teams. These are just 3 of the lessons we learned from the yearly re-calibration of our development best practices benchmark.&lt;/p&gt;

&lt;p&gt;Read on for some interesting &lt;strong&gt;stats&lt;/strong&gt; and what they tell us about where software development is heading. Bonus at the end: a quick &lt;strong&gt;self-assessment&lt;/strong&gt; to benchmark your own team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are development best practices?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For over 15 years, my colleagues and I at the &lt;a href="https://www.sig.eu/" rel="noopener noreferrer"&gt;Software Improvement Group&lt;/a&gt; (SIG) have been in the business of evaluating the quality of code, architecture, and development practices for our customers.&lt;/p&gt;

&lt;p&gt;We started out with just giving an expert judgement, based on what we observed and what our own software-development gut told us.&lt;/p&gt;

&lt;p&gt;As we collected more observations and gained more experience, we decided to whip out our scientific skills (🎓) and build a structured evaluation model. The model collects a series of checks on which development practices are applied by a given team, but also sets thresholds for when teams are applying those practices fully, partially, or not at all. We have now used this model for a number of years to provide teams with objective feedback and comparisons against peers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2APWcz9eQ3Wx-WTV-LYL5TmA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2APWcz9eQ3Wx-WTV-LYL5TmA.png"&gt;&lt;/a&gt;Ten best practices for effective software development. &lt;em&gt;We described our structured evaluation model for software development best practices at length in the &lt;/em&gt;&lt;a href="http://twitter.com/OReillyMedia" rel="noopener noreferrer"&gt;@OReillyMedia&lt;/a&gt;&lt;em&gt; book “Building Software Teams”.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Annual updates of the evaluation model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;About once per year, we update our benchmark repository with the observations and evaluations we have collected throughout the past year and use this additional data to adjust the model.&lt;/p&gt;

&lt;p&gt;This annual update is also an excellent moment to study the data and look for trends. &lt;strong&gt;&lt;em&gt;Are we getting better at software development?&lt;/em&gt;&lt;/strong&gt; We just finished the latest calibration, and here is what we learned about trends in development best practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #1: More teams apply deployment automation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We measure the practice of deployment automation by looking at whether teams have a deployment process in place that is quick, repeatable, and preferably fully automated.&lt;/p&gt;

&lt;p&gt;For example, a team that deploys each new release with a single push of a button would receive a perfect score on this practice, codified as &lt;em&gt;fully applied&lt;/em&gt;. But a team that needs to go through a limited number of well-documented manual steps would be scored as &lt;em&gt;partially applied&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F455%2F1%2Ay_7Ob43UOH7L9JOyvwNy0Q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F455%2F1%2Ay_7Ob43UOH7L9JOyvwNy0Q.gif"&gt;&lt;/a&gt;More teams fully apply deployment automation (43%, was 30%) and fewer teams do not apply deployment automation at all (11%, was 26%).&lt;/p&gt;

&lt;p&gt;As the chart shows, more teams are applying deployment automation practices fully (43%, was 30%) and fewer teams do not apply deployment automation at all (11%, was 26%).&lt;/p&gt;

&lt;p&gt;This is a significant positive trend that is mirrored by the trends in &lt;strong&gt;continuous integration&lt;/strong&gt; (automatic compilation and testing after each change) and &lt;strong&gt;continuous delivery&lt;/strong&gt; (automatic deployment after each change), as shown in the following charts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2AoZpk7WO6OzbbMQFKp4YPFg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2AoZpk7WO6OzbbMQFKp4YPFg.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2Amx1EQUCaMpxK9ScOd6omeQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2Amx1EQUCaMpxK9ScOd6omeQ.gif"&gt;&lt;/a&gt;Full or partial adoption of continuous integration (currently 68%) has significantly improved, but still lags behind compared to deployment automation (currently 89%). For continuous delivery, adoption has also improved significantly, but still has a long way to go (currently 29%).&lt;/p&gt;

&lt;p&gt;Though the trends for these two practices are equally positive, their adoption still lags behind. And especially for continuous delivery, the great majority of teams (and the organisations of which they are part) still have a long way to go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #2: Almost all teams groom their backlogs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2AkRqcwa9lrlxL0CdCt7g3xQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2AkRqcwa9lrlxL0CdCt7g3xQ.gif"&gt;&lt;/a&gt;Nearly all teams (95%, was 92%) maintain product and sprint backlogs and a significantly larger portion of teams applies this best practice fully (80%, was 71%).&lt;/p&gt;

&lt;p&gt;The best practice of backlog grooming already enjoyed high adoption, with 71% of the teams diligently maintaining both Product and Sprint backlogs, and 22% doing so at least partially. As teams perfected their backlog grooming, full adoption increased to 80%. Only a small percentage of teams (5%, down from 8%) does not do any backlog grooming at all.&lt;/p&gt;

&lt;p&gt;In fact, most Agile-Scrum best practices that we assess showed improvement, or stable high adoption. With one small exception:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2AkpG3rmu53BCeq-Uny6JULw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2AkpG3rmu53BCeq-Uny6JULw.gif"&gt;&lt;/a&gt;More teams do not stick to the discipline of holding all meetings prescribed by Scrum (15%, up from 11%).&lt;/p&gt;

&lt;p&gt;As the chart shows, fewer teams seem to stick to the discipline of holding meetings prescribed by Scrum (planning, daily standup, review, retrospective). This may not be a bad thing &lt;em&gt;per se&lt;/em&gt;, as more experienced teams are encouraged to adapt their meeting rhythms to their own needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #3: Code quality control and testing are improving&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F455%2F1%2AmBCkooqSLlkmKAl1zms6uw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F455%2F1%2AmBCkooqSLlkmKAl1zms6uw.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2AQymvdFn9WrevkmouU2h5LQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F456%2F1%2AQymvdFn9WrevkmouU2h5LQ.gif"&gt;&lt;/a&gt;Fewer teams are failing to enforce consistent code quality standards (20%, down from 25%). Fewer teams fail to run automated test at each commit (41%, down from 48%).&lt;/p&gt;

&lt;p&gt;Quality control is an essential part of professional software development. Nevertheless, the best practices of code quality control and automated testing are still only fully applied by a minority of the teams.&lt;/p&gt;

&lt;p&gt;To assess code quality control, we observe whether a team works with clear coding standards, systematically reviews code (against these standards and against principles of good design), and whether automated code quality checks are performed. Full adoption of code quality control has somewhat increased (31%, up from 23%), but &lt;strong&gt;still 20% of teams are producing code without adequate quality control in place&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To assess testing practices, we observe whether teams have an automated regression test suite that is being executed consistently after each change. Full adoption of this practice is increasing (33%, up from 29%). &lt;strong&gt;The percentage of teams that change their code without proper regression testing is declining rapidly but is still a staggering 31%&lt;/strong&gt; (down from 48%).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting better?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So our question: &lt;strong&gt;&lt;em&gt;Are we getting better at software development?&lt;/em&gt;&lt;/strong&gt; can be answered: &lt;strong&gt;&lt;em&gt;Yes, but at a modest pace.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For some practices, the needle doesn’t seem to have moved too much over the past year (e.g. documenting just enough, managing third-party components, using SMART requirements and goal-oriented metrics). I won’t bore you with the flat-lining charts.&lt;/p&gt;

&lt;p&gt;We do see significant progress on a number of practices, especially deployment automation, continuous integration, code quality control, and automated testing. This is incredibly good news!&lt;/p&gt;

&lt;p&gt;But we’re not there yet. Personally, I’m a bit shocked that &lt;strong&gt;less than 1 in 3 software development teams follow quality and testing best practices,&lt;/strong&gt; since adopting these best practices can bring immediate benefits with limited effort.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Less than 1 in 3 software development teams follow quality and testing best practices&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;What can you do?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Assess your own team:&lt;/strong&gt; If you’d like to learn more or would like to have your team assessed by us, drop me a line. To do a quick self-assessment, you can take &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfLy4HwxoWpC3TKqsmxvI5JIGzPwWgvJb_X_RylioGsWF3pIQ/viewform?usp=sf_link" rel="noopener noreferrer"&gt;this survey&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay up to date on software quality trends&lt;/strong&gt; : If you are interested in learning more about longer-term trends of more software quality aspects, you are in luck. A 10-year retrospective of software quality by SIG is forthcoming. Follow me here on Medium or on twitter if you want to be notified when it comes out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/jstvssr" rel="noopener noreferrer"&gt;&lt;em&gt;Joost Visser&lt;/em&gt;&lt;/a&gt; &lt;em&gt;is CTO at the&lt;/em&gt; &lt;a href="https://www.sig.eu/" rel="noopener noreferrer"&gt;&lt;em&gt;Software Improvement Group&lt;/em&gt;&lt;/a&gt; &lt;em&gt;(SIG), Professor of Large-scale Software Systems at Radboud University, author of O’Reilly books&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Building Maintainable Software&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Building Software Teams&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;, and leading the&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Better Code Hub&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;team at SIG.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href="https://medium.com/u/49e805b994b5" rel="noopener noreferrer"&gt;Lodewijk Bergmans&lt;/a&gt; for crunching and charting data!&lt;/p&gt;




</description>
      <category>testing</category>
      <category>devops</category>
      <category>codequality</category>
      <category>agile</category>
    </item>
    <item>
      <title>Writing quality code under time pressure?</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Thu, 12 Apr 2018 10:59:51 +0000</pubDate>
      <link>https://forem.com/jstvssr/writing-quality-code-under-time-pressure-1a9i</link>
      <guid>https://forem.com/jstvssr/writing-quality-code-under-time-pressure-1a9i</guid>
      <description>&lt;h4&gt;
  
  
  These hackathon teams prove it can be done
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A7nc5KOHc3S2gtvX2VOiRaQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A7nc5KOHc3S2gtvX2VOiRaQ.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last weekend 63 teams gathered in the old Sugar Factory in the Dutch city of Groningen for &lt;a href="https://blockchaingers.org/p/2018-edition" rel="noopener noreferrer"&gt;the world’s largest Blockchain hackathon&lt;/a&gt;. Here is what we learned from these teams about writing high-quality code under time pressure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality under pressure?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Anyone can code. There are no formal entry criteria. An inquisitive mind and a laptop is all you need.&lt;/p&gt;

&lt;p&gt;But writing &lt;strong&gt;quality code&lt;/strong&gt; can be hard. Each programming problem can be solved in many different ways, some clean and straightforward, many muddled and messy. To turn an initial working solution into an understandable, adaptable, testable, reusable nugget of code takes time and dedication.&lt;/p&gt;

&lt;p&gt;But most programming happens under time pressure. Pressure to ship a feature, pressure to squash a bug. Users, clients, testers, product owners, and team mates are waiting for you to close your ticket and move on.&lt;/p&gt;

&lt;p&gt;And with the clock ticking, most teams find themselves compromising on quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compromising on quality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When compromising on quality is a conscious decision, we may call it &lt;em&gt;“technical debt”&lt;/em&gt;: taking out a loan to be paid back through future refactorings.&lt;/p&gt;

&lt;p&gt;Conscious or not, when we compromise on code quality, we rarely come back at a later stage to mend our ways. Rather, we double down. Struggling to understand existing code, we add new code that is even messier. The &lt;a href="https://blog.codinghorror.com/the-broken-window-theory/" rel="noopener noreferrer"&gt;“broken-window syndrome”&lt;/a&gt; also applies to software.&lt;/p&gt;

&lt;p&gt;And so begins a vicious cycle. Once quality decreases beyond a tipping point, it becomes infeasible to recover. No time, no budget, no support for a prolonged feature-freeze to allow complex, multi-sprint refactorings.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Yes. I hold that once we slack on quality, we’ll never get it all the way back. We’ll be slower forever by some amount.” — &lt;a href="https://ronjeffries.com/articles/015-11/tech-debt/" rel="noopener noreferrer"&gt;Ron Jeffries&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the end, coding (too) fast is self-defeating. Lower quality code is harder to maintain and extend. Bugs take longer to find and solve, and often re-appear. Adding or changing a feature becomes difficult and error-prone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Can we maintain speed AND quality?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. There is a way to code fast without compromising quality. In fact, the only way to code at a sustainable speed is &lt;strong&gt;by&lt;/strong&gt;  &lt;strong&gt;not compromising&lt;/strong&gt; on quality. Here are the essential ingredients for doing just that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A definition of done for code quality — a set of clear guidelines that the team embraces to decide when code is of high enough quality to merge and move on. We defined 10 such guidelines in the O’Reilly book &lt;a href="http://shop.oreilly.com/product/0636920049159.do" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;em&gt;Building Maintainable Software&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;An immediate feedback mechanism that determines whether a piece of code conforms to the guidelines. And provides us with actionable information on how to quickly regain compliance. We created such a feedback mechanism as a GitHub integration called &lt;a href="https://www.sig.eu/better-code-hub/" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;em&gt;Better Code Hub&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With these elements in place, quality deficits can be flagged as they are introduced and nipped in the bud. A tiny investment in quality at each commit that pays back 100-fold in all the commits that come after. A drip of oil to keep the machine spinning without friction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Quality code at the world’s largest Blockchain hackathon&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When it comes to coding, the ultimate pressure cooker is a hackathon. Build a working piece of software within a day or two. You are on the clock. You are inventing as you go. Ideas are raw, teams just met, solutions are still unexplored.&lt;/p&gt;

&lt;p&gt;There is a huge temptation to just slap some code together without ever looking back.&lt;/p&gt;

&lt;p&gt;So, what better opportunity than &lt;strong&gt;the world’s largest Blockchain hackathon,&lt;/strong&gt; to find out whether quality code can be produced under the pressure of time. Last weekend 63 teams gathered in the old Sugar Factory in the Dutch city of Groningen for the &lt;a href="https://blockchaingers.org/p/2018-edition" rel="noopener noreferrer"&gt;Blockchaingers Hackathon 2018&lt;/a&gt;. Coding started at noon on Friday and ended 48 hours later at noon on Sunday. A competition among teams, a race against the clock, an intense struggle of each developer with the complexities of mind and machine.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“When coding for the future, write future-proof code”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Supporting quality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is what we did to support the teams in producing high-quality code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before the Hackathon started, we gave the teams a &lt;strong&gt;1-hour Masterclass&lt;/strong&gt; on code quality, explaining the relevance, introducing basic concepts, presenting the &lt;strong&gt;10 guidelines for writing future-proof code&lt;/strong&gt; from &lt;em&gt;Building Maintainable Software&lt;/em&gt;, and showing them how to use Better Code Hub to keep an eye on compliance with those guidelines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AqW9_HEIJ_AQ24pg9BTrb1A.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AqW9_HEIJ_AQ24pg9BTrb1A.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AqjEo-NHzdHHj4U04fx2ikA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AqjEo-NHzdHHj4U04fx2ikA.jpeg"&gt;&lt;/a&gt;Each push and pull request is checked by &lt;strong&gt;Better Code Hub&lt;/strong&gt; against the 10 guidelines for writing future-proof code from &lt;strong&gt;Building Maintainable Software&lt;/strong&gt;. Feedback is provided in the GitHub conversation flow. When quality has decreased, click-through to detailed feedback per guidelines for concrete pointers on how to improve.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;During the Hackathon, Better Code Hub provided feedback about the &lt;strong&gt;impact on the guidelines&lt;/strong&gt; each time code was changed. In all, such feedback was given on about 4000 contributions. The current scores of all teams were displayed on a huge screen for all to see. Also, &lt;strong&gt;code-quality Jedis&lt;/strong&gt; were present to assist the teams in person or through Slack with activating Better Code Hub, asking questions about its usage, and sparring on refactorings, design patterns, testing approaches, or any other topic related to software quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Av53qYj1zRsW7ci2KJYJqBQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Av53qYj1zRsW7ci2KJYJqBQ.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F838%2F1%2A-FrdvA1xhi3QyVkFRizKMg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F838%2F1%2A-FrdvA1xhi3QyVkFRizKMg.png"&gt;&lt;/a&gt;The current code quality scores for all teams were displayed as GitHub badges on a central scoreboard for all to see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality results&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So now the “Stop Coding!” alert has sounded, the winners have been awarded, the Hackathon is over, and the dust has settled. What was achieved in terms of code quality?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;19 out of 63 teams delivered a prototype that scored 10 out of 10. Wow! These teams prove that delivering high-quality code under intense time-pressure is possible!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F925%2F1%2AEQI3SMFZ6g4aAakTgoZIaQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F925%2F1%2AEQI3SMFZ6g4aAakTgoZIaQ.png"&gt;&lt;/a&gt;19 out of 63 teams (30%) delivered a prototype that scored 10 out of 10, proving that writing high-quality code under time pressure is possible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;During the hackathon, many teams used the feedback from Better Code Hub, not only to sustain their initial level of quality, but to make quality improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AnVQeXnq4uSkDEh5Hr8AUEA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AnVQeXnq4uSkDEh5Hr8AUEA.png"&gt;&lt;/a&gt;During the 48-hour hackathon, many teams were able to raise their scores above their initial level.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delivering quality code is fun and rewarding. Look at how these teams show off their scores on their Impact canvasses!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2At0eR54Q7PwZkiuzt0Pu4jg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2At0eR54Q7PwZkiuzt0Pu4jg.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2ABqTnjS2qDhjWXURNhLAigA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2ABqTnjS2qDhjWXURNhLAigA.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A8zWvtYHuQCBH2rn8mAWm8A.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A8zWvtYHuQCBH2rn8mAWm8A.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AUnAWibVsmd3lzVoLz4ZOgA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AUnAWibVsmd3lzVoLz4ZOgA.jpeg"&gt;&lt;/a&gt;Some of the Impact Canvases showing Better Code Hub scores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Lessons&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So here are a couple of important lessons that I learned from supporting the Blockchaingers Hackathon with Better Code Hub.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Code quality control does not need to be disruptive&lt;/em&gt; — The feedback that Better Code Hub gives to developers is concise and to the point, and localised close at hand in the GitHub conversation flow. When a green checkmark appears, feel free to move on to your next contribution. When a red cross appears, dive in to get clear pointers on what to improve before moving on.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Code quality control does not slow you down, but speeds you up&lt;/em&gt; — By acting immediately on the piece-meal feedback that Better Code Hub provides, rather than waiting for running into bigger problems later, minimal effort is spent on keeping the code base clean. This effort pays back on every subsequent contribution.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Setting and achieving a clear quality goal is rewarding and stimulating&lt;/em&gt; — When the goal is achievable, and progress is observable by all, the team gets loads of positive energy out of quality control.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;High-quality code provides a solid basis for post-hackathon acceleration&lt;/em&gt; — While some hackathon teams disband and abandon their prototypes, many use the hackathon as a spring-board for a new venture with a new product. High-quality code provides a head start in the right direction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Accelerate towards funding&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Based on code quality scores as well as the overall design quality of the prototypes, our Jedis selected the 7 hackathon teams that did outstanding work on non-functional quality aspects. Security, performance, reliability, maintainability, and whether Blockchain technology was applied in a sensible, future-proof way.&lt;/p&gt;

&lt;p&gt;These winning teams were awarded the &lt;strong&gt;&lt;em&gt;SIG Investor Readiness Workshop&lt;/em&gt;&lt;/strong&gt; , where we will help the teams prepare their code bases for future funding rounds. Investors are increasingly paying attention to software quality in the &lt;em&gt;due diligence phase&lt;/em&gt; of acquisitions. We know, because the SIG Transaction Services team perform so-called &lt;a href="https://www.sig.eu/it-due-diligence/" rel="noopener noreferrer"&gt;IT Due Diligence&lt;/a&gt; investigations for investors on a regular basis. In the workshop we help teams to be prepared for that moment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AM-IY3OnkYMIddABsKG8eFg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AM-IY3OnkYMIddABsKG8eFg.png"&gt;&lt;/a&gt;The 7 teams that built prototypes with outstanding software quality were awarded with the SIG Investor Readiness Workshop. Great job!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are you &lt;strong&gt;organising a hackathon?&lt;/strong&gt;  — Contact me to discuss how to support the teams with code quality.&lt;/li&gt;
&lt;li&gt;Are you a &lt;strong&gt;startup?&lt;/strong&gt;  — Check out the Better Code Hub &lt;a href="https://gitpitch.com/software-improvement-group/startup-pack#/" rel="noopener noreferrer"&gt;&lt;strong&gt;Starter Pack&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Are you investing in a software-intensive company? — Get in touch with my colleagues at the &lt;strong&gt;SIG Transaction Services&lt;/strong&gt; team for an &lt;a href="https://www.sig.eu/it-due-diligence/" rel="noopener noreferrer"&gt;&lt;strong&gt;IT Due Diligence&lt;/strong&gt;&lt;/a&gt; investigation.&lt;/li&gt;
&lt;li&gt;Are you a CTO or CIO who wants his software development teams to go fast, but sustainably so? — Consider empowering them with &lt;a href="https://www.sig.eu/better-code-hub/" rel="noopener noreferrer"&gt;&lt;strong&gt;Better Code Hub&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/jstvssr" rel="noopener noreferrer"&gt;&lt;em&gt;Joost Visser&lt;/em&gt;&lt;/a&gt; &lt;em&gt;is CTO at the&lt;/em&gt; &lt;a href="https://www.sig.eu/" rel="noopener noreferrer"&gt;&lt;em&gt;Software Improvement Group&lt;/em&gt;&lt;/a&gt; &lt;em&gt;(SIG), Professor of Large-scale Software Systems at Radboud University, author of O’Reilly books&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Building Maintainable Software&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Building Software Teams&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;, and leading the&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Better Code Hub&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;team at SIG.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/marketplace/better-code-hub" rel="noopener noreferrer"&gt;Better Code Hub - GitHub Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sig.eu/it-due-diligence/" rel="noopener noreferrer"&gt;IT Due Diligence - Software Improvement Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://gitpitch.com/software-improvement-group/startup-pack#/" rel="noopener noreferrer"&gt;Better Code Hub - Startup Pack&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://shop.oreilly.com/product/0636920049159.do" rel="noopener noreferrer"&gt;Building Maintainable Software, Java Edition&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>coding</category>
      <category>codequality</category>
      <category>blockchain</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Constraints that drive creativity</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Wed, 20 Dec 2017 09:39:32 +0000</pubDate>
      <link>https://forem.com/jstvssr/constraints-that-drive-creativity-2d8p</link>
      <guid>https://forem.com/jstvssr/constraints-that-drive-creativity-2d8p</guid>
      <description>&lt;h4&gt;
  
  
  A different code quality philosophy
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ndTNl7BO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AcsU2lnqC18RrziVSmOy_rQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ndTNl7BO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AcsU2lnqC18RrziVSmOy_rQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Should you measure and control code quality? According to a &lt;a href="https://www.sig.eu/insight/improving-code-quality/"&gt;poll&lt;/a&gt; conducted by O’Reilly Media and my colleagues at the &lt;a href="https://www.sig.eu/"&gt;Software Improvement Group&lt;/a&gt;, virtually all developers say YES! Here’s a number of compelling reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Happiness:&lt;/strong&gt; Better code and happy developers go together. It’s more fun to work on code that is good. In fact, &lt;em&gt;bad&lt;/em&gt; code quality and coding practice were &lt;a href="https://t.co/YO2Y0MHXuD"&gt;identified&lt;/a&gt; as the number 3 cause of developer _un_happiness. In case developer happiness is not sufficient as an intrinsic reason, think of the increased productivity and retention that will follow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GOENdHsc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/727/1%2AStM338smlSqqMKnAtlUh3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GOENdHsc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/727/1%2AStM338smlSqqMKnAtlUh3w.png" alt=""&gt;&lt;/a&gt;From &lt;a href="https://t.co/YO2Y0MHXuD"&gt;“On the unhappiness of software developers”&lt;/a&gt; by Daniel Graziotin, Fabian Fagerholm, Xiaofeng Wang, and Pekka Abrahamsson published and presented at the EASE 2017 conference.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt; : Good code is easier to understand, easier to adapt, easier to test, and easier to reuse. By definition. Quickly write up some bad code now, and fixing bugs or adding features will take up more time in future. Or in other words: &lt;a href="https://twitter.com/brianm/status/763442655632224256"&gt;“Current development speed is a function of past development quality”&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--HDzZe_dB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/655415689180680192/dqFaRFj0_normal.jpg" alt="Brian McCallister profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Brian McCallister
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @brianm
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8bbACBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-99c56e7c338b4d5c17d78f658882ddf18b0bbde5b3f42f84e7964689e7e8fb15.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Current development speed is a function of past development quality.
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      18:31 PM - 10 Aug 2016
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=763442655632224256" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=763442655632224256" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      858
      &lt;a href="https://twitter.com/intent/like?tweet_id=763442655632224256" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      685
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agility&lt;/strong&gt; : Being agile in software development is not just about processes and best practices, but also about making frequent changes to your code. To accommodate and ship the next feature. Or to respond to changing requirements. Or because you learned how to express your intentions better. High-quality code allows you to make these changes frequently and effortlessly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User satisfaction&lt;/strong&gt; : When developers are happy, fast, and agile, they can build the best possible products. With the functionality, performance, reliability, and other quality characteristics that you users expect and appreciate. So ultimately, better code means better business.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Most teams do not properly control code quality
&lt;/h4&gt;

&lt;p&gt;So code quality brings compelling benefits. But now the shocker. &lt;strong&gt;Not all professional software development teams actually measure and control code quality in a professional manner.&lt;/strong&gt; In fact, when assessing software development practices across many organisations over the past several years, we found that about 83% of the teams do not control code quality at all or only do so partially.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q9ygbyh---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/296/1%2A03Zip-TS7UwJEWeH9qMwCg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q9ygbyh---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/296/1%2A03Zip-TS7UwJEWeH9qMwCg.png" alt=""&gt;&lt;/a&gt;From “Building Software Teams” (2016)&lt;/p&gt;

&lt;h4&gt;
  
  
  Why not?
&lt;/h4&gt;

&lt;p&gt;What are the main reasons cited for not applying code quality control? What is wrong with the tools that are available for this?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;False positives and lack of actionable recommendations:&lt;/strong&gt; Unfortunately, many code quality tools flood their users with a large number of violation alerts of which only a small percentage is &lt;em&gt;valid&lt;/em&gt; and &lt;em&gt;actionable&lt;/em&gt; &lt;strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;/strong&gt; As a result, the output of these tools is often ignored.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Too costly and too difficult to configure&lt;/strong&gt; : To improve the validity and actionability of their output, some tools offer extensive configuration options. They also come with the possibility to extend the standard behaviour by supplying rules sets that are specific for your team or your product. Such configuration and customisation may seem like a cool and advanced feature. In fact, they may be advertised as unique selling points, justifying higher license fees. But in fact, it means you need to invest valuable time of senior developers in learning and maintaining these tools that were not cheap to begin with.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No clear standard, across teams and technologies&lt;/strong&gt; : Another disadvantage of customisation is that it undermines standardisation. When each team or developer uses his own set of quality rules, or even different sets of rules for different programming languages, then how can we as developers aspire to the same level of quality? Software development is a socio-technical discipline, just like driving. In traffic and in development, we can prevent accidents and travel fast, only when we all stick to the same rules of engagement.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  A different code quality philosophy
&lt;/h4&gt;

&lt;p&gt;At the &lt;a href="https://www.sig.eu/"&gt;Software Improvement Group&lt;/a&gt;, we set out to resolve this apparent conflict between the (economic) necessity of controlling code quality and the poor adoption of code quality tooling. To do so, we needed a different perspective on code quality.&lt;/p&gt;

&lt;p&gt;Our key insight was that we need to raise the level of abstraction from individual code quality violations, that are observed in particular code locations, to quality profiles that characterise an entire code base or a significant portion thereof.&lt;/p&gt;

&lt;p&gt;The simplest example of such a quality profile is &lt;strong&gt;“the percentage of code lines in methods longer than 15 lines of code”&lt;/strong&gt;. This quality profile can characterise the readability of a single class, a package, or an entire code base. A lower percentage means higher readability. While grounded in quality measurements in specific code locations (methods in this case), the profile does not pinpoint any specific location as a “violation”. Instead, we can formulate quality norms at a higher level of abstraction, for instance by demanding that said percentage does not exceed e.g.  &lt;strong&gt;20%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Quality profiles allow to set &lt;strong&gt;crisp, actionable thresholds&lt;/strong&gt; (e.g. 15) for measurements that are highly relevant to code quality (e.g. method length). But they also come with an intrinsic concept of &lt;strong&gt;tolerance&lt;/strong&gt; where a fair amount of code is allowed to surpass the threshold (e.g. 20%), but the developers retain freedom within those limits to decide which violators to accept and which to refactor.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ten Guidelines for Future-Proof Code
&lt;/h4&gt;

&lt;p&gt;Based on this philosophy, we formulated Ten Guidelines for Future-Proof Code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gjpx8o38--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AZv2L-ANCGPdIpMctuM994A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gjpx8o38--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AZv2L-ANCGPdIpMctuM994A.png" alt=""&gt;&lt;/a&gt;Together, the ten guidelines for writing future-proof code from &lt;a href="http://shop.oreilly.com/product/0636920049159.do"&gt;“Building Maintainable Software”&lt;/a&gt; provide a Definition of Done for code quality that is ambitious, yet achievable.&lt;/p&gt;

&lt;p&gt;Note that these are &lt;strong&gt;guidelines&lt;/strong&gt; , not &lt;strong&gt;rules&lt;/strong&gt;. A rule is binary, drawing a line between right and wrong. Compliance or violation. But a guideline merely provides direction. A guideline allows choice within a clear boundary. In software development, as in art, well chosen constraints do not limit, but &lt;strong&gt;enhance creativity.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Creativity is driven by constraints” — &lt;a href="http://communicationnation.blogspot.nl/2005/10/stuck.html"&gt;Dave Grey&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We calibrated both thresholds and tolerances in these guidelines against code analysis results from hundreds of software systems. Together the 10 guidelines provide a crisp definition of done for code quality. A definition of done that is ambitious, but not overly restrictive due to intrinsic tolerance. And we built the Better Code Hub to check those guidelines for you on your code base.&lt;/p&gt;

&lt;h4&gt;
  
  
  Better Code Hub
&lt;/h4&gt;

&lt;p&gt;The purpose of &lt;a href="https://bettercodehub.com/"&gt;Better Code Hub&lt;/a&gt; is to show that a different approach to code quality control is possible. An approach that is less cumbersome, less restrictive, and more fun. Here is what it does for you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Provide a crisp definition of done&lt;/strong&gt; , that is independent of technology, team, or product. A single standard for code quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy adoption and immediate feedback.&lt;/strong&gt; Through the GitHub Marketplace (free for open source, start-ups, and educational use) you can run Better Code Hub on your code within minutes. And by flipping one toggle, you activate feedback on each push and pull request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactoring assistance&lt;/strong&gt; : Better Code Hub tells you not only which guidelines your code does and does not comply with. It also provides you with refactoring candidates. And when you make a selection of candidate to refactor, you get a real-time prediction of how your guidelines compliance will be impacted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, if your team is not measuring and controlling code quality yet, this is the time to start. Give &lt;a href="https://bettercodehub.com/"&gt;Better Code Hub&lt;/a&gt; a try. It will be fun!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/jstvssr"&gt;&lt;em&gt;Joost Visser&lt;/em&gt;&lt;/a&gt; &lt;em&gt;is CTO at the Software Improvement Group, Professor of Large-scale Software Systems at Radboud University, and author of O’Reilly books “Building Maintainable Software” and “Building Software Teams”.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/product/0636920049159.do"&gt;Building Maintainable Software, Java Edition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/product/0636920049555.do"&gt;Building Maintainable Software, C# Edition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/product/0636920048565.do"&gt;Building Software Teams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/marketplace/better-code-hub"&gt;Better Code Hub - GitHub Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>coding</category>
      <category>softwaredevelopment</category>
      <category>developerproductivi</category>
      <category>codequality</category>
    </item>
    <item>
      <title>How a Hackathon appreciates quality code</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Wed, 08 Mar 2017 11:27:30 +0000</pubDate>
      <link>https://forem.com/jstvssr/how-a-hackathon-appreciates-quality-code</link>
      <guid>https://forem.com/jstvssr/how-a-hackathon-appreciates-quality-code</guid>
      <description>&lt;h2&gt;
  
  
  Some lessons from the world's largest Blockchain hackathon
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Image: Robin Knaapen of team DC Cicero shows off their 10 out of 10 score on code quality at the worlds largest Blockchain hackathon. Image courtesy of &lt;a href="https://twitter.com/DrentheCollege" rel="noopener noreferrer"&gt;Drenthe College&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Last weekend, &lt;a href="https://blockchainhackathon.eu/p/hackathon" rel="noopener noreferrer"&gt;the world's largest Blockchain hackathon&lt;/a&gt; took place in The Netherlands. During &lt;strong&gt;54&lt;/strong&gt; hours, &lt;strong&gt;350&lt;/strong&gt; participants, organised into &lt;strong&gt;55&lt;/strong&gt; teams, competed in &lt;strong&gt;five&lt;/strong&gt; tracks, on &lt;strong&gt;one&lt;/strong&gt; grid, and with &lt;strong&gt;zero&lt;/strong&gt; time to lose.&lt;/p&gt;

&lt;p&gt;Also, these teams took responsibility for the quality of the code they were hacking together by executing &lt;strong&gt;2000&lt;/strong&gt; code quality checks.&lt;/p&gt;

&lt;p&gt;Here is how we made those 2000 checks possible, and how we made sure they helped to accelerate the teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  An appreciative approach to judging
&lt;/h2&gt;

&lt;p&gt;The hackathon organisers decided to take what they call an “appreciative” approach to the judging process. In their words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;we will NOT have a beauty contest and judge you afterwards based on smooth sales pitches or your shiny smile&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Rather, they facilitated a holistic approach, throughout the event and beyond, in four stages: (1) support, (2) reward, (3) award, and (4) accelerate. A key instrument in this setup is the “Impact Canvas” on which the teams share the wealth of their projects on multiple dimensions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AWmMUHuDffYSy0NN9Fva8Qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AWmMUHuDffYSy0NN9Fva8Qw.png" alt="The Impact Canvas template"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Impact Canvas template. Space for sharing all dimensions of a great hackathon project. Kudos to &lt;a href="https://twitter.com/ritzotencate" rel="noopener noreferrer"&gt;Ritzo ten Cate&lt;/a&gt; for driving this approach.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Using the canvas, the teams share and discuss with supporters, Jedi, accelerators, and reporters, taking them along on their journey, engaging them, co-creating with them.&lt;/p&gt;

&lt;h2&gt;
  
  
  How about code quality?
&lt;/h2&gt;

&lt;p&gt;One of the dimensions of a great hackathon contribution is the quality of the solution, including the code. But how can teams collaborate on code quality and share their code quality achievements with others?&lt;/p&gt;

&lt;p&gt;For this, we gave them the &lt;a href="https://bettercodehub.com/" rel="noopener noreferrer"&gt;Better Code Hub&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We gave the team &lt;strong&gt;10 guidelines for building maintainable software&lt;/strong&gt;. The guidelines were presented to them in a pre-hackathon meet-up and they received copies of our O'Reilly book &lt;a href="http://shop.oreilly.com/product/0636920049159.do" rel="noopener noreferrer"&gt;&lt;em&gt;Building Maintainable Software&lt;/em&gt;&lt;/a&gt; that describes the guidelines. Together, the 10 guidelines provide a Definition of Done for code quality that is challenging, yet achievable and fun.&lt;/li&gt;
&lt;li&gt;We gave the teams &lt;strong&gt;free access to the Pro version of Better Code Hub&lt;/strong&gt;, allowing them to check their code against the 10 guidelines and giving them actionable feedback on what changes to make in the code for meeting the guidelines. Teams can head over to &lt;a href="http://www.bettercodehub.com/" rel="noopener noreferrer"&gt;www.bettercodehub.com&lt;/a&gt; to get feedback within minutes, and they can turn on Push&amp;amp;Pull support to get feedback on every commit.&lt;/li&gt;
&lt;li&gt;A team of software quality Jedi were available during the event to help teams use the Better Code Hub and for &lt;strong&gt;counseling&lt;/strong&gt; them on anything related to code quality. Which refactoring should I apply? How can I deal with dependencies on third party code? How can I make my code more testable? The code quality Jedi's have answers.&lt;/li&gt;
&lt;li&gt;Before code-freeze on the last day of the Hackathon, all teams were given the opportunity to have their code quality results &lt;strong&gt;validated&lt;/strong&gt; by the Jedi, who provided them with swag and badges and encouraged them to share their code quality score on their Impact Canvas.&lt;/li&gt;
&lt;li&gt;After the event, the teams retain access to the Pro version of Better Code Hub &lt;strong&gt;for another 12 months&lt;/strong&gt;, as well as continued support from the Jedi on anything related to code quality. The hackathon is a great learning experience for putting together a complete application, including third-party components and build pipeline, but it's only the first step towards a shippable product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what code quality looks like on some of the Impact Canvases:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F400%2F1%2AeSQPCdQAeYgVsDiLuZI7qA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F400%2F1%2AeSQPCdQAeYgVsDiLuZI7qA.jpeg" alt="Canvas1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F400%2F1%2AsIbpcQuDz5djd-WLNL-jeA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F400%2F1%2AsIbpcQuDz5djd-WLNL-jeA.jpeg" alt="Canvas1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F400%2F1%2APdEKPcjENFkdx1_rm-XZ9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F400%2F1%2APdEKPcjENFkdx1_rm-XZ9g.png" alt="Canvas2"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F600%2F1%2A5RlsEts33RS-sFZboft1iQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F600%2F1%2A5RlsEts33RS-sFZboft1iQ.png" alt="Canvas3"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F600%2F1%2AdkG4N7wFKyENDhJs95Bxfw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F600%2F1%2AdkG4N7wFKyENDhJs95Bxfw.png" alt="Canvas4"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Code quality achievements on the Impact Canvas of sevderal teams at the Dutch Blockchain Hackathon.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Digitally, teams showed off their code quality prowess with GitHub badges that were collected on a scoreboard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2APIYubrouiQLw9bIQ2-AUog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2APIYubrouiQLw9bIQ2-AUog.png" alt="Scoreboard"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Better Code Hub badges were collected on a central &lt;a href="https://dutchblockchainhackathon.github.io/" rel="noopener noreferrer"&gt;scoreboard&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  So what is the impact of code quality during a hackathon?
&lt;/h2&gt;

&lt;p&gt;We chose not to just measure code quality and feed measurement results to the jury. That would run counter to the “appreciative approach” and have the wrong effect. Instead, we empowered the participants to get code quality right, in a uniform manner, enabling them to show off their code quality achievements as one of the many dimension of their achievement. The effects are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Uniting teams:&lt;/strong&gt; with a clear definition of done for code quality, teams don't need to waste time quibbling about coding style. Also, they get to celebrate together, each time a code check shows improvement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster coding:&lt;/strong&gt; teams that build high-quality code from the start can keep up their coding speed throughout the hackathon. Also they can more easily handover code within the team. No spaghetti to get entangled in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appreciation for code:&lt;/strong&gt; Hackathons should be about code, as much as they are about learning, team work, and brilliant ideas. Making code quality easy to measure, easy to share, and easy to reward contributes to give code the visibility it deserves.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, if you are organising a Hackathon, we can recommend an appreciative approach, including an empowering approach to code quality. If you want to learn from our experiences at the Dutch Blockchain Hackathon, we are happy to help.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.linkedin.com/in/jstvssr" rel="noopener noreferrer"&gt;Joost Visser&lt;/a&gt; is CTO at the &lt;a href="https://www.sig.eu/" rel="noopener noreferrer"&gt;Software Improvement Group&lt;/a&gt;, Professor of Large-scale Software Systems at Radboud University, and author of O'Reilly books &lt;a href="http://shop.oreilly.com/product/0636920049159.do" rel="noopener noreferrer"&gt;“Building Maintainable Software”&lt;/a&gt; and &lt;a href="http://shop.oreilly.com/product/0636920048565.do" rel="noopener noreferrer"&gt;“Building Software Teams”&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>hackathons</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Why Blockchain needs Future-Proof Code</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Wed, 18 Jan 2017 10:52:04 +0000</pubDate>
      <link>https://forem.com/jstvssr/why-blockchain-needs-future-proof-code-2a6d</link>
      <guid>https://forem.com/jstvssr/why-blockchain-needs-future-proof-code-2a6d</guid>
      <description>&lt;h4&gt;
  
  
  Because our society needs solutions that are innovative &lt;em&gt;and&lt;/em&gt; sustainable.
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;I’m not a great programmer; I’m just a good programmer with great habits. — Kent Beck&amp;gt; Quality of code may not guarantee the success of a project, but it can definitively be its main, though invisible, cause of failure. — &lt;a href="https://twitter.com/mariofusco/status/806456518434582528" rel="noopener noreferrer"&gt;Mario Fusco&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The Blockchain Hackathon&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the second weekend of February, 50 teams will compete in the &lt;a href="https://blockchainhackathon.eu/" rel="noopener noreferrer"&gt;Dutch Blockchain Hackathon&lt;/a&gt;. Over a 54-hour stretch, they will unleash their creativity to build innovative blockchain-based solutions that may shape the future of our society.&lt;/p&gt;

&lt;p&gt;The teams will compete in 5 thematic tracks, vying for praise and recognition by the jury, and for €50,000 in prize money.&lt;/p&gt;

&lt;p&gt;The jury will be looking for quality, impact and contribution to the blockchain ecosystem. Teams can earn bonus points by using open standards and sharing their code through open source licenses. &lt;strong&gt;And by producing high-quality code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is code quality important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So why is code quality important in this hackathon? Are hackathons not intended to hack things together until they work? Not to produce something polished and future-proof?&lt;/p&gt;

&lt;p&gt;Well, here are some reasons code quality is not a luxury.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blockchain is based on trust.&lt;/strong&gt; Or, as Ravish Gopal explains, with Blockchain, “&lt;a href="https://medium.com/softwareimprovementgroup/blockchain-technology-do-we-trust-a-faceless-system-8cdafa7b32f3" rel="noopener noreferrer"&gt;the conventional &lt;em&gt;trusted third party&lt;/em&gt; mechanism is being replaced by software&lt;/a&gt;”. And trust requires auditability. Better code is more auditable.&lt;/li&gt;
&lt;li&gt;Innovative solutions, whether &lt;a href="https://dev.to/jstvssr/autonomously-driving-code-quality-2n10-temp-slug-5262134"&gt;built by startups&lt;/a&gt; or established organisations, must be adaptable, extensible, and transferable. Otherwise the solution will not &lt;strong&gt;outlive the startup&lt;/strong&gt; founders and/or the first team that works on it.&lt;/li&gt;
&lt;li&gt;In general, &lt;strong&gt;better code allows you to build better products&lt;/strong&gt;. Rather, as argued by Rob van der Leek, &lt;a href="https://medium.com/bettercode/lets-build-better-products-1acfba24108d" rel="noopener noreferrer"&gt;great products are not built by great individuals, but by great teams&lt;/a&gt;. And good code is both the hallmark of a great team and a necessary precondition for their successful operation as a team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, you may say, these reasons only kick in after some time, not before my hackathon is over. So let’s narrow our focus to the first 54 hours of your team’s project. Why is code quality relevant?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lunch&lt;/strong&gt; : Good code starts paying back before lunch on the first day. By that time you are no longer in your first iteration. You are modifying and enhancing the code you wrote in the morning. If it’s messy, hard to read, untested, bloated, and so forth, then you will slow down, inject defects without noticing, and lose your way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dinner&lt;/strong&gt;. Bad code makes your team hate you before dinner. The code you wrote looks weird and alien to your teammate that wants to build on it. Before adding to it, she needs to refactor. You don’t like what she does to your code. Rather than complementing each other you enter into a turf war.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;36-hours in&lt;/strong&gt;. You just had your breakthrough idea that will set you apart from the competition and impress the jury beyond belief. Except that changing your code to implement this idea seems like jumping off a cliff. Your code is a house of cards. Should you refactor, reorganise, make the required changes? Or rather start over. Time is ticking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Win&lt;/strong&gt;. You pulled it off. Your solution works, it wows the jury, and you’re are invited for the post-hackathon accelerator track. But wait! Though it works, you don’t know why or how. Some of your team members won’t hang around after the hackathon, but their code is a mystery to the others. In a way, you still come out of the event empty-handed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AOSE6kbMmyyIIW_1j7AyJaw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AOSE6kbMmyyIIW_1j7AyJaw.png"&gt;&lt;/a&gt;Why code quality matters in a Hackathon&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can code quality be measured?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Given the importance of code quality for teams to build great products, we need a shared definition of what code quality is and how it can be measured.&lt;/p&gt;

&lt;p&gt;An abstract definition of code quality can be found in the notion of &lt;em&gt;maintainability&lt;/em&gt; as provided by the ISO 25010 standard on software product quality:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;maintainability&lt;/strong&gt; = degree of effectiveness and efficiency with which a product or system can be modified by the intended maintainers, where modifications can include corrections, improvements or adaptation — ISO 25010&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We have operationalised this abstract definition in a concrete set of measurements, complete with thresholds and aggregation to a simple rating scheme (see “A practical model for measuring maintainability”, IEEE Computer Society Press, 2007).&lt;/p&gt;

&lt;p&gt;In turn, this measurement model has been the basis for 10 guidelines for the working programmer, published in &lt;em&gt;“Building Maintainable Software”&lt;/em&gt; (O’Reilly, 2016).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AQItsZ4-mG4KiR8qpZAaQBg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AQItsZ4-mG4KiR8qpZAaQBg.png"&gt;&lt;/a&gt;The 10 guidelines for writing future-proof code from “Building Maintainable Software”.&lt;/p&gt;

&lt;p&gt;At the &lt;a href="https://www.sig.eu/" rel="noopener noreferrer"&gt;Software Improvement Group&lt;/a&gt;, we have been using and improving our maintainability model over a decade to measure billions of lines of code and provide hundreds of executive clients with fact-based advice on how to manage their software projects and application portfolios.&lt;/p&gt;

&lt;p&gt;So, yes, code quality can be measured.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can you measure code quality yourself?
&lt;/h4&gt;

&lt;p&gt;Plenty of tools are available for measuring code quality. But they come with pitfalls. They often measure the wrong things by default and require intricate configuration, and they flood the developer with &lt;em&gt;false positives&lt;/em&gt;, i.e. warnings that don’t reveal any real problem (for a more detailed discussion, see my &lt;a href="https://dev.to/jstvssr/govern-and-empower--using-static-analysis-tools-successfully-2ami-temp-slug-2767040"&gt;success criteria for applying software analysis tools effectively&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;To avoid these pitfalls for developers, we have developed the &lt;a href="https://bettercodehub.com/" rel="noopener noreferrer"&gt;Better Code Hub&lt;/a&gt;. It provides developers with immediate feedback on the 10 guidelines. We designed Better Code Hub to be extremely easy to use, provide a clear definition of done, and empower teams to improve what matters.&lt;/p&gt;

&lt;p&gt;The guidelines set crips thresholds, but they also provide tolerance for the occasional outlier. As a result, the definition of done provided by Better Code Hub is challenging, yet achievable and fun.&lt;/p&gt;

&lt;h4&gt;
  
  
  Code quality at the Dutch Blockchain Hackathon
&lt;/h4&gt;

&lt;p&gt;The teams participating in the Dutch Blockchain Hackathon are stimulated and supported to innovate with high quality code. Support includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Books.&lt;/strong&gt; Free copies of &lt;em&gt;Building Maintainable Software&lt;/em&gt; will be distributed to the participants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better Code Hub.&lt;/strong&gt; The teams will get 12-month Pro access to the Better Code Hub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assistance.&lt;/strong&gt; During the event, a team of SIG consultants will help participants use the tool, and coach them on code quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jury.&lt;/strong&gt; The measurement results of Better Code Hub will be made available to the jury, allowing them to award bonus points for higher quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Is code quality relevant beyond this hackathon?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/jstvssr/software-more-and-faster-but-how-i3j-temp-slug-725952"&gt;Software is the DNA of our digital society&lt;/a&gt;. So yes, code quality is important for all of us. Competitive power and business agility depend on mastery of software.&lt;/p&gt;

&lt;p&gt;If you are not participating in the Hackathon, but you are interested in measuring and managing code quality, here are some options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you are a &lt;strong&gt;start-up&lt;/strong&gt; , we have a complimentary Pro license for Better Code Hub for you as well (conditions apply).&lt;/li&gt;
&lt;li&gt;If you are an &lt;strong&gt;open-source&lt;/strong&gt; developer, you can use the Free license on any public GitHub repository, within reasonable size limitations.&lt;/li&gt;
&lt;li&gt;If you are an &lt;strong&gt;IT director, development team lead, or similar&lt;/strong&gt; , let me know about your challenges regarding code quality, developer competencies, team empowerment, software governance, application portfolio management, etc. At the &lt;a href="https://www.sig.eu/" rel="noopener noreferrer"&gt;Software Improvement Group&lt;/a&gt;, we know what it takes to be successful in both empowering self-organising teams &lt;em&gt;and&lt;/em&gt; applying effective governance over your in-house software development, your suppliers, and your IT landscape.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/jstvssr" rel="noopener noreferrer"&gt;&lt;em&gt;Joost Visser&lt;/em&gt;&lt;/a&gt; &lt;em&gt;is CTO at the Software Improvement Group, Professor of Large-scale Software Systems at Radboud University, and author of O’Reilly books “Building Maintainable Software” and “Building Software Teams”.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/product/0636920049159.do" rel="noopener noreferrer"&gt;Building Maintainable Software, Java Edition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/product/0636920049555.do" rel="noopener noreferrer"&gt;Building Maintainable Software, C# Edition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/product/0636920048565.do" rel="noopener noreferrer"&gt;Building Software Teams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/bettercode" rel="noopener noreferrer"&gt;BetterCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blockchainhackathon.eu/" rel="noopener noreferrer"&gt;Dutch Blockchain Hackathon Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>hackathons</category>
      <category>blockchain</category>
      <category>softwaredevelopment</category>
      <category>bettercode</category>
    </item>
    <item>
      <title>Software: more and faster, but how?</title>
      <dc:creator>Joost Visser</dc:creator>
      <pubDate>Mon, 12 Dec 2016 11:12:14 +0000</pubDate>
      <link>https://forem.com/jstvssr/software-more-and-faster-but-how-3ndo</link>
      <guid>https://forem.com/jstvssr/software-more-and-faster-but-how-3ndo</guid>
      <description>&lt;h4&gt;
  
  
  Sustainable business requires mastery of software
&lt;/h4&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Software is the DNA of our information society&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;We rely on software in everything we do. Travel, payment, entertainment, health care, trade, manufacturing, education. Nowadays, nearly every human activity involves software. And, just as DNA predetermines how we interact with our environment, so does software determine how objects move and how information flows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F966%2F1%2AO7D50aJioytPgFb0DHc2vQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F966%2F1%2AO7D50aJioytPgFb0DHc2vQ.png"&gt;&lt;/a&gt;If software is the DNA of our modern information society, does it evolve autonomously or under our control? See also &lt;a href="http://www.cs.ru.nl/J.Visser/wp-content/uploads/2012/12/2012-12-06-Inaugural-address-Joost-Visser.pdf" rel="noopener noreferrer"&gt;“How does your software Measure Up? — Mastering the DNA of our information society”&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Software needs to evolve in order to survive&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The needs of users change. Platforms change. Regulations change. Software needs to adapt. Increasingly, software is the differentiator in a competitive marketplace, or a prerequisite to enter into a market in the first place. Businesses that are not able to rapidly create new software solutions or adapt existing solutions are unable to stay relevant and compete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AJVHOGMSfu66WaY_UmfDc2A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AJVHOGMSfu66WaY_UmfDc2A.png"&gt;&lt;/a&gt;Software is eating the world. And competition will eat those businesses that do not master their software.&lt;/p&gt;

&lt;h4&gt;
  
  
  Automation and ecosystems are key trends
&lt;/h4&gt;

&lt;p&gt;Software developers try to meet this need for producing more software and for evolving software faster. Two important current trends support increased &lt;em&gt;automation&lt;/em&gt; and &lt;em&gt;reuse&lt;/em&gt; in software development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Automation&lt;/strong&gt; : Modern software development teams strive to automate as much of the software development process as possible. Examples are continuous integration, automated testing and deployment, and low-code environments (check with Jeroen Heijmans for a &lt;a href="https://medium.com/softwareimprovementgroup/low-code-wave-of-the-future-or-blast-from-the-past-7fcd618371b2#.bzpsgrn4u" rel="noopener noreferrer"&gt;balanced view on Low Code trends&lt;/a&gt;). Automation helps to increase development speed, limit knowledge dissipation, and build quality into every step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystems&lt;/strong&gt; : Rather than building software systems from the ground up, modern teams increasingly create new systems by combining partial solutions from third parties. Sophisticated new functionality is created with a limited amount of code, gluing together libraries, frameworks and external web services. Open platforms unleash the creativity of partners, customers, and user communities.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Looming disruption
&lt;/h4&gt;

&lt;p&gt;As development tools and third-party components are widely available against minimal costs, &lt;strong&gt;the software marketplace becomes more and more competitive&lt;/strong&gt;. Start-ups, technology vendors, and community-driven open source initiatives frequently launch new and improved solutions that may disrupt incumbent businesses at any moment. Established businesses risk being slowed down by regulations, security requirements, technical debt, legacy code, outdated technologies, and architectural complexity, and to realise their Digital Transformation ambitions they need to plan their escape from Legacy Mountain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sig.eu/insight/webinar-escape-from-legacy-mountain/" rel="noopener noreferrer"&gt;[Webinar] Escape from Legacy Mountain - Software Improvement Group&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Two success factors for mastering software
&lt;/h4&gt;

&lt;p&gt;Organisations striving for sustainable, competitive business must &lt;strong&gt;master the creation and evolution of software&lt;/strong&gt;. Highly productive and predictable software development management relies on two success factors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Product over process&lt;/strong&gt; : Successful software management keeps a clear view of what ultimately matters most: high-quality software products. Too many organisations attempt to control software development only through process, including extensive documentation, formal methodology, decision and reporting structures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pragmatic measurement&lt;/strong&gt; : Successful software management makes effective use of meaningful measurements of both products and processes. Too many organisations rely mostly on intuition, hearsay, and untested assumptions to assess the status of their products and the effectiveness of their processes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When managers and developers have a &lt;strong&gt;clear, quantified view of the state of their software products at any moment in the software production lifecycle&lt;/strong&gt; , they are able to correct defects as they are introduced, modify designs as needed, and adapt through controlled iterations to business needs as they evolve. Measurement of all stages in the software production pipeline allows incremental improvement of the degree of automation, reuse, productivity, and technical quality. &lt;strong&gt;Sustainable business requires mastery of software.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Joost Visser is CTO at the Software Improvement Group, Professor of Large-scale Software Systems at Radboud University, and author of O’Reilly books “Building Maintainable Software” and “Building Software Teams”.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/product/0636920048565.do" rel="noopener noreferrer"&gt;Building Software Teams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shop.oreilly.com/product/0636920049159.do" rel="noopener noreferrer"&gt;Building Maintainable Software, Java Edition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>softwareengineering</category>
      <category>businesscontinuity</category>
      <category>softwaredevelopment</category>
      <category>digitaleconomy</category>
    </item>
  </channel>
</rss>
