You see,
I'm a person who loves to write code, travel around the world, take nice
pictures and eat!!! But nothing less than that, I also enjoy running
(especially in the morning!!!, ). It's amazing to have that feeling of the
fresh air, smell of the grass and sense the muscles working while observing the
surroundings. My running helps me to do my job better because it helps clear my
mind, relieves stress and builds a lot of confidence. Its provides me with
those moments with great ideas and solutions to most of the problems you have
at work or life. By the time you finish running, you have already set up the
goal for the day with a certain amount of clarity about the activities that you
have to do.
The more I
started running, the more I loved challenging myself with those extra miles and
pace. But with my overgrowing excitement, I was making the obvious mistake.. I
was running too much, too soon, too fast. While doing so, I forgot about the
"little things" that help stay healthy and flexible. I started getting
injuries, my hips and hamstrings were always tight. I was breaking down with
back pain and injuries. I knew I was doing something wrong and it was time to
get an expert advice. Having heard the back pain story many times, the physio
explained me about the importance of 'Core' muscles and the exercises to do
that would strengthen my muscles and improve my core stability. He suggested
doing squats, swimming, pull ups, crunches etc. So I decided to give my running
a break and focus on core building. It felt a bit off in the gym doing all
those non equipment exercises while everyone else was lifting those 20/30 kg
dumbbells, but a month after training, I started noticing the difference. I
felt more stronger with increased muscle mass, my posture was better, lost some
body fat and I was more agile!!! I started running again and this time I
noticed the difference immediately. My core helped me to maintain an efficient
running form helping with better
stability, balance, posture and overall control.
In short, lesson
learnt from my running experience. "Ignoring core strength in your
training program may look like working for a short term, but is a recipe for
long-term disaster. Lack of core-strength and flexibility causes your body to
find a path of resistance towards running or cause the body to adapt in a
negative fashion that will most likely lead to complex injuries!!!"
Well how
does this relate to continuous delivery and DevOps? The answer is , before
immediately adopting a CD tool and start working on the pipeline, you should prepare
the teams and the organization with the core of continuous delivery. The core
practices like version control, build automation, test automation and continuous
integration increases software process agility and helps create an organizational
culture and structure to fully embrace CD.
In this
post, I’ll describe some of the core practices of continuous delivery that helps delivering software feature more
frequently and reliably.
Version control everything
Putting everything
in version control (source code, build scripts, test scripts and data setup, monitoring
scripts etc.) This helps in keeping track and control everything. Keeping track
of the changes gives the flexibility of undo or replay any changes easily in
all environments including production. You can also understand who made a
change and why. Version controlling also creates the first level of built-in
safety net, preventing any out of process, locally made changes or manual
overrides from entering the production environment. Every change a developer
makes must in the source control, any failure to do so will be overridden in
the next deployment if not present in the source control.
Practice TDD
TDD is a
software development approach where the development of code is driven by first
writing an automated test case, followed by writing the code to fulfill the
test and then refactoring. With continuous delivery, it’s very important to
have the tests pushed into source control along with the implementation code.
This helps in ensuring that every new code pushed will be tested in the same
build process. This eliminates the risk of delivering to production the code
that does not meet quality requirements.
These
automated tests helps identify errors in a really short period of time. These
tests give developers very fast feedback when something breaks. These tests are
also called change detectors. When you make a change, the tests will detect
very soon if there are any problems or mistakes. With continuous delivery
organizations need the have the ability to make frequent releases of their
software without the risk of breaking existing features or adding new bugs. The
success of the business depends on how fast it can react to changing
environments and address the new improvement suggestions with assurance.
Test-driven development is the methodology that makes such flexibility,
maintainability, and extensibility possible.
Continuous integration
"Continuous
Integration is a software development practice where members of a team
integrate their work frequently, usually each person integrates at least daily
- leading to multiple integrations per day. Each integration is verified by an
automated build (including test) to detect integration errors as quickly as
possible. Many teams find that this approach leads to significantly reduced
integration problems and allows a team to develop cohesive software more
rapidly." - Martin Fowler
Continuous
integration process runs ensures that the tests are executed every time a
change is pushed into source control and ensures that the new changes didn’t
break any other parts of the software. Every push automatically triggers
multiple tests. Then if one fails it’s much easier to identify where the error
is and start working to fix it.
Automate everything
Automation
is the heart of every successful continuous delivery transformation process and
the single biggest enabler for CD. The success of continuous delivery lies in
stable environments, consistent build and test process and happy releases.
Automation can be used to make the release process more deterministic and to
bridge the gap between development and production. Development teams can learn
from operations the value of automation and how to create automation scripts to
improve the overall process. Together the team is responsible for defining the
desired state of the infrastructure and convert this to code. The degree to
which your organization can achieve successful one click deployment process
that can be initiated by anyone whenever needed depends on the level of automation
at every stage. At the processes like code analysis, testing, environment provisioning,
defect detection and prevention at all stages should be automated. Any manual
tasks should be treated as technical debt and later picked up as part of the
sprint and addressed.
Test automation
The key to
building quality into our software is making sure we can get fast feedback on
the impact of changes. Test automation can automate some repetitive but
necessary tasks in a formalized testing process already in place, or perform
additional testing that would be difficult to do manually. Companies adopting
continuous delivery should ensure that when issues are identified they can be
managed and resolved quickly and definitively. The easiest and effective way to
achieve this is by having an automated test suite incorporated in the release
pipeline and CI process. This kind of a process where automated regression,
performance and security tests are constantly executed as part of the
deployment strategy helps identify issues early and deal with them before they
reach the later stages of the deployment cycle/pipeline.
Monitor and measure everything
Proper and
effective monitoring of the entire process and environments is important to
provide crucial information that ensure service uptime and optimal performance.
It's important to measure the progress of the approach to know whether teams
are improving or making progress. With the support of proper data and metrics,
it’s easy for teams to inspect the current way of working and come up with
ideas or processes to improve the overall CD/ DevOps movement. Measuring the
current capabilities and process helps teams determine the problem areas and
defined focus points for making a change.
An
important DevOps practice is to work with application monitoring and insights
to enable full end-to-end traceability in a product to provide both operational
insights and usage understanding
Keep focus
on these core practices and move forward with your continuous delivery
journey!!!
“….to
satisfy the customer through early and continuous delivery of valuable
software” - #1 of the twelve principles behind the agile manifesto.