How We Work

At disruptiveOps we utilize Agile, Lean, and DevOps approaches along with eXtreme Programming (XP) inspired practices and techniques to continuously deliver value. Below is a summary of how we plan, code, build, test, and deliver value. Please signup to be kept informed of changes and be sure to email us if you have any suggestions for improvement.

Agile & Lean

All phases of our Software Development Life Cycle (SDLC) are influenced by Agile principles along with Lean Thinking. Because we value principles over prescription, our hybrid approach empowers our teams to do what they feel is most optimal for the customer and to a (barely) lesser extent, the other teams. Via constant communication, team members are afforded ample opportunities to reflect on past decisions and build consensus on how to move forward based on what they learned.


In order to continually deliver value and a greatly reduced investment we full embrace what DevOps is supposed to be all about. We place a heavy emphasis on providing opportunities for everyone to gain experience across all phases of the SDLC and every tool in our technical stack. As well, we utilize common DevOps practices like Continuous Integration, Continuous Delivery/Deployment, Continuous Automated Testing, and Continuous Monitoring.

All team members have the breadth and depth of skills and experience to be truly end-to-end cross-functional. Having end-to-end cross-functional teams means that anyone can help with any of the DevOps practices so that we can release into production more often. From an individual standpoint, teammates receive the satisfaction of expanding their skillet and problem solving skills as well as knowing how they positive impact disruptiveOps and its customers on a daily basis.

Coding Framework

We have gravitated toward the XP framework because of how well it aligns with our overarching Agile & Lean approach, most notably how it stresses customer satisfaction, empowerment, and responding to change. Because XP emphasizes teamwork above all else, everyone is considered an equal partner in a collaborative team (leadership, management, stakeholders, customers., developers, etc.).

Transparency & Flow

disruptiveOps utilizes Kanban to manage our work and provide transparency. To reduce cycle time (time from state to state) and lead time (time to delivery) we apply Lean Thinking to constantly seek ways to eliminate and reduce waste in how we work.

With our use of GitLab Enterprise Edition, we are able to leverage its issue board (Kanban board) capability. Having this capability within the same tool our teams are already using allows them to track and communicate work easily and without concern for keeping information synchronized. As well, having this capability forgoes any additional cost needed for other software or services to manage our work.

Technical Stack

We favor the .NET technical stack but we also leverage web-friendly tools and frameworks in order to meet the Bring-Your-Own-Device (BOYD) philosophy because you should be able to access your data and notifications on any device. Below is our primary technical stack.

.NETC#6C# BlogLearn C#
.NET.NET Framework4.6.1.NET Framework CommunityLearn About the .NET Framework
CSSCSS3Learn About CSS
DataSQL Server2016SQL Server Blog
Export LibraryEPPlus4.5.2.1
Export LibraryPDFsharp1.32
JavaScriptDataTables1.10.18DataTables Blog
JavaScriptFlot0.8.3Flot Blog
JavaScriptjQuery3.3.1jQuery BlogLearn jQuery
JavaScriptjQuery UI1.12.1jQuery UI BlogjQuery UI Documentation
JavaScriptJQuery Validation1.17
JavaScriptMoment.js2.22.2Learn Moment.js
JavaScriptSelect24.0.6Select2 Forums
Version ControlGitLab10.6.0-eeGitLab Blog
Version ControlGit2.20.1
Git Mailing List
FontFont Awesome5.2.0Font Awesome Blog
TestMarkup Validation Service18.11.5
NUnit Blog
SonarLint Blog
SonarQube Blog
TestW3C Link Checker4.8.1
MessagingMicrosoft Teams1.1.0
Microsoft Teams Forum

How We Test

Type of Test
CSS ValidationW3C CSS Validation Service
HTML Markup ValidationW3C HTML Markup Validation Service
Static Code AnalysisSonarQube
Static Code Analysis - LinterSonarLint
Test CoverageOpenCover

User Experience – User Interface

To provide a great User Experience (UX), we exploit the concepts of User Centered Design (UCD) to include continual solicitation for improvement and constant analysis on the information being captured and its quality to provide impactful insights.

Our approach for a highly effective User Interface (UI) is to utilize modern tools for cross-browser compatibility like HTML5, CSS3, JavaScript, and Vue.  Visually, we utilize the United States Web Standards as that aides in having a consistent UX.

Cloud Exploitation

Utilizing Microsoft Azure, we are able to completely develop, build, test, and deliver in the cloud. The primary capabilities we exploit include those below.

Learn more about our Continuous Delivery approach within Microsoft Azure.

Services-based Approach

When planning and designing new features, we consider code reuse, extendability, and use by the customers should they want to leverage data outside of our web applications. This service-oriented approach sets us for for success as we are moving towards a true microservices architecture so that we can further exploit cloud capabilities.

From an infrastructure standpoint, we leverage cloud-based services within Microsoft Azure like SaaS for our web applications and services, PaaS for our development and testing platforms, and Infrastructure as-a-Service (IaaS) for our IaC approach to dynamically build testing environments.

Software-as-a-Service (SaaS)Platform-as-a-Service (PaaS)Infrastructure-as-a-Service (IaaS)
Hosted ApplicationsDevelopment ToolsOperating Systems
Hosted ServicesDatabase ManagementServers
Business AnalyticsStorage
Networking Firewalls/Security

Building Quality In

Our design and development philosophy is based on preventing defects and vulnerabilities vice finding them. To better ensure prevention we maintain a test-first mentality throughout all of our development practices be they code, scripts, or data. As the method-level, we strive to maintain an 80% unit test code coverage for new and refactored code using NUnit. Just above the method-level we focus on integration testing, again with NUnit. As we take a service-based approach we are able to reuse a lot of our code and thus eliminate re-coding and re-testing what is already in our arsenal.

To catch quality concerns and vulnerabilities as we code, our developers utilize SonarLint. Catching issues in a Just-In-Time manner reduces the Static Code Analysis feedback cycle, with SonarQube, that gets trigger each time code is checked into the mainline.