Articles in the Posts category
Why is the Closed Date field empty in my work items?
More importantly, what is the issue and how do we resolve it?
Rotting Pull Requests - Detection And Actioning
Explore the root cause of un-actioned pull-requests, how to detect and remedy (Part 1).
Journal 6 - Empowerment through automation and artificial intelligence
Reshaping the way we work, creating new opportunities to empower engineers by reducing repetitive tasks, enhancing productivity, and enabling focus on high-value activities.
Why Automation Needs People to Truly Thrive
While automation is an essential ingredient for DevOps, it is not a silver bullet.
Agile Planning with Azure DevOps
Recalling the recent agile planning session hosted by common engineering during the +1 innovation and planning iteration.
Azure DevOps Pipeline Blueprints - Open Source Software Sync 20241019
Refactor the building code calls.
DevOps Vancouver Meetup Learnings
Insights gained from hosting six community meetups this year: the positives, negatives, and challenges.
Artificial Intelligence - AI-900 - Quick Reference Poster
A consolidated poster / cheat sheet of my AI-900 study notes.
Artificial Intelligence - AI-900 - Guiding Principles
"Guiding principles aim to ensure responsible and ethical AI development and deployment." - ChatGPT GPT-4o
Artificial Intelligence - AI-900 - Bots
Conversational AI workloads - no longer part of AI-900 certification!
Artificial Intelligence - AI-900 - Common Machine Learning Types
"AI machine learning (ML) refers to the subset of artificial intelligence focused on developing algorithms and models that enable computers to learn from data and improve their performance over time without being explicitly programmed." - ChatGPT GPT-4o
Artificial Intelligence - AI-900 - Common Workloads
"Common workloads in AI and machine learning include data processing, model training, inference, natural language processing, computer vision, recommendation systems, time series forecasting, and robotics/automation tasks." - ChatGPT GPT-4o
Artificial Intelligence - AI-900 - Generative AI
"Generative AI refers to a subset of artificial intelligence that creates new content—such as text, images, audio, or video." - ChatGPT GPT-4o
Artificial Intelligence - AI-900 - Natural Language Processing
"Natural Language Processing (NLP) is a branch of AI that enables computers to understand, interpret, and generate human language." - ChatGPT GPT-4o
Artificial Intelligence - AI-900 - Vision Workloads
"Vision workloads in AI refer to tasks that involve processing and analyzing visual data, such as images and videos." - ChatGPT GPT-4o
Stop the Confusing Language Madness in IT!
Using a common language in IT helps avoid misunderstandings, conserves time, and enhances teamwork.
Journal 5 - Unlocking the Potential of Generative AI
Explore GitHub Copilot's potential to revolutionize code quality, collaboration, and productivity.
Azure DevOps Pipeline Blueprints - Open Source Software Sync 20240816
Improving the configuration file user experience.
Embrace the Future - Use Automation and AI to Elevate Your Engineering Career!
The era of manual testing and coding to a specification is nearly over!
Unleashing the Power of Teamwork: Key Takeaways from Collaboration Ceremonies and Events
Fostering a culture of continuous improvement and innovation through events
Revolutionizing Quality Assurance: Unleashing the Power of Automation and AI
Automation and Artificial Intelligence in Quality Assurance
Unproductive Communication - The Silent Productivity Killer That Drives Me Crazy
Stop the context-less "hi, hello, ping, pong, ..."
Automate Azure DevOps work item state transitions like a Pro
Maintain your backlog by changing the status of work items according to the status of their subitems.
Exploring the future Software Development Lifecycle (SDLC) flow
Looking for Insights and Feedback from other pioneers of continuous SDLC improvements.
Decoding the Acronyms: MMP vs. MVP vs. POC
MMP, MVP, and POC: Understanding Their Differences and Choosing the Right Approach
Technology Framework Monitor - Open Source Software Sync 20240510
Shake Off the Dust: Our TFM Software Spring Cleaning!
Azure DevOps Pipeline Blueprints - Open Source Software Sync 20240405
Adding a new blueprint - webapp.
Technology Framework Monitor - Open Source Software Sync 20240322
The broader our scanning efforts, the more technical debt we uncover, enabling proactive resolution.
Azure DevOps Pipeline Blueprints - Open Source Software Sync 20240322
Second update to complete the 101 simplification.
Azure DevOps Pipeline Blueprints - Open Source Software Sync 20240318
“Constantly think about how you could be doing things better.” - Elon Musk.
Back to Basics: Open Source Software (OSS)
Raising awareness of our open-source projects for knowledge sharing.
Back to Basics: Dealing with Technical Debt
Breaking Free: A Guide to Tackling Technical Debt Head-On
Cheat sheet to migrate generic v1 templates to v2
Questioning the recommended approach to upgrades and the use of generic templates.
Back to Basics - Engineering
The notion of developers relying on testers to validate changes can be so startling that it feels like my head might explode.
Back to Basics: Why are we moving to v2 CI/CD Blueprints for Azure Pipelines?
Understanding why we are disabling classic Azure Pipelines and embracing YAML-based Azure Pipelines.
Back to Basics: Pull-Request (PR) Validations
Why run a validation build in your pull-request?
Back to Basics: WIP Limit
Dealing with a Kanban Board meltdown, by controlling the work in progress.
Back to Basics: Batch Size
Balancing noise and agility with smaller batch sizes.
Why Bugs are NOT Technical Debt
why software bugs should not be categorically considered technical debt.
Why release on demand?
Exploring the deployment rings, continuous delivery and deployment, to discuss release on demand.
What are all those Warning and Information outputs from a build and why should I care if its not an error?
Reasons why is it important to pay attention to all the warning and information message generated when compiling your code.
DevOps Vancouver Meetup - Engineering Empowerment Session Preparations
Help us prepare our meetup session to ensure we cover what is interesting for YOU!
Unraveling the Merits of Dependency Injection in Modern Software Development
Dependency Injection aligns seamlessly with the SOLID principles.
Mastering Software Development: A Deep Dive into Trunk-Based Pull Request Workflow
How to implement a pull request workflow within the context of a trunk-based development.
GitHub Copilot for Business FAQ
Frequently Asked Questions (FAQ) that have been mushrooming during our evaluation phase. Part 2 - FAQ.
GitHub Copilot for Business Setup
Getting started with GitHub Copilot - Part 1: Setup.
Embedding a Quality-Driven Engineering Mindset in Our DNA
An engineering mindset that prioritizes quality is crucial for producing robust and reliable solutions.
Let us Elevate Our CI/IaC/CD Azure Pipeline Flow Together!
Streamline Your Process: Isolating the Provision and Deployment Steps for Efficiency?
Navigating Azure DevOps Complexity: Harnessing Objects to Simplify YAML Template Parameter Management
Seizing the chance to enhance and optimize our CI/CD/IaC pipelines.
Why do we care about infrastructure-as-code (IaC)?
Our vision is *aC, but to avoid boiling the ocean, we will focus on an overview on IaC today.
Innovation podcast with WorkSafeBC and Microsoft
An informal conversation around innovation with Bill, Omar, Sebastian, Sarav, and Todd
Water Cooler Talk - Why Azure Devops is not a silver bullet
Yes, I LOVE Azure DevOps, but it is not the answer to the universe.
Water Cooler Talk - Why is WSBC such a cool place?
At a recent water cooler we chatted about why WorkSafeBC is such a cool place to work for.
Azure Boards Tips - Retain hierarchy with filter
Why does the hierarchy view [not] vanish when selecting a filter?
Configuration and/or Dependency Management
What am I missing? Is this not a common dependency challenge?
BCIT Computer Systems Technology Industry Sponsored Student Project (ISSP)
Today we have open-sourced our Technology Framework Monitor (TFM).
Shift from project to product thinking
The problem is not with projects but with project-focused thinking
What keeps us awake at night - Technical Debt
Empower engineering without compromising security
Azure Boards Tips - Stop messing with our backlog!
A few useful "did you know" tips when using Azure Boards.
Fail, Learn, Reset, Transform!
“Success is not final, failure is not fatal, it is the courage to continue that counts.” – Winston Churchill
Engineering Practice Layering
Application Layering - Separation of Concerns Architecture Principle
What about ChatGPT?
A question that made me speechless at a recent Navigating the Future event.
Azure DevOps Pipeline OSS v2.1 Flow
Two pull requests with pipeline updates for your perusal.
Engineering Practice Naming Conventions
Naming Convention Nuggets of Knowledge and Best Practices
Azure DevOps Transient Faults
Be careful not to annoy Azure DevOps with your automated maintenance jobs!
Azure Devops simplicity to rule them all
Keep Azure DevOps setup simple and avoid a lot of pain and waste!
Engineering Practice Nuggets
Nuggets of Knowledge and Best Practices in Software Engineering
Pull Request empowered by engineering practices
Pull Requests (PR) enable us improve built-in quality, engineering practices, and streamline our continuous integration pipelines.
Fail, Learn, Reset!
"Failure is a good option. If you are not failing, you are not trying hard enough." - Elon Musk
Azure Pipelines Conditional Logic
Make your YAML pipelines more versatile with conditional expressions.
Azure Boards Tips for Operations Teams
A few useful "did you know" tips when using Azure Boards for Operational-type teams.
Azure Pipelines Blueprint QA Integration
WHERE and HOW to integrate quality assurance into our OSS pipeline blueprints.
Our open-source pipeline blueprints have landed!
Lifting the hood of our consistent, standardized, and self-service based Azure Pipelines.
Test Environment Management in a hybrid world
Test Environments are a critical component of any software development lifecycle.
Built-in Quality
Ensuring that our solutions meet quality guardrails and governance from ideation to deprecation.
Servant stewardship of guardrails
You can chose between governance, policies, or standards, or collaborate with us through guardrails.
Our road to OSS Blueprints - Suppress CD when pipeline runs within Pull Request
A glimpse at our OSS progress and how we use the same pipeline in and out of pull requests.
Accelerate DevOps with GitHub Book
"Enhance software delivery performance with GitHub Issues, Projects, Actions, and Advanced Security" - Michael Kaufman
Positive energy goes a long way to encourage innovation
"Every person in your company is a vector. Your progress is determined by the sum of all vectors." - Elon Musk
Visualizing work item dependencies in Azure Boards
We want to plan and manage dependencies across multiple teams areas, providing awareness of the dependencies in a simple way.
Trunk-based branching strategy without the bells and whistles
Keeping it simple and avoiding the soul quenching politics
Automation and the great unknown
Inadvertently restricting access to thousands of pipelines with a simple automated task group insertion.
Automation Mayhem and Angst is normal
Doing a manual and mind-numbing task twice or more? Automate!
Improving DORA metrics
We would like to plan how to track and empower engineering to increase deployment frequency, and reduce lead time for change, MTTR, and change failure rates.
Journal 4 - Why are we a (the) place to work for?
Safe and healthy workplaces. Compassionate and responsive service.
Common Engineering - To Standardize or Not to Standardize, view from a directors point
Which is better, standardization or experimentation?
Why we use pull requests with our trunk-based branching strategies
Busting a few process myths around branching strategies and pull-requests
WHY are we pushing consistency and standardization?
Balancing autonomy with consistency and standardization.
Stop the meeting overload!
My personal crusade to optimize meetings and associated WASTE
Continuous Delivery in the enterprise
Continuous Delivery is no silver bullet and requires persistence, discipline and effort.
DevOps Analytics Strategy
Objective, Method and Maturity model for business analytics across an enterprise.
Understanding key metrics for a healthy DevOps mindset
Without real-time evidence, OODA never comes to life.
Having a sound Technology Adoption Process is pivotal to innovation
Selecting a new process or product without surprising or blindsiding anyone.
Journal 3 - Explore the trajectory of our Common Engineering (Ce) ecosystem
Looking at our common engineering team through the management (leader) lens
When should we automate tests
This article is gist of brainstorming session among Quality Assurance (QA) team.
Work-about-work
Avoid the overhead of work-about-work and adopt real time collaboration
Selling technical excellence is the most challenging job
Technical excellence is best practiced by collaborating in real time
Make your pipeline badges more compact and meaningful
Tired of cluttering your dashboards with duplicated waste?
The problem with big batches
Improve the predictability of delivering business value by reducing the utilization rates
Make yourself interruptible
Adopt humble approach when creating software products by making yourself open to interruptions
DevOps value proposition
DevOps introduces simultaneous focus on expectations, architecture, design, testing, building, releasing, and running the system
How to tame your vacation email traffic
How to ensure you are not confronted by hundreds of emails when you are back-to-work.
How to minimize queueing
Adopt the humble approach to only work in smallest possible batches with limited work-in-progress
Exploring the concept of mob-ownership
We succeed or fail as a team (mob), not as individuals!
Journal 2 - Why do we need our common engineering team?
Introducing the voice of reason and stewards of guardrails
Why can I not just create a working group?
It all depends on the context - [CoE] Working Group
Systems thinking and the flow of work
Speeding up software development may not speed up the delivery
How to track (and optimize) your email traffic
How to stop the insane volume of emails and WASTE!
Replace road maps with sea charts
Adopt more modest planning strategy by treating the journey as if sailing trecherous waters
Journal 1 - What is origin of our common engineering team?
Learning about the genesis of our EDO Common Engineering (EDO Ce) team
Don’t debug; do TDD instead
Avoid wasteful debugging activities by creating automated tests using TDD technique
Plate-emptying is not the same as Done
Maximizing the utilization of the time spent on creating software is a surefire way to drive the team into a brickwall
How do we know what our customers value?
We cannot know what customers actually value unless we expose them to our products and services. Here is how to do it in the most elegant way.
Streamlining your pipeline using the magic of YAML-base Azure Pipelines
Teleport to the future, to optimize the YAML-based Azure Pipeline approvals.
An overview of our key collaboration ceremonies
Taking a step back and digesting this week's storm of ceremony posts.
Guidelines to start and terminate the Townhall Events
A super-event to foster systems thinking and the removal of barriers and silos
What is our Community of Practice (CoP) and why do we need it?
"People with great PASSION can make the impossible happen" - Elon Musk.
What is our Working Group and WHY do we need it?
Union of laser-focused experts collaborating to empower its parent Center of Enablement (CoE).
How to create deterministic tests
Quality of automated tests is the most important aspect of continuous delivery
What is our Center of Enablement (CoE) and WHY do we need it?
It all starts with people from different disciplines to create a focused competency center and obliterating silos through vibrant collaboration!
Do not automate anything unless you automate the tests
Automating critical systems operations without having automated tests is risky practice
Streamlining your pipeline approvals, without flooding DevSecOps with noise
Back to the future, to optimize the Classic Azure Pipeline approvals.
Quality of Design
Adopt design principles to ensure highest quality of the code design
Don’t become an Expert Beginner
How to avoid the trap of getting stuck in an Expert Beginner role
Your old and trusted hammer is not always the right tool for the job
“I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.” - Abraham Maslow 1966
Cultivate apathy for details to enable refactoring
Give equal care to the code structure as you would give to the code behaviour
How to suppress selected logic when running PR validation pipelines
Solving the pipeline-as-code "chicken or the egg" challenge by suppressing selected logic
A peek at our Dream Team Working Agreement Poster
As a team we want to create an empathetic, safe, and vibrant ecosystem
Why I loathe when engineers use TLAs, such as CD vs CD!
The use of TLAs creates subpar collaboration, unnecessary confusion, and unintended waste.
Checkout your git repos at the right time!
Let us explore why the sequence of checkout steps are important in your Azure Pipeline.
Track work with POPCORN Flow
Work challenges are opportunities to explore, experiment, and track the feedback gathered from the innovation
How is ordering a pizza similar to hexagonal architecture?
How to build a system that interacts with the outside world without knowing the gory details of the outside world
Two ways to share your toolbox with your pipelines
Let us review two strategies to share scripts and config files with your Azure (YAML) Pipelines.
Why OODA is one of the DevOps genomes
If we unpack the DevOps DNA we will find a prominent genome labeled O-O-D-A.
Systems thinking
Switch focus from monitoring and measuring activities and outputs to measuring outcomes
Automation enables engineering to focus on value
Asking yourself why you are performing a set of manual tasks again and again? If yes, automate!
Get rid of redundant tests
Keeping the suite of automated tests lean is an essential trait of quality software engineering. Diligently remove all tests that don't add any value.
Cultivate rapid spreading of knowledge
Knowledge must be shared rapidly to enable teams to continuously deliver desired values
First International TDD Conference
First International TDD Conference generated a lot of good interest and traction
Pipelines - Meet our second-generation app-type blueprints
Our quest for continuous improvement, simplicity, consistency, enablement, and automation has taken us into a realm of Azure Pipelines that amaze even our most critical engineers.
Refactoring saves time and increases quality
Design is not a static construct, it evolves by refactoring as we keep changing the code
OODA Loop and DevOps
What is the relationship between Observe-Orient-Decide-Act Loop and DevOps.
Stop the context switching, reduce waste, and focus on value
A work-life balance is important, however, I believe that stopping waste and focusing on value is just as pivotal!
Gotchas when sharing variables with Azure DevOps stages and jobs
Understanding and avoiding gotchas that may keep you up at 2AM, troubleshooting YAML-based Azure Pipelines
Self-service automation - A dream turns into reality
Automate a “hello world in less than 1min”, also referred to as our “walking skeleton”.
Our quest to share our knowledge with the world, keeping it interesting and informal
Understand how to navigate and create content for our technical blog.
Quick Reference Sheet for Pipeline Terminology
Summarising the core terminology and lifetime of our pipelines.
Manage your Azure DevOps User Access Levels through automation
Quick overview how our Azure DevOps access level audits and management automation using PowerShell, REST APIs, and Richard's WIKI Updater task.
Client-side expressiveness and security
The importance of properly securing client-side applications has never been more urgent!
Can we enact governance through engineering-friendly manifestos and guardrails?
The best way to create an engineering revolt is to enforce governance with the big stick.
Extreme Programming (XP) provides options
What does 'extreme' in Extreme Programming stand for? It stands for extreme interruptability and extreme steerability
Start together work together finish together
Speed up the delivery process by avoiding queuing and needless looping
Enable Agile, Kanban, Scrum, or SAFe with Azure DevOps
Use Azure Boards to visualise a variety of processes using the Agile process in a single Azure DevOps project.
Quick Reference Sheet for Application-type Blueprint-based Pipelines
Summarising the main points of our 2nd generation app-type blueprint-based pipelines.
Introducing the Automation Working Group
Any system operation we can perform manually can be fully automated by writing scripts
Azure DevOps Experimentation - YAML Conditionals, Parameters, and Triggers
Snippets of common questions and issues from Azure Pipeline workshops and support calls. Today's snippet includes conditionals, parameters, and triggers.
How to share variables amongst Azure Pipeline agents
As per documentation, output variables can be used across stages in an Azure YAML-based pipeline. I will share a few turbulent moments we experienced while troubleshooting this feature in one of our pipeline blueprints.
Part 8: Pipelines - From CI to CD and beyond in one pipeline
Continuous Deployment is a pivotal ingredient of a healthy DevOps mindset and our ability to delight end-users with continuous value. It is the holy grail of our profession.
Only changeable design is good design
Why is changeable design desirable and what's preventing us from achieving it
Quick peek into regular expressions
Regular expressions are fundamental to programming
Quick Reference Sheet for YAML and Generic Blueprint-based Pipelines
Summarising the main points of YAML syntax, within the context of our generic blueprint-based pipelines.
Part 7: Pipelines - There is more! Simplicity and enablement, courtesy of the app-type blueprint-based YAML pipelines
Do you want to own two or seventy five dozen lines of pipeline code per application? The choice is yours!
Synchronized 'if' statements considered harmful
Duplicated imperative conditional logic leads to proliferation of bugs
Extreme Programming 25 Years Later
Extreme programming keeps going strong 25 years after its launch
Code-as-text
Programming computers by feeding them plain text is very slow and needs to be sped up.
Incremental and Iterative Development – what’s the diff?
Visual example illustrating the fundamental differences between incremental and iterative development process.
Pipeline-as-code wrapped with Pull Requests
This post attempts to give our critics some answers and scratch the surface of the possibilities and values of our new blueprint-based pipelines.
Find the capabilities and IP addresses of an Azure DevOps agent
How to find more information on hosted Azure DevOps agents, such as capabilities and IP addresses.
Workflow-as-code
Configuring complex workflows that govern Continuous Integration and Continuous Delivery must only be allowed by making changes to the YAML source files; GUI tools must be prohibited
Part 6: Pipelines - Gotcha! The generic blueprint-based YAML pipeline simplicity
Neither the bootstrap nor generic templates are rocket science, and the YAML-based pipelines are as complex as you make them.
Part 5: Pipelines - Blueprints to fuel consistency and enablement
Think of blueprints and associated templates as re-usable LEGO blocks, ranging from a bag of "do it yourself" blocks, to complex and detailed kits, such as the Imperial Star Destroyer.
Part 4: Pipelines - Magic of queue time assembly
We can use the power of the new multi-stage YAML pipelines to make even our most critical security engineers smile from ear to ear.
Part 3: Pipelines - Basic building blocks as templates and sprinkling on telemetry
With the support from all people, YAML templates support our five (5) core goals and pillars of our common engineering system.
Part 2: Pipelines - Introduction, variables and why spaces matter
The new Azure DevOps YAML pipelines have been the focus of innovation, enabling engineering to treat pipelines as code.
Part 1: Pipelines - Why bother and what are our nightmares and options?
Pipelines enable engineering to continuously deliver value, map and improve their processes and workflows, promoting consistency and reliability across the organisation.
Shift LEFT and RIGHT to take yourself off the humbling 2AM calls
We need to avoid the infamous 2AM call!
Don’t let your code talk to strangers
Closer look into the principle of least knowledge
Collective code ownership
Teams share collective responsibility and therefore collectively own the code
The clash of Azure DevOps Kanban fields and Shared Area Paths
Shared area paths can introduce inconsistency and confusion.
Searching for common nodes across area paths
How can we find area path with specific text in their name?
Use Active Directory Groups in your unified classic CI CD pipelines
Instead of managing permissions for users in Azure DevOps, we use Azure Active Directory groups to fine tune permissions
Use the move to team project feature with caution!
The "Move to Team Project" feature can reset your work item state and dates
Pull Request is your friend not foe!
There is a debate around the value of pull requests (PR), fueled by unfortunate misunderstandings.
Benefits of boundaries
Simple isn't easy, but it is the only way to build anti-fragile systems
Why extract methods when modifying legacy code?
Legacy code is hard to test, so extract methods by writing micro tests
Benefits of frequent deployments
The longer the wait to deploy, the bigger the risk of things going south
Hypothesis-Driven Development
Developing a feature without formulating a hypothesis is like shooting in the dark
The cost of avoiding change
Change is stressful and risky, but avoing it is even riskier
How does it feel to write software when doing TDD?
Any discipline requires serious investment in time
Feature-flag Driven Development (FFDD)
Replace physical modularity with logical modularity