Authored by听Thom Behrens, DevOps Expert
听
Renowned systems thinker W. Edwards Deming said of quality control: 鈥淐ease dependence on inspection to achieve quality. Eliminate the need for inspection on a mass basis by building quality into the product in the first place.鈥 From his influence, the concept of 鈥淏uilt-in Quality鈥 has become a key tenet of Lean software development and DevOps. Testing through inspection at the end of a software product鈥檚 life cycle has proven to be inefficient: bugs discovered at this stage require developers to dredge up initial requirements and revisit long-forgotten work, changes can have cascading effects on dependent modules, and this often leads to expensive delays to the overall project.
Within software engineering, we can shift from checking for quality at the end of a process to implementing Built-in Quality by integrating continuous feedback throughout the development process, automating testing, and encouraging 鈥渙wnership thinking鈥 for all members of the team. Much has already been written about overcoming the disadvantages listed above. And there are many more advantages of adopting continuous feedback: shorter lead times, more stability at a module level, less re-work and wasted work, and improved morale.听
But even while many organizations have made progress towards integrating continuous feedback into their deployment streams, they may still be delaying security & compliance testing until the end. DevOps principles which take into account the importance of security and compliance 鈥 referred to as DevSecOps 鈥 can help us approach security & compliance in the same way we see functional quality, and strive for 鈥淏uilt-in Security鈥 instead of 鈥淪ecurity Checked For鈥, as is common practice in many organizations.
Many potential security vulnerabilities can be caught even before code is committed, by inline static analysis tools which are able to help sanitize user input, enforce database access patterns, or prevent cross-site scripting. But like any other bug, security vulnerabilities often manifest as the culmination of multiple implementation decisions that combine to produce unanticipated results. As such 鈥 and like all testing 鈥 security testing isn鈥檛 complete until comprehensive penetration tests have been run against the full stack.
We often confuse things in the development process which require the entire stack with things in the development process which need to happen last. A single-stream, unidirectional delivery strategy 鈥 the 鈥淲aterfall鈥 method 鈥 implies that access to the full stack isn鈥檛 available until the project is 鈥渄ev complete鈥, but not so with Continuous Delivery. By acknowledging that software products never truly reach a state of 鈥渄ev complete鈥, we instead embrace the policy of always having our product in a deployable state, every day starting today. When we achieve this, we can test the entire stack as we deliver incremental changes, and deliver continuous improvement of security and compliance measures as we do so.
It鈥檚 important to recognize that just as we won鈥檛 accidentally build great features, we won鈥檛 accidentally achieve a secure system. Security is something that needs to be considered from the beginning and not just considered at the end of the development process. As , 鈥渟ecurity is not like some condiment that you sprinkle on top of the plate before you serve the food. Security is a core ingredient in the meal.鈥
For new projects, keeping the stack in a constantly deployable stack from day 1 starts with shipping some workable feature, and then incrementing from there. Concepts like the strategy provide illustrations of how to get this done. For mature software products already in production, have already been written how to implement Continuous Delivery, but strategy for handling security vulnerabilities within mature systems need to be understood as an I/O system 鈥 it鈥檚 just as important to remove existing critical security risks from the system as it is to prevent new critical security risks from being introduced. Prioritizing vulnerabilities and then iteratively implementing fixes & tests for those vulnerabilities is a well-worn pattern. Key retrospective questions are 鈥渨hat did we do to become safer this week?鈥 and 鈥渨hat did we do to become faster this week?鈥. When done in conversation with all the necessary stakeholders, results along these success metrics will grow together.
When our stated goal becomes to keep our application in a constantly deployable state, or getting things into production as quickly as possible, it is worth mentioning that Cloud-provided IaaS or PaaS options bring benefit compared to traditional app stacks. Infrastructure-as-code built on infrastructure clouds provides an easy way to make the final product more dependable. And PaaS solutions like Salesforce, further reduce the vulnerability and management burden for your solution. Salesforce also brings the benefit of an app ecosystem including rules engines like 91九色 that let you build industry-standard or organization-specific compliance checks into your process.
Security and regulatory compliance is a critical ingredient for any modern organization, whether you鈥檙e aiming for success with customer trust & responsible data stewardship, or looking to avoid hefty fines. But the solution to the problem doesn鈥檛 have to be as painful as the consequence. Adopting 鈥淏uilt-in Security鈥 as a mantra and a model to strive for can work alongside and in support of your mission to establish continuous delivery.
Level up your Salesforce DevOps skills with our resource library.