How We Work
At Clearly Agile 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 Clearly Agile and its customers on a daily basis.
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
Clearly Agile 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.
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.
How We Test
|CSS Validation||W3C CSS Validation Service|
|HTML Markup Validation||W3C HTML Markup Validation Service|
|Static Code Analysis||SonarQube|
|Static Code Analysis - Linter||SonarLint|
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.
Utilizing Microsoft Azure, we are able to completely develop, build, test, and deliver in the cloud. The primary capabilities we exploit include those below.
- Infrastructure as Code (IaC) to dynamically create and start test environments that mimic production (reduced cost, waste, and risk)
- Platform-as-a-Service (PaaS) to deliver our solutions as Software-as-a-Service (SaaS)
- SQL Azure as our database platform across all environments (reduces cost and risks, eliminates maintenance for patching / hot fixes)
- Scripts to dynamically start and stop our Continuous Delivery Framework (reduce cost)
- Scripts to dynamically start, stop, backup, and restore non-production SQL Azure instances when not being used (reduces costs and waste)
- Active Directory Federation Services (ADFS) for single-sign-on across all environments, productivity tools, and development tools
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.
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.