Spectrum of Integration Automation


“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, http://martinfowler.com/articles/continuousIntegration.html

In software development there is a spectrum of the degree to which a project team can automate integration of components, bug fixes, enhancements, and new features into a complete software product. In a 2000 article (revised in 2006), Martin Fowler describes the then-current state of this automation using the term Continuous Integration.  Fowler describes the tools and processes used to achieve this automation and the benefits of achieving Continuous Integration. Since then, many more tools and processes have entered the industry and it is becoming harder to fit all automated software development projects into a single definition of Continuous Integration. To help facilitate analysis and conversation around software development automation, I want to offer a set of terms describing various features of automation, how those features can be combined to achieve different levels of automation, and the benefits derived from each.

Features of Automation

Reproducible Builds

  • Builds are conducted from a version-controlled source of truth using a scripted process.
  • Provides traceability and accountability for every build of the system.
  • Previous builds can be reproduced with precision by another developer at a later point in time.
  • Enables troubleshooting of production issues outside of the production environment.
  • Eliminates the risk associated with variability of a manual build.

Automated Builds

  • Builds happen without manual intervention, reducing cost and freeing resources.
  • Build-time failures are identified quickly, reducing the cost of remediation.

Automated Unit Testing

  • Fails the build if individual components do not pass tests of basic functions.
  • Logical and functional failures in components are identified quickly, reducing the cost of remediation.

Automated Qualitative Analysis

  • Every successful build is analyzed for standards compliance, common coding mistakes, and security vulnerabilities.
  • Quality and technical debt can be tracked and managed to reduce the ongoing cost of maintenance.

Automated System Testing

  • Comprehensive testing that fails the build if components are not integrating properly when running in a simulated production environment.
  • Identifies runtime functional errors quickly, reducing the cost of remediation.

Automated Delivery

  • Successful builds are automatically deployed to selected environments for manual exploratory and user acceptance testing.
Automation features at various levels

Levels of Automations

Manual

  • No automation.
  • Builds are created by IDE export features, manually from the command line, or through other processes that are subject to human error and environmental variability.
  • “It builds on my machine” is a common refrain.
  • It is impossible to precisely reproduce a previous build with any reliability.
  • Automated tests (e.g. JUnit, Selenium) may exist, but they are not run consistently and automatically.
  • Individual developers may apply quality analysis tools, although inconsistently and with no formal enforcement mechanism.

Scripted

  • Builds are automated using a scriptable/configurable build tool: Ant, Buck, Gradle, Make, Maven, etc.
  • Build script may include running automated tests and qualitative analysis, but still lacks systematic formal enforcement.

Automated Integration

  • Builds are triggered automatically (typically nightly).
  • Automated tests (if present) are run.
  • Qualitative analysis may be performed.
  • Enforcement of testing and quality standards is now possible.

Continuous Integration

  • Developers integrate their changes into a central repository daily.
  • Builds are triggered continuously as changes come in.
  • Automated testing and analysis provide immediate feedback if breaking changes are introduced.
  • May include some level of automated system testing.
  • If deployment has been automated, CI should include automatically delivery of each build to a shared testing environment.

Continuous Delivery

  • A combination of rigorous standards compliance, up-front peer review, and automated testing at the unit and system level is sufficient that the team is comfortable promoting changes as soon as the lights turn green.
  • Builds and deployments are fully automated.
  • Any build that passes a final round of user acceptance testing can be promoted to production with a single click.

How Habits Steal Your Time (If You Let Them)


Filling The Void in Your Schedule

I made a casual reference this morning to how my habits and routines tend to expand to fill whatever "free time" I might otherwise have, causing me to defer other non-routine activities because "I don't have time." I don't even recall what my original point was at the time, but the idea that habits expand to fill a void in your schedule resonated with my audience. Time, essentially, is a scarce commodity, and "free time" is even rarer, so I find I have a natural tendency to allocate that time to familiar, comfortable, habitual leisure activities. Apparently, other people do this, too - or something like it. But often the non-routine activities that I put off nag at me. Maybe it is a chore I don't feel like doing, or a new and exciting leisure activity that might interest me but I'm putting off trying it out of habit. I do what is easy and familiar in the moment -  follow the path of least resistance.

David McRaney explains it very nicely, in the context of procrastination:
"This is why your Netflix queue is full of great films you keep passing over for “Family Guy.” With Netflix, the choice of what to watch right now and what to watch later is like candy bars versus carrot sticks. When you are planning ahead, your better angels point to the nourishing choices, but in the moment you go for what tastes good." 
Habit and routine taste good. Really, really good - to me, anyway. Habits are really powerful, and developing good habits (say, brushing your teeth) is a useful life skill. Indulging yourself, in moderation, is a good thing to do, too, so it is natural to find a free moment and think "I should go engage in my favorite leisure activity, indulge myself while I have a chance." But when those indulgences - those leisure activities - take on the form of habits, and you're just engaging in them because it is your normal routine, then there might be a problem: your routine might be expanding to fill a void in your schedule.

Nature abhors a vacuum. Gary Larson wrote that. So go out, break from routine, find something new, do something nice - and different - for yourself (or someone else). Take a walk on The Far Side.

Chrome OS v20

I just updated my Cr-48 to the latest version of Chrome OS - version 20, for those who are counting such things. Although the default mode still appears to be the familiar full-screen browser look, there's also a more desktop-ish mode available, complete with wallpaper.

Unfortunately, I fear that the days of the Cr-48 are numbered; this fancy new OS version seems to be testing the limits of my prototype hardware and page rendering is quite slow.

Oh, look, there's another update. Always fun to discover new stuff, but I wish these things came with change logs. Time to restart!