Presentation at DDD Melbourne in July 2013 by Venetia Bird and Nigel Fernandes. The talk focuses on dealing with legacy systems and complexity. They discuss the developer techniques to evolving an architecture thats better able to handle business evolution.
15. 1. Legacy Systems
2. Kitchen Sink Applications
3. Monolithic Applications
4. Complexity
We’ll talk about dealing with 4 things:
…and what we learnt along the way.
36. “I do believe that complexity is the enemy.
Until we better understand complexity, our
chances of building better IT systems is
limited. The first thing we must understand
about complexity is that not all complexity is
equal. And the complexity on which most
people focus is probably the least complex
complexity of all.”
http://simplearchitectures.blogspot.com/2009/03/cancer-of-complexity.html
Roger Sessions
46. What’s inside the nuget
package?
Puppet manifests
Environment
Configurations as JSON
Install Script in
Powershell
Zip’ed up application
47. Proget to manage
the packages for the
environments
Dev Feed
Test Feed
Staging Feed
Production Feed
48. Push button deployment
1. Hey Bamboo,
deploy v0.1.7 to
staging
3. Hey Choclatey,
install version 10
4. Proget Staging
Feed, give me, v0.1.7
6. Unpacks the
box and
runs the install
script
2. Powershell over winRM
5. Here you go!
Staging
Server
Legacy systems tend to be organic meaning they are used so difficult to not add new features
Rather than trying to get the right decision now, look for a way to either put off the decision until later (when you'll have more information) or make the decision in such a way that you'll be able to reverse it later on without too much difficulty.
Typical pipeline and tasks
Once the compile has completed, and the test have passed we use Nuget to create a package.
The CI server/Bamboo publishes the packages to Proget.Proget is the tool we used to host our packages for each environment (DEV, TEST, STAGE, PROD)
Request / trigger to deploy2. Our CI server (Bamboo) runs Powershell script over winrm session to the target machine to tell chocatelycmd to go and install a particular version of the application (package name and version3. A choclatelycmd on the target env (say Development) makes a request to the proget server requesting the version of the application4. Proget responds and the application is downloaded 5. The choclatelycmd unpacks the downloaded packages and runs the install script.
Checks its on the right target envFinds envconfig, thenUses envconfig with puppet manifest to configure the envThings like iis, folder permission, copies files and whatever else it needs to doHas everything it needs to install itself onto the environment
The shipped package has everything it needs in order to install itself on the environment. Single application per server.
Tested the deployment scripts by:Creating a dummy packagingKinda like the canary testing for gas down a mineshaftCreated orchestration project to test our deployment scripts.By creating a dummy package and then using our deployment scripts to get this package through all the environments
Testing means different things to different people in different contexts:Context of pipeline, in order to get to the next stage of the pipeline, a suite of tests need to be satisfied.For example:After checkout and compilation ran unit and integration tests
Testing of a single class
Class would call out to say a repository -> testing the integration worked between those parts of the system. Testing classes interacting with soap end-points.
TEST tests or black box testing, where we test different parts of the application are working together as they should. (IIS Express for example)After deployed to target env (DEV)Finally UI acceptance tests, which is testing how different applications and systems are interacting to complete user journeys in the Value Stream. Represents direct business value. i.e sponsoring a child
Timing & costLots of unit tests fast, cheap easy to maintainService integration / black box testsMinimal UI acceptance tests most expensive, slowest and brittle
So how do we know if all this effort is working.. Are we becoming more responsive..