Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Coaching Anti-Patterns: Prescriptive Agile

DZone's Guide to

Coaching Anti-Patterns: Prescriptive Agile

· Agile Zone ·
Free Resource

Adopting a DevOps practice starts with understanding where you are in the implementation journey. Download the DevOps Transformation Roadmap. Brought to you in partnership with Techtown.

I saw a tweet this morning that got me thinking about a coaching anti-pattern I frequently see:



The Prescriptive Agile Coach

The Prescriptive Agile Coach is armed with a reliable set of practices. The practices have been documented, vetted, and implemented successfully on a number of teams. They are inarguably proven. To the Prescriptive Agile Coach, those not following these practices are not truly Agile. To the Prescriptive Agile Coach anyone following these practices, but not achieving the results desired, is simply doing it wrong. For a Prescriptive Agile Coach, bringing a client's practices into compliance is of significant concern.

The following is a typical exchange between a Prescriptive Agile Coach and their Client.
Coach: May I give you some feedback on your stand-ups?
Client: Sure. That would be great.
Coach: I've noticed you don't address the three questions in your stand-ups. I think you'd find stand-up to be of higher value if you did.
Client: Oh. We tried that. It felt really disconnected. This way feels more like a team.
Coach: Well, I don't know if you've read the book on Scrum, but the stand-up serves a very specific and important purpose. It's important, in order to maximize the benefit and not waste people's time, that we cover what was done, what will be done, and any impediments. Let's tell the team we're improving the format and start with the three questions on Monday. Sound good?

So what's wrong with this exchange?


The Coach asks if the Client is ready for feedback, gets acknowledgement, provides the feedback, and explains their reasoning. This is practically a model of affective professional coaching. But the coach didn't listen to the client's response. Rather than probing to find out why the three question approach felt disconnected and less like a team, our coach simply redirected back to the benefits of doing it "right".

Meet them where they are and leave them in a better place


When I encounter a team that sends daily email status updates, walks the board, or does stand up three times per week, my first responsibility is to understand how and why they came to this practice. How did they come to this decision? What challenges does this approach address? What benefits are they optimizing for?
As a coach, your primary concern should not be bringing the client's practices into compliance. Your role is to help the client become more effective. If, after understanding their context and challenges, the best solution for them happens to also look like something you once read in a book, that's fantastic. If, however, it looks entirely novel and serves the needs of the team, that's equally (and perhaps more) fantastic. For the common practices we read about in our agile textbooks; each of them was once a novel idea that best served the needs of a team.

Take Agile to the next level with DevOps. Learn practical tools and techniques in the three-day DevOps Implementation Boot Camp. Brought to you in partnership with Techtown.

Topics:

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}

\r\n
\r\n

\r\n

The Prescriptive Agile Coach

\r\n The Prescriptive Agile Coach is armed with a reliable set of practices. The practices have been documented, vetted, and implemented successfully on a number of teams. They are inarguably proven. To the Prescriptive Agile Coach, those not following these practices are not truly Agile. To the Prescriptive Agile Coach anyone following these practices, but not achieving the results desired, is simply doing it wrong. For a Prescriptive Agile Coach, bringing a client's practices into compliance is of significant concern.
\r\n
\r\n
The following is a typical exchange between a Prescriptive Agile Coach and their...","authors":[{"realName":"Doc Norton","isMVB":true,"isStaff":false,"aboutAuthor":"Doc Norton is CEO of CTO2, where he helps organizations improve their ability to deliver software. Doc's experience covers a wide range of development topics. He declares expertise in no single language or methodology and is immediately suspicious of anyone who declares such expertise.","claimed":"DZone_karap","name":"DocOnDev","tagline":null,"company":"CTO2","id":736099,"avatar":"https://secure.gravatar.com/avatar/47d958cda2e4ee2f48153396bf9a4ed4?d=identicon&r=PG","isClaimed":true,"url":"/users/736099/DocOnDev.html"}]}]; TH.installWidgetController('article.content', 'articleContent5', WMODEL_DATA, typeof controller == 'function' ? controller : null, [{name: 'partners', data: true},{name: 'DEFAULT', data: true}], ' oUhbblYOaqbcblYOaqbcC', null); })(); (function() { function controller($scope, $service, $location, SideBarService, $timeout) { if ($scope.edition) { $scope.date = moment($scope.editionDate).utc().format('MMM DD, YYYY'); } SideBarService.ctx.pageSize = $scope.pageSize; SideBarService.ctx.isPreview = $scope.isPreview; SideBarService.ctx.mode = $scope.mode; SideBarService.fn.loader = $service; var $window = $(window); function checkWidth() { var windowsize = $window.width(); $scope.width = windowsize; } // Execute on load checkWidth() // Bind event listener $(window).resize(checkWidth); if ($scope.edition) { SideBarService.ctx.edition = $scope.edition; } SideBarService.fn.scrollCheck = function() { $scope.$emit('thIfScrollCheck'); }; var currentFilter; $scope.$on('$locationChangeSuccess', function() { if (!$location.search().filter) { $scope.filter = 'latest'; } else { $scope.filter = $location.search().filter; if ($scope.filter == 'latest') { $location.search('filter', null); } } if (currentFilter == $scope.filter) { return; } currentFilter = $scope.filter; SideBarService.ctx.filter = $scope.filter; }); $scope.display = SideBarService.getList(); $scope.$watchCollection(function() { return SideBarService.getList(); }, function (n) { $scope.display = n; }); $scope.isActive = SideBarService.isActive; $scope.isExcluded = SideBarService.isExcluded; $scope.loadMore = SideBarService.load; $scope.loading = function() { return SideBarService.ctx.loading; }; TH.on('TapBarStatusChange', function(expanded) { if (expanded) { SideBarService.unblock(); } }) } var WMODEL_DATA = {}; WMODEL_DATA.mode = null; WMODEL_DATA.isPreview = false; WMODEL_DATA.editionName = ""; WMODEL_DATA.editionDate = null; WMODEL_DATA.pageSize = 20; WMODEL_DATA.edition = null; WMODEL_DATA.OPTIONS = {}; TH.installWidgetController('sidebar.content.list', 'sidebarContentList8', WMODEL_DATA, typeof controller == 'function' ? controller : null, [{name: 'DEFAULT', data: true}], ' oUhbkSMaaqbcdvVkcC', null); })(); (function() { function controller($scope) { var $window = $(window); function checkWidth() { var windowsize = $window.width(); var $element = $('div.sidebar.sidebarTapBar'); $scope.width = windowsize; if(windowsize <= 1024 && $scope.edition){ $('.fixContentRight').removeClass('fixContentRight'); // $element.removeClass('expanded'); // $element.addClass('tapNotExpanded'); $('.tap').show(); }else if($scope.edition){ $('.tap').hide(); $('.mainContentRow').addClass('fixContentRight'); $element.removeClass('tapNotExpanded'); $element.addClass('expanded'); } } // Execute on load checkWidth(); // Bind event listener $(window).resize(checkWidth); } var WMODEL_DATA = {}; WMODEL_DATA.edition = null; WMODEL_DATA.slot = null; WMODEL_DATA.OPTIONS = {}; TH.installWidgetController('sidebar.tapBar', 'sidebar', WMODEL_DATA, typeof controller == 'function' ? controller : null, null, ' oUhbkSMadabfWVcC oUhbkSMadabbWQbVkcC', null); })(); (function() { function controller($scope, shareThis, TH$Dialog, TH$Service, $location) { $scope.getEditUrl = function(id, type) { if (!type || type == 'article') { return '/content/' + id + '/edit.html'; } else { return '/dzone/staff/' + type + (type == 'refcard' ? 'z' : 's') + '/' + id + '/edit.html'; } }; $scope.share = function(socialNet, url, title){ shareThis.shareThis(socialNet, url, title); }; // $scope.mailShareLink = function(article) { // return 'mailto:?subject=' + encodeURIComponent(article.header.title) + '&body=Article: ' + encodeURIComponent('https://dzone.com/' + article.header.link); // }; $scope.canDelete = function(article) { return article.canDelete; }; $scope.canPublish = function(article) { return article.canPublish; }; $scope.canEdit = function(article) { return article.canEdit; }; $scope.toggleComments = function(article) { if(!article.isLocked) { TH$Service.action('articles.lockNode', {type: 'node', id: article.id}).then(function(result) { if(result){ article.isLocked = true; TH$Dialog.success('You have disabled all comments for this Article'); }else{ TH$Dialog.error('error','Your requested was denied') } }); }else { TH$Service.action('articles.unlockNode', {type: 'node', id: article.id}).then(function(result) { if(result){ article.isLocked = false; TH$Dialog.success('You have enabled all comments for this Article'); }else{ TH$Dialog.error('error','Your requested was denied') } }); } }; $scope.toggleLimitComments = function (article) { if (!article.isLimited) { TH$Service.action('articles.limitNode', {type: 'node', id: article.id}).then(function (result) { if (result) { article.isLimited = true; TH$Dialog.success('You have limited comments for this Article. Now all comments will go through moderation.'); } else { TH$Dialog.error('error', 'Your requested was denied') } }); } else { TH$Service.action('articles.unlimitNode', {type: 'node', id: article.id}).then(function (result) { if (result) { article.isLimited = false; TH$Dialog.success('You removed the limits for comments on this Article'); } else { TH$Dialog.error('error', 'Your requested was denied') } }); } }; $scope.shareTwitter = function($event, title, url){ $event.preventDefault(); $event.stopPropagation(); var twitter = 'https://twitter.com/intent/tweet'; var link = $location.protocol() + '://' + location.host + url; var ref = location.host; var params = '?text='+title+'&url='+link+'&ref=dzone.com&via=DZone'; var win = window.open(twitter+params, '_blank'); win.focus(); }; $scope.edit = function(link) { TH$Dialog.open({ loadWidget: 'links.postPreview', widgetArgs: { edit: link.id }, size: 'xbig' }).then(function (result) { $scope.link.title = result.title; $scope.link.linkDescription = result.content; $scope.link.thumb = result.thumb; $scope.link.tags = result.topics; }); }; $scope.deleteLink = function(article) { var title = article.title; var type = 'link'; if(article.header){ title = (article.header.type == 'article') ? article.header.title : article.title; type = (article.header.type == 'article') ? 'article' : 'link'; } TH$Dialog.confirm('Do you want to delete "' + title + '"?').then(function() { return TH$Service.action('delete', {type: type, id: article.id}); }).then(function() { article.deleted = true; }); }; } var WMODEL_DATA = {}; WMODEL_DATA.OPTIONS = {}; TH.installWidgetController('content.commentsSlider', 'contentCommentsSlider7', WMODEL_DATA, typeof controller == 'function' ? controller : null, null, ' oUhbaqbcaibvnWffWVcC', null); })(); (function() { var WMODEL_DATA = {}; WMODEL_DATA.name = "commentsSlider"; WMODEL_DATA.slot = null; WMODEL_DATA.OPTIONS = {"name":"commentsSlider"}; TH.installWidgetController('components.slider', 'componentsSlider6', WMODEL_DATA, typeof controller == 'function' ? controller : null, null, ' oUhballbvbdSaoUhM', null); })();