agile database development - sdc2012
DESCRIPTION
Slides for my presentation about Agile Database Development at SDC2012 (Gothemburg - April 2012)TRANSCRIPT
Agile Database development
(with Visual Studio)
Jose Luis Soria
Göteborg, April 2012
Jose Luis Soria
• ALM Team Lead at
Plain Concepts
• Professional Scrum
Trainer at scrum.org
http://geeks.ms/blogs/jlsoria
@jlsoriat
Agenda
• Database development
• Agile development
• Agile database development
• Practices and tools
Database development
How databases work
• Databases are different from application code
– Application code is not changed while
running (even in dynamic languages, changes are not
persisted)
– Databases are changed while running
• Changes in data or database objects, made
while the database is online, have to be taken
into account while developing
Databases are changed while running
Take running database changes intoaccount while developing.
Have a proper policy for changes in place
Databases across environments
• We have to deal with several environments while developing
• Each environment has its own database
• These databases are used for different things
• These databases are in different states and versions, and contain different data
Databases are differentacross environments
Be prepared to change different thingsin different databases
Applying changes to databases
• Most times, any particular change can only be made one time. Once the change has been made, it is not possible to make it again
• Changes are difficult to be undone
Changes to databases are lastingand hard to be undone
Have a proper policy for changes in place.Have a proper policy for undoing
changes in place.
Agile development
Agile?
Twelve principles of AgileOur highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Working software is the primary measure of progress.
Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
Continuous attention to technical excellence and good design enhances agility.
Business people and developers must work together daily throughout the project.
Simplicity--the art of maximizing the amount of work not done--is essential.
Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
The best architectures, requirements, and designs emerge from self-organizing teams.
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Twelve principles of AgileOur highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Working software is the primary measure of progress.
Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
Continuous attention to technical excellence and good design enhances agility.
Business people and developers must work together daily throughout the project.
Simplicity--the art of maximizing the amount of work not done--is essential.
Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
The best architectures, requirements, and designs emerge from self-organizing teams.
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Agile database development
Early and continuous delivery of
valuable software.
Working software is the primary
measure of progress.
Welcome changing requirements. Sustainable development, constant
pace.
Deliver working software
frequently.
Continuous attention to technical
excellence and good design.
Business people and developers
must work together.
Simplicity.
Build projects around motivated
individuals. Give them the
environment and support they
need.
The best architectures,
requirements, and designs emerge.
What does it mean?
Early and continuous delivery ofvaluable software
Ability to deliver in a simple and quickway
Welcome changing requirements
Ability to introduce changesat any moment
Deliver working software frequently
Ability to deliver in a simple and quickway
Business people and developersmust work together
Development depends on business
Build projects around motivated individuals.Give them the environment they need
Proper environment and tools
Working softwareis the primary measure of progress
Development depends on business.Keep always
a functional version of the software
Sustainable development.Constant pace
Ability to introduce changesat any moment
Continuous attention to technicalexcellence and good design
Best practices: CI, refactoring, TDD…
Simplicity
Reuse.Work in small chunks
The best architectures, requirementsand designs emerge
Ability to introduce changesat any moment
Agile database development
Agile database development
• Be able to deliver database changes in a simple and quick way
• Be able to introduce database changes at any moment• Make database development dependent on business• Set up a proper environment and tools• Keep always a functional version of the database• Use best practices: CI, refactoring, TDD…• Reuse• Work in small chunks• Take running database changes into account while
developing• Have a proper policy for changes in place• Have a proper policy for undoing changes in place• Be prepared to change different things in different databases
How to do it?: practices & tools
Practices and tools
• Are going to help us to do database development properly
• Tools and demos for this session deal with relational databases (SQL Server). But principles are the same for other scenarios:– NoSQL (MongoDB, Azure Storage…)
– ORMs (Entity Framework, NHibernate…)
• Most things will also work with VS 11 and SQL Server Data Tools
Version control
• Treat database code like any other source code
– Enable several people to work on the same code base
– Make modifications available to the rest of the team in a controlled way
– Make it possible to set up Continuous Integration
– Use versioning features: compare, restore old version, combine…
• Use the same code, schema or approach to migrate any database in your environment
DemoVersion control for databases
Coding aids
• Visual Studio provides several aids for working with database code
– Intellisense
– Tracking and resolving dependencies
– Static analysis
– Refactoring
DemoCoding aids
Isolated development
environment
• Have each developer work in his own environment, which includes the database
– Self-contained
– Resembling production environment
– Automated (deployment, testing, etc.)
DemoIsolated development
environment
Unit tests
• Sometimes, database code can contain logic
• Database code can benefit from automated unit testing the same way as application code– Find problems early
– Facilitate change
– Simplify integration
– Self-document
– Drive the design
DemoDatabase unit testing
Continuous Integration
• Early warning of conflicting changes
• Immediate unit testing of all changes
• Constant availability of a "current" build for testing, demo, or release purposes
• Immediate feedback
• Modular, less complex code
• Quality code
Continuous Integration
principles
• Maintain a code repository
• Automate the build
• Make the build self-testing
• Everyone commits to the baseline every day
• Every commit (to baseline) should be built
• Keep the build fast
• Test in a clone of the production environment
• Make it easy to get the latest deliverables
• Everyone can see the results of the latest build
• Automate deployment
Continuous Integration
principles
• Maintain a code repository
• Automate the build
• Make the build self-testing
• Everyone commits to the baseline every day
• Every commit (to baseline) should be built
• Keep the build fast
• Test in a clone of the production environment
• Make it easy to get the latest deliverables
• Everyone can see the results of the latest build
• Automate deployment
DemoDatabase continuous
integration
Requirements drive changes
• Make changes in small chunks
• Changes are originated by requirements
• Make different changes for different requirements
Continuous deployment to any
environment
• Automating database migrations to any environment helps us:
– Easily roll forward or back
– Minimize disruption for changes
– Maximize reliability of deployment process
– Work incrementally (including DBAs)
Continuous deployment process
• Obtain the correct version of the
database
• Prepare the environment
• Initialize database and instance
• Initialize schema
• Initialize user credentials
• Populate database with reference data
• Have a rollback mechanism in place
DemoContinuous deployment
Database sync vs. delta scripts
• Syncing databases can lead to uncontrolled changes across environments
• It’s better to make changes the same way for all the environments
• We can use numerated delta scripts and tools like DBDeploy
Database sync vs. delta scripts
• Delta scripts– Great for greenfield development and Continuous
Integration
• Database sync– For legacy databases
– For non-agile, non-CI projects
– For changing data
– When you don’t have database under version control
• Other options– ORMs usually have their own mechanism to deal with
database changes. For example, migrations in Entity Framework
Dealing with data
• Reference data can be scripted
• Changes (delta scripts) should deal with existing data
• There are several ways to obtain data for testing– Using the application API
– Using backups
– Using data comparison tools
– Using data generation tools
Have we covered everything?
• Be able to deliver database changes in a simple and quick way
• Be able to introduce database changes at any moment• Make database development dependent on business• Set up a proper environment and tools• Keep always a functional version of the database• Use best practices: CI, refactoring, TDD…• Reuse• Work in small chunks• Take running database changes into account while
developing• Have a proper policy for changes in place• Have a proper policy for undoing changes in place• Be prepared to change different things in different databases
Any questions?
• Visual Studio Database tools http://bit.ly/dyN3wv
• VSDBCMD http://bit.ly/vB6G1
• Database changes done right http://bit.ly/wTOY01
• Continuous delivery http://continuousdelivery.com/
@jlsoriat