1"use strict";(self.webpackChunkcore=self.webpackChunkcore||[]).push([[1712],{1964:function(e,t,n){n.d(t,{A:function(){return l}});var a=n(3696),r=n.p+"static/phoenix-book-paperback-cover-2023-05-10-2f9d66a11f9298192419928cb942ed24.jpg",o=n(2079);var l=()=>{const e=(0,a.useRef)();return(0,a.useEffect)((()=>{e.current.addEventListener("animationend",(()=>{e.current.addEventListener("click",(()=>{e.current.style.transform="rotateY(180deg)",setTimeout((()=>{e.current.style.transform="rotateY(35deg)"}),3e3)}))}))}),[]),(0,o.Y)("div",{className:"book-3d"},(0,o.Y)("div",{className:"book-3d-body",ref:e},(0,o.Y)("div",{className:"book-3d-page-edge"}),(0,o.Y)("img",{alt:"Phoenix book cover",className:"book-3d-cover",src:r})))}},3023:function(e,t,n){n.d(t,{R:function(){return l}});var a=n(3696);const r={},o=a.createContext(r);function l(e){const t=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}},3235:function(e,t,n){n.d(t,{A:function(){return d}});var a=n(3696),r=n(1964),o=n(2079);var l=()=>(0,o.Y)("div",{className:"box"},(0,o.Y)("div",{className:"book-ad-cover"},(0,o.Y)(r.A,null)),(0,o.Y)("h2",null,"Get the book"),(0,o.Y)("a",{className:"button primary small",href:"/phoenix"},"Buy Now"),(0,o.Y)("p",null,"$4.2 billion has been spent. The project began in 2007 ",(0,o.Y)("em",null,"and the system still doesnât work!")),(0,o.Y)("p",null,"How could this happen? Who is to blame? Was it preventable? Get answers to all these questions.")),i=n.p+"static/David-Portrait-(WSJ)-circle-5594919bc65c6ed5a801d54dcdab313b.png";var s=()=>{const e="David Sabine";return(0,o.Y)("div",{className:"space-after blog-bio"},(0,o.Y)("img",{alt:e,className:"blog-bio-photo",src:i}),(0,o.Y)("div",{className:"blog-bio-copy"},(0,o.Y)("strong",null,e),(0,o.Y)("br",null),"Professional Scrum Trainer",(0,o.Y)("br",null),"Professional Kanban Trainer"))},c=n(6885);var m=e=>{let{pageContext:t}=e;const{next:n,previous:r}=t;return(0,o.Y)(a.Fragment,null,(n||r)&&(0,o.Y)("ul",{className:"pagination"},(0,o.Y)("li",null,r&&(0,o.Y)(c.N_,{title:r.title,to:`${r.path}`,rel:"prev"},(0,o.Y)("span",{className:"button small"},"â Previous Article"))),(0,o.Y)("li",null,n&&(0,o.Y)(c.N_,{title:n.title,to:`${n.path}`,rel:"next"},(0,o.Y)("span",{className:"button small"},"Next Article â")))))};var u=e=>{let{pageContext:t}=e;const{tags:n}=t.frontmatter;return(0,o.Y)("div",{className:"box"},(0,o.Y)("h2",null,"Connect with me"),(0,o.Y)("p",null,"Please ",(0,o.Y)("a",{href:"/contact/"},"let me know")," if youâd like more articles on this topic in future."),(0,o.Y)("p",null,"And be sure to check out related articles:"),(0,o.Y)("ul",{className:"actions"},Object.keys(n).map((e=>(0,o.Y)("li",{key:e},(0,o.Y)(c.N_,{"aria-label":`Read more on topic: ${n[e]}`,className:"button xxsmall tag",to:`/articles?tags=${encodeURI(n[e])}`},n[e]))))))};var d=e=>{let{children:t,pageContext:n}=e;return(0,o.Y)("footer",null,(0,o.Y)("div",{className:"grid article-footer-grid"},(0,o.Y)(u,{pageContext:n}),(0,o.Y)(l,null)),(0,o.Y)(s,null),(0,o.Y)(m,{pageContext:n}),t)}},4079:function(e,t,n){var a=n(8898),r=(n(3696),n(2079));t.A=e=>{let{pageContext:t}=e;const{frontmatter:n,gatsbyImageData:o}=t;return(0,r.Y)("header",{className:o?"article-hero article-hero-has-image":"article-hero",style:{"--hero-title-len":`${n.title.length}`,"--hero-bg-image":o?`url('${o.images.fallback.src}')`:"none","--hero-bg-color":null==o?void 0:o.backgroundColor}},(0,r.Y)("div",null,(0,r.Y)("div",null,(0,r.Y)("h1",{className:"contains-highlight-heading"},(0,r.Y)("span",{className:"highlight-heading"},n.title))),(0,r.Y)("div",null,(0,r.Y)("p",null,"Published:"," ",(0,r.Y)("time",{dateTime:n.date},(0,a.GP)(new Date(n.date),"yyyy-MMM-dd"))))))}},4600:function(e,t,n){n(3696);var a=n(2079);t.A=e=>{let{children:t}=e;return(0,a.Y)("section",null,t)}},7058:function(e,t,n){n(3696);var a=n(239),r=n(2079);t.A=e=>{let{children:t}=e;return(0,r.Y)(a.A,{className:"article"},t)}},8162:function(e,t,n){n.r(t),n.d(t,{Head:function(){return h},default:function(){return p}});var a=n(3023),r=n(3696);function o(e){const t=Object.assign({p:"p",a:"a",strong:"strong",h2:"h2",ul:"ul",li:"li",em:"em"},(0,a.R)(),e.components);return r.createElement(r.Fragment,null,r.createElement(t.p,null,"A breath of fresh air! I recently attended ",r.createElement(t.a,{href:"https://meetup.com/calgary-agile/events/311773857/"},"a meetup in Calgary")," and was happily surprised to hear a presentation about cutting-edge software development."),"\n",r.createElement(t.p,null,"It was refreshing to engage in meaningful debates and conversations about disciplined technical practices. It was a welcome shift away from the dogmatic discu
1ssions that have dominated Agile conferences for a decade. There were no lectures about âmindsetâ and no sermons about âpsychological safetyâ. ",r.createElement(t.strong,null,"The conversation felt like a revival of core Agile practices: the technical excellence that underpins iterative and incremental development.")),"\n",r.createElement(t.p,null,"I have always appreciated how Agile values and principles explicitly champion autonomy, respect, and humane work environments. Thatâs chief among the reasons Iâve directed my career toward coaching and training in this field, and thatâs part of why the movement succeeds. ",r.createElement(t.strong,null,"But starting around 2015"),", these topics became over-represented. They crowded out the engineering conversations entirely. Conferences, Open Spaces, meetups: session after session about feelings and philosophy, endless reminders to be nicer, kinder, gentler, with barely a whisper about the work itself. And unintentionally, the business community absorbed the wrong lesson: that the Manifesto for Agile Software Development is fundamentally about soft skills, not technical excellence. (Thatâs not true.) The result was predictable as teams tried to âcultureâ and âemotional intelligenceâ their way out of problems caused by poor engineering discipline."),"\n",r.createElement(t.h2,{id:"beyond-dogma-returning-to-agile-roots"},"Beyond Dogma: Returning to Agile Roots"),"\n",r.createElement(t.p,null,"Itâs encouraging to see that the conversation around Agile practices may be returning to its roots. We may see a revival of technical excellence that truly enables great work environments for creative people and drives high-quality software."),"\n",r.createElement(t.p,null,"The meetup, hosted by the Calgary Agile group, featured a presentation by ",r.createElement(t.a,{href:"https://linkedin.com/in/johngmoura/"},"John Moura"),", VP of Product Engineering at ",r.createElement(t.a,{href:"https://linkedin.com/company/lodgelink/"},"LodgeLink"),". He eloquently discussed the technical practices of the company."),"\n",r.createElement(t.p,null,"Instead of getting caught up in rigid frameworks or ideological debates, he emphasized practical, real-world applications and I found myself eager to hear the details! I asked many questions about the teamsâ working agreements, patterns, and technical decisions."),"\n",r.createElement(t.p,null,"Some examples I remember (to the extent my memory can be accurate) from Johnâs presentation:"),"\n",r.createElement(t.ul,null,"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"No Pull Request shall wait more than 4 hours for review, and merge within 24 hours."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"No branch shall grow older than 7 days. (If the work cannot be done and merged within 7 days, find a different solution or the branch will be pruned.)"),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Developers donât attend meetings after noon."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Teams are not larger than 2 or 3 developers."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Team mandates are divided into React (for client-side UI) and Go (for server-side APIs). How do they work independently? They design an API contract up front, then both sides build toward that contract."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Feature flags are configurable in runtime (do not require deployment of new code)."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Teams have a âdefect budgetâ: within that budget, reported defects are immediately elevated to the top of the queue and fixed."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Manual QA is entirely asynchronous and done in Prod. How?"),"\n",r.createElement(t.ul,null,"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"It is done in all environments, but Prod is representative of real issues customers will face, so there is an increased focus there."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Dev teams write their own unit and end-2-end tests and push code known (or believed) to be defect-free."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Devs also write integration tests and now are starting to incorporate component and contract testing."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Manual QA is not for functional or regression checks. (If an automated test can do it, the test is written an executed by developers. Human tester
1s should do what automated tests cannot do.) QA personnel test for broad usability concerns, UX flow through the app, feature cohesion, edge-case device compatibility, et cetera."),"\n"),"\n"),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Budgets are not attached to deliverables; teams are funded for the year."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"Estimates are rarely requested and do not drive decision-making about priority or timeline. When estimates are requested, they inform implementation options."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"The teams push new code into production multiple times per day. Features are exposed to end users, often selectively, and on a cadence decoupled from deployment."),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"AI tools are generally not permitted for junior developers. Senior developers are provided a license to specific AI tools if they can articulate how theyâll use the tool. (I think this restriction aims to encourage developers to be deliberate and discerning about their use of AI.)"),"\n"),"\n",r.createElement(t.li,null,"\n",r.createElement(t.p,null,"High-profile releases of new functionality are announced and timed according to marketing goals (not feature scope). Teams manage their implementation toward those dates. Those are not deadlines accompanied by fixed scope; those are focal points that help independent teams align their effort across silos."),"\n"),"\n"),"\n",r.createElement(t.p,null,"Of course, we can debate whether those working agreements are broadly effective or unique to their context. ",r.createElement(t.strong,null,"And we did debate it!")," The group raised questions for John about the efficacy of Trunk-Based Development, Test-Driven Development, the Daily Scrum, estimates, documentation, quality and flow metrics, ",r.createElement(t.em,null,"et cetera"),"."),"\n",r.createElement(t.h2,{id:"looking-to-the-future"},"Looking to the Future"),"\n",r.createElement(t.p,null,"As I look forward, thereâs plenty to be optimistic about. The rapid advancement of technology (like AI, SaaS, and innovative architectures) promises to improve our technical practices further. Iâm eager to have more conversations that explore these advancements and how they can further elevate the Agile landscape."),"\n",r.createElement(t.h2,{id:"conclusion"},"Conclusion"),"\n",r.createElement(t.p,null,"Itâs an exciting time to be part of the Agile community. Despite the rhetoric claiming âAgile is Deadâ I see a renewed emphasis on technical practices, coupled with incredible str
1ides in technology. These factors set the stage for a bright future."))}var l=function(e){void 0===e&&(e={});const{wrapper:t}=Object.assign({},(0,a.R)(),e.components);return t?r.createElement(t,e,r.createElement(o,e)):o(e)},i=n(4600),s=n(3235),c=n(4079),m=n(7058),u=n(8457);const d=e=>{let{children:t,pageContext:n}=e;return r.createElement(m.A,{className:"post"},r.createElement("article",null,r.createElement(c.A,{pageContext:n}),r.createElement(i.A,null,t)),r.createElement("article",{className:"alternatecolor"},r.createElement(s.A,{pageContext:n})))},h=e=>{let{location:t,pageContext:n}=e;return r.createElement(u.A,{location:t,pageContext:n})};function p(e){return r.createElement(d,e,r.createElement(l,e))}},8457:function(e,t,n){var a=n(3696),r=n(2079);t.A=e=>{let{location:t,pageContext:n}=e;const{creator:o,description:l,locale:i,siteUrl:s,twitterCreator:c}=n.siteMetadata,{excerpt:m,favicon:u,frontmatter:d,gatsbyImageData:h}=n,p={canonicalUrl:`${s}${(null==t?void 0:t.pathname)||""}`,description:m||l,keywords:d.tags.join(", "),iconPath:u,imagePath:h.images.fallback.src,title:d.title};return(0,r.Y)(a.Fragment,null,(0,r.Y)("link",{rel:"canonical",href:p.canonicalUrl}),(0,r.Y)("link",{rel:"shortcut icon",href:`${p.iconPath}`}),(0,r.Y)("meta",{name:"author",content:o}),(0,r.Y)("meta",{name:"description",content:p.description}),(0,r.Y)("meta",{name:"keywords",content:p.keywords}),(0,r.Y)("meta",{name:"image",content:`${s}${p.imagePath}`}),(0,r.Y)("meta",{itemProp:"description",content:p.description}),(0,r.Y)("meta",{itemProp:"image",content:`${s}${p.imagePath}`}),(0,r.Y)("meta",{itemProp:"name",content:p.title}),(0,r.Y)("meta",{name:"twitter:card",content:"summary"}),(0,r.Y)("meta",{name:"twitter:creator",content:c}),(0,r.Y)("meta",{name:"twitter:description",content:p.description}),(0,r.Y)("meta",{name:"twitter:image",content:`${s}${p.imagePath}`}),(0,r.Y)("meta",{name:"twitter:image:alt",content:p.title}),(0,r.Y)("meta",{name:"twitter:site",content:c}),(0,r.Y)("meta",{name:"twitter:title",content:p.title}),(0,r.Y)("meta",{property:"og:description",content:p.description}),(0,r.Y)("meta",{property:"og:image",content:`${s}${p.imagePath}`}),(0,r.Y)("meta",{property:"og:image:alt",content:p.title}),(0,r.Y)("meta",{property:"og:locale",content:i}),(0,r.Y)("meta",{property:"og:site_name",content:p.title}),(0,r.Y)("meta",{property:"og:title",content:p.title}),(0,r.Y)("meta",{property:"og:type",content:"website"}),(0,r.Y)("meta",{property:"og:url",content:p.canonicalUrl}),(0,r.Y)("title",null,p.title," â ",o))}}}]); 2//# sourceMappingURL=component---gatsby-theme-blog-src-templates-post-js-content-file-path-src-articles-2025-12-agile-engineering-practices-a-revival-mdx-9b31b0a86c6bb2bd9f29.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.