T6 Case Problem Review

1 view
Skip to first unread message

Shari Alvine

unread,
Aug 4, 2024, 12:51:19 PM8/4/24
to ittilassu
Theusual way to achieve fast Continuous Code Reviews is through Pair Programming or Ensemble Programming. In this article, I will share a less common approach to Continuous Code Reviews using Non-Blocking Reviews.

A question I often get asked when talking about trunk-based development is: But how do you do code reviews without branches? Implying one needs branches to code review because of the ubiquitous Pull Request.


The one with the minimal impact on flow of delivery is Pair Programming or Ensemble Programming. The code is being reviewed while it is being written before being committed into mainline. Multiple pairs of eyes read the code. We have Continuous Code Review for free.


However, we never got that novice team to pair program. Not everyone feels comfortable with pairing. I respect that. This is something that should not be imposed. Also, because there are unconscious power dynamics in place that are all too often forgotten in the agile community.


We did some pair programming as a learning opportunity. My fellow coach and I sat next to a team member showing how a practice worked or how to achieve something more efficiently. But nothing more. There was, unfortunately, no continuous writing of production code in pair.


Back then, I was a fervent believer in code reviews based on the books Code Complete and Facts and Fallacies of Software Engineering. I saw reviews as a way of improving code quality. But mainly as a learning opportunity.


Given the team was novice, we decided that every single commit had to be reviewed. But I did not want to introduce a hierarchy in the team. So, we introduced peer reviewing. Everyone was going to review the code of everyone, i.e. seniors from juniors but also juniors from seniors. I was not expecting the juniors to find much, though you would be surprised. I hoped juniors would somehow learn something from reading the code from more experienced engineers. This also meant that team members would read the code from my colleague coach and myself. Also, code always had to be reviewed by someone different from the person who wrote the code.


As the team practised trunk-based development, reviews were happening on mainline after merging into mainline. But reviews were still happening on a per-feature level. The feature was the unit of work on our Kanban board. Still, the feature was not the unit of integration or software delivery as we practised true Continuous Integration and Continuous Delivery. Every commit that went successfully through all stages of the deployment pipeline could eventually go into production.


To avoid context-switching, we also decided that whenever someone finished a piece of work, before starting new work or at the start of the day, they would first check the To Review column to spot whether nothing is waiting to be code reviewed.


We can argue we run the risk of having bad-quality code in production. Yes, you are right. That is possible and that will happen. I do not see a problem over here. First, bad quality does not mean a bug. Code reviews are not there to catch bugs. For this, we have our automated tests and exploratory tests. We had team commitment that any change had to be covered by an automated test, preferably a unit test. We also had manual exploratory testing in place by a peer, different from the engineer that implemented the functionality. Lastly, we had a fair amount of static code analysis that would break the build on rule violations.


For this to work, we need team agreement every commit will be reviewed. Any issue raised during a code review had to be picked up immediately with high priority to ensure this poor quality would be removed from production as soon as possible.


The fact that non-reviewed code can be tested or deployed in production is surprisingly the most significant benefit. We do not ever block the flow of work through the value stream. We can already obtain valuable feedback from testing, and production. We do not have to wait for a reviewer, or worse the ping-pong between reviewer and reviewee, for the feature to be available for testing or deploying into production.


Now the testing part is not totally true as we also had a To Test column. The feature first had to be reviewed before it could be tested. I now realise this was sub-optimal. We could have improved this by making sure the testing did not depend on the review. It would have delivered more gains as made clear in the previous paragraph.


But there is more. Often, it happened a dreadful design came along during a review. That were moments when I wished we practised pair programming to catch these situations earlier. But then again, this was not a real problem. Testing found the feature good enough. In the meantime, it was even already delivered in production. We had all the time to redo the design. Our users already had the benefits of the feature. We could even incorporate the feedback from the user into the new design.


Whereas with blocking reviews, like Pull Requests, a redesign means a delay in delivery. With Non-Blocking Reviews we do not have that. Yet, to be honest, when I have to work with Pull Requests I frequently find myself accepting non-optimal designs to ensure the feature is delivered. But I suggest improving the design. Nevertheless, I always leave that decision to the person requesting the review to create empowerment.


We call this way of code reviewing Non-Blocking Code Reviews. I did not coin this term. In the past, I used to call this reviewing after the fact on mainline. It was only when reading Optimizing the Software development process for continuous integration and flow of work from Martin Mortensen that I came across the term Non-Blocking Code Reviews. I quite liked that term as it better describes the benefit. It does not block the flow of work. It does not block IT delivery. Ever since, I use this term to describe this way of reviewing.


Once, the team was contacted by internal auditors because we did not follow the standard way of working in the organisation. After explaining our process, the auditors had to conclude we did far more quality assessment than the standard process with even better audit tracking.


At the 2022 SoCraTes Germany unconference, I met Tomas Skogberg. He works for Auctionet. Tomas shared they practice trunk-based development for ten years. Being confronted with the same situation, Auctionet decided to implement their own code review tool, ex-remit, for Non-Blocking Reviews which is open sourced.


But, in all truth, we do not necessarily need any tooling for running code reviews. An engineer can as well guide the team through the code and have a discussion. Though, if we need an audit-trail of reviews, tooling will help.


The site is secure.

The ensures that you are connecting to the official website and that any information you provide is encrypted and transmitted securely.


A growing body of literature is associating excessive and addictive use of digital media with physical, psychological, social and neurological adverse consequences. Research is focusing more on mobile devices use, and studies suggest that duration, content, after-dark-use, media type and the number of devices are key components determining screen time effects. Physical health effects: excessive screen time is associated with poor sleep and risk factors for cardiovascular diseases such as high blood pressure, obesity, low HDL cholesterol, poor stress regulation (high sympathetic arousal and cortisol dysregulation), and Insulin Resistance. Other physical health consequences include impaired vision and reduced bone density. Psychological effects: internalizing and externalizing behavior is related to poor sleep. Depressive symptoms and suicidal are associated to screen time induced poor sleep, digital device night use, and mobile phone dependency. ADHD-related behavior was linked to sleep problems, overall screen time, and violent and fast-paced content which activates dopamine and the reward pathways. Early and prolonged exposure to violent content is also linked to risk for antisocial behavior and decreased prosocial behavior. Psychoneurological effects: addictive screen time use decreases social coping and involves craving behavior which resembles substance dependence behavior. Brain structural changes related to cognitive control and emotional regulation are associated with digital media addictive behavior. A case study of a treatment of an ADHD diagnosed 9-year-old boy suggests screen time induced ADHD-related behavior could be inaccurately diagnosed as ADHD. Screen time reduction is effective in decreasing ADHD-related behavior.


Conclusions: Components crucial for psychophysiological resilience are none-wandering mind (typical of ADHD-related behavior), good social coping and attachment, and good physical health. Excessive digital media use by children and adolescents appears as a major factor which may hamper the formation of sound psychophysiological resilience.


Results: Confusion exists about the name, nature and use of case study. This methodology, including terminology and concepts, is often invisible in qualitative study titles and abstracts. Case study is an exclusive methodology and an adjunct to exploring particular aspects of phenomena under investigation in larger or mixed-methods studies. A high quality of case study exists in nursing research.


Conclusion: Judicious selection and diligent application of literature review methods promote the development of nursing science. Case study is becoming entrenched in the nursing research lexicon as a well-accepted methodology for studying phenomena in health and social care, and its growing use warrants continued appraisal to promote nursing knowledge development. Attention to all case study elements, process and publication is important in promoting authenticity, methodological quality and visibility.

3a8082e126
Reply all
Reply to author
Forward
0 new messages