This talk focusses on the technologies that can be adopted in order to enhance agility and speed of development through advances in system stability. We will span over techniques such as containerization, server-less architectures, logging technologies and application architectures that can have an immediate effect in an organisations' agility.
2. Some of the agile principles and goals:
•responding to change over following a plan
•continuous delivery of valuable software
•changing requirements even late in development
•deliver working software frequently
•working software is the primary measure of progress
•continuous attention to technical excellence and good design enhances agility
Agile goals
3. Do it quick, redo it even quicker and do it correctly
Today we will try to answer the question:
Is this possible without solid underlying technology and systems?
(and without breaking stuff?)
What do they mean?
6. Isolated changes are immediately tested and reported on when they are
added to a larger code base.
Goal: Rapid feedback of a possible defect being introduced into the code base
Testing methodologies: unit, functional, contract, behavioral, web browser
Tools: Jenkins, CircleCI, Shippable, drone.io, codeship
Continuous Integration
7. Extension of CI – SW that can be released to production at anytime
Follow deployment pipeline to ensure you go through all the stages
Goal: Faster reaction times, reduced risk
Continuous Delivery
9. Triggers in code and hardware to get information about application and
hardware performance
Goal: The more you measure and easier to view - the faster the reaction to
errors = shortened development cycles.
Tools:
•ELK
•New Relic / DataDog HQ, appneta
•Nagios, AWS cloudwatch
Logging / application monitoring
10. Developers should send code to production AS IS with small configuration
changes.
Consistent and portable environments
Most important aspect of 12 factor apps - central configuration
Goal: No more bugs due to inconsistent environments
Local Development Practices
11. Old technique - new trend
Deploy to production your local container (no more worked on my local)
OS agnostic / plays with all
Oldies know it as lxc
Most trendy is Docker
Containerisation
12. Robust architectures are stepping stones for developers to enhance stability
and development speed.
Goal: The more goodies developers have available the quicker the speed
Micro services / SOA - separation of code/logic to multiple reusable parts
Message buses / queues - put payload on bus and worry no more
Automated Fallbacks - queues, retries
Easy logging - easy to log errors in specific parts
Application Architectures
13. Building software without operating any servers
Speeds in developments are rapid
Offered by the use of cloud services (aws, gce, heroku etc)
Goal: Quicker speed to market with minimal operational and maintainance cost
Tools: Pioneer is aws with the offering of lambda, API gateway and the
connection of their event system
Server less architectures
14. Architectures that can be brought up and thrown away with the click of a button
Immutable: once created you don't change it - you only replace
Clustered: fault tolerant cluster with no master SPOF
Goal: Infrastructure is wholy replacable providing confidence to try and fail
Highlander Architectures
15. 12 months with 2 Senior FT resources to reach acceptable level
Local Development: Containers / clones of production with default local config
Classic Development Cycle: Local → Staging → Production
Continuous Integration: github and circleci. Container tested with mocha and
unit tests
Continuous Deployment: ansible tower callbacks (ansible). Upon merge in
github code is automatically tested and deployed
Infrastructure: Immutable, clustered architecture ad introducing serverless
microservices
Monitoring: New Relic, ELK, sensitive notification services (pd, pingdom,
elastalert)
Real life example
16. A good (and painful) long term investment
Methodology is necessary but developers need more tools
Providing these tools is a great addition to agile principles
Realization that without these tools agile is closer to fragile must be made
However, immense cost and effort is required to reach a good level
Once this tin opens then possibilities are endless
Conclusion