Scott W. Ambler
Author of Refactoring Databases: Evolutionary Database Design
About the Author
Scott W. Ambler is President and a senior consultant of Ronin International
Image credit: Scott W. Ambler's Home Page
Series
Works by Scott W. Ambler
Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process (2002) 131 copies, 2 reviews
Disciplined Agile Delivery: A Practitioner's Guide to Agile Software Delivery in the Enterprise (IBM Press) (2012) 40 copies, 1 review
Process Patterns: Building Large-Scale Systems Using Object Technology (SIGS: Managing Object Technology) (1998) 26 copies
More Process Patterns: Delivering Large-Scale Systems Using Object Technology (SIGS: Managing Object Technology) (1999) 19 copies
The Unified Process Transition and Production Phases : Best Practices in Implementing the UP (2001) 18 copies
Introduction to Disciplined Agile Delivery: A Small Agile Team's Journey from Scrum to Continuous Delivery (2015) 15 copies
Tagged
Common Knowledge
Members
Reviews
If you are using the Rational Unified Process, or considering doing so, and worried about applying it to a whole IT department rather than separate projects then this book could well be useful. The book has four parts - From RUP to EUP, Beyond Development, Enterprise Management Disciplines and Putting it all Together. Each section has several chapters and the chapters all start with a nice reader ROI section (showing the payoff for reading that chapter). The writing is clear and there are show more plenty of diagrams, tables and helpful tips.
The book starts of with some background in the RUP. I particularly liked the description of RUP as serial in the large and iterative in the small. Within the RUP there are also nine disciplines (Business Modeling, Requirements, Analysis and Design, Implementation, Test, Deployment, Configuration and Change Management, Project Management, and Environment). The authors outline 10 best practices they see as core to the EUP (they extend the original 6 in RUP) - Develop iteratively, Manage requirements, Proven architecture, Modeling, Continuously verify quality, Manage change, Collaborative development, Look beyond deployment, Deliver working software regularly and Manage risk. Each is clearly described.
In addition to the change best practices, EUP adds a Production phase and a Retirement phase. They point out that the Production phase is not just maintenance or just operations and support but both and more. I think that any organization building systems should spend as much time and effort thinking about production and running their application in production (which includes maintaining it over time) as they do in building it and I was glad to see this so strongly proposed. They also added an operations and support discipline, mostly but not entirely in the production phase. This discipline includes running the system and making hot fixes. I think the Retirement phase is overkill for most organizations but some will find it useful.
They also added some "Enterprise Management" disciplines for use outside the context of a project and this too is a good idea. The disciplines are Enterprise business modeling, Enterprise Portfolio Management, Enterprise Architecture (I particularly liked the idea that "modifiability" should be considered as part of an enterprise architecture - far too few organizations do this well and fail to differentiate between stable services and much more changeable ones), Strategic Reuse (Again I liked the called-out focus on this - without a real plan no reuse is going to happen), People management , Enterprise Administration and Software Process Improvement (Another good one and a timely reminder to all that you should keep improving your software processes)
Overall I liked the book, though it was a somewhat dry subject (as methodologies often are). There was a lot of good advice, some nice tips and some clearly hard-won experience being shared! show less
The book starts of with some background in the RUP. I particularly liked the description of RUP as serial in the large and iterative in the small. Within the RUP there are also nine disciplines (Business Modeling, Requirements, Analysis and Design, Implementation, Test, Deployment, Configuration and Change Management, Project Management, and Environment). The authors outline 10 best practices they see as core to the EUP (they extend the original 6 in RUP) - Develop iteratively, Manage requirements, Proven architecture, Modeling, Continuously verify quality, Manage change, Collaborative development, Look beyond deployment, Deliver working software regularly and Manage risk. Each is clearly described.
In addition to the change best practices, EUP adds a Production phase and a Retirement phase. They point out that the Production phase is not just maintenance or just operations and support but both and more. I think that any organization building systems should spend as much time and effort thinking about production and running their application in production (which includes maintaining it over time) as they do in building it and I was glad to see this so strongly proposed. They also added an operations and support discipline, mostly but not entirely in the production phase. This discipline includes running the system and making hot fixes. I think the Retirement phase is overkill for most organizations but some will find it useful.
They also added some "Enterprise Management" disciplines for use outside the context of a project and this too is a good idea. The disciplines are Enterprise business modeling, Enterprise Portfolio Management, Enterprise Architecture (I particularly liked the idea that "modifiability" should be considered as part of an enterprise architecture - far too few organizations do this well and fail to differentiate between stable services and much more changeable ones), Strategic Reuse (Again I liked the called-out focus on this - without a real plan no reuse is going to happen), People management , Enterprise Administration and Software Process Improvement (Another good one and a timely reminder to all that you should keep improving your software processes)
Overall I liked the book, though it was a somewhat dry subject (as methodologies often are). There was a lot of good advice, some nice tips and some clearly hard-won experience being shared! show less
Agile Modeling: Effective Practices for Extreme Programming and the Unified Process by Scott W. Ambler
Ambler's case for an agile modeling process is persuasive, although there's little evidence for or against. The cornerstone of the argument is to use whatever model is useful to you, and model only until you have enough information to go to the next step (modeling or writing code). It's a pragmatic approach, which is probably why it's convincing without being demonstrably successful. Ambler doesn't recommend or explain specific models, but the Appendix has a giant list of models used for show more business, requirements, analysis, design, architecture and infrastructure modeling. show less
Refactoring Databases: Evolutionary Database Design (Addison-Wesley Signature Series) by Scott W. Ambler
Scott Ambler and Pramod Sadalage wrote Refactoring Databases, they say, "to share their experiences and techniques at evolving database schemas via refactoring". The book, particularly in the thorough list of refactorings detailed in later chapters, reveals them to be experienced users of, and writers about, agile development approaches. Their core premise is that data and databases must evolve in the same way as code does - that is incrementally.
They argue persuasively that a big-bang, show more up-front approach to database design is unacceptable in a modern environment. There is simply too much change and too much uncertainty in the business world for this to be realistic. The basic techniques for evolutionary database design include refactoring (the topic of the book), evolving the data model, database regression testing and configuration management and developer sandboxes. This more evolutionary approach is going to be a big shock for many data professionals, something the authors note, but I think the need for effective evolution and ongoing development of applications and thus their databases is compelling. "Change time", the period after an application (or database) is first deployed is bar far the majority of the life of an application. Techniques that help you cope with this, like database refactoring, are a good thing. Database refactoring as described in the book, is part of an evolutionary approach and with development teams taking on SCRUM, XP and other agile methods it is more important than ever for database teams to do likewise. Many data professionals will likely have the same knee-jerk reaction I did when first approaching this - Why not just get it right up front? But if you believe that agile model-driven development is here to stay for code then you have to accept the need for the same approach to database design.
Martin Fowler's original book Refactoring: Improving the Design of Existing Code made the point that a refactoring must retain the behavioral semantics of the code and this is just as true in databases. The authors take great pains to explain refactoring in enough detail that it you can apply it constantly to keep the database as clean and easy to modify as possible. They emphasize repeatedly the value of test-driven or test first development - even in database design and deployment. The authors stress the importance of testing, especially regression testing, of all the components that access a database when refactoring it. They advise making refactoring efforts small as well as test-driven. They point out that refactoring should be done as a series of small steps and that database develops must not succumb to the temptation to combine refactorings into larger, more complex efforts. The need to treat database designs, and even data, as artifacts subject to change control comes through loud and clear.
The concept of a potentially very long transition period in which both the old and new schemas are supported is a particularly good one. I worry about the organizational dynamics of having the old schema removed by a new team that does not remember the original refactoring but nothing else seems rational in a typical environment where many applications run against the same database. I also liked the paranoia of the authors, for instance in their suggestion to always run regression tests BEFORE refactoring to make sure the database is actually as you think it is! While the book focused on refactoring, many of the hints and suggestions would be good for implementing real changes in business policy.
The book is a surprisingly easy read for such a potentially dense subject. The book starts by describing the fundamentals of evolutionary database development and the basics of refactoring. A process overview, deployment notes and some best practices follow. These initial chapters, designed to be read in sequence, introduce and explain the topic well and have a nice little "What you have learned section" at the end. There were many worthwhile asides in the book as it covers these topics and after these introductory chapters, the book then goes (somewhat abruptly) into a series of chapters on various kinds of refactoring - structural, data quality, referential integrity, architectural, method and transformations. These chapters take a series of very specific refactorings. The potential motivation, tradeoffs and implementation mechanics are defined for each. The refactorings are self-contained and, while this makes reading them as a set somewhat repetitive, it should make the book a much better reference guide for actual users.
The book did not really touch on how you should consider data and database designs used in analytic models or the potential value of using business rules, but these are minor quibbles. The book is well written, full of great examples and gives lots of good advice. show less
They argue persuasively that a big-bang, show more up-front approach to database design is unacceptable in a modern environment. There is simply too much change and too much uncertainty in the business world for this to be realistic. The basic techniques for evolutionary database design include refactoring (the topic of the book), evolving the data model, database regression testing and configuration management and developer sandboxes. This more evolutionary approach is going to be a big shock for many data professionals, something the authors note, but I think the need for effective evolution and ongoing development of applications and thus their databases is compelling. "Change time", the period after an application (or database) is first deployed is bar far the majority of the life of an application. Techniques that help you cope with this, like database refactoring, are a good thing. Database refactoring as described in the book, is part of an evolutionary approach and with development teams taking on SCRUM, XP and other agile methods it is more important than ever for database teams to do likewise. Many data professionals will likely have the same knee-jerk reaction I did when first approaching this - Why not just get it right up front? But if you believe that agile model-driven development is here to stay for code then you have to accept the need for the same approach to database design.
Martin Fowler's original book Refactoring: Improving the Design of Existing Code made the point that a refactoring must retain the behavioral semantics of the code and this is just as true in databases. The authors take great pains to explain refactoring in enough detail that it you can apply it constantly to keep the database as clean and easy to modify as possible. They emphasize repeatedly the value of test-driven or test first development - even in database design and deployment. The authors stress the importance of testing, especially regression testing, of all the components that access a database when refactoring it. They advise making refactoring efforts small as well as test-driven. They point out that refactoring should be done as a series of small steps and that database develops must not succumb to the temptation to combine refactorings into larger, more complex efforts. The need to treat database designs, and even data, as artifacts subject to change control comes through loud and clear.
The concept of a potentially very long transition period in which both the old and new schemas are supported is a particularly good one. I worry about the organizational dynamics of having the old schema removed by a new team that does not remember the original refactoring but nothing else seems rational in a typical environment where many applications run against the same database. I also liked the paranoia of the authors, for instance in their suggestion to always run regression tests BEFORE refactoring to make sure the database is actually as you think it is! While the book focused on refactoring, many of the hints and suggestions would be good for implementing real changes in business policy.
The book is a surprisingly easy read for such a potentially dense subject. The book starts by describing the fundamentals of evolutionary database development and the basics of refactoring. A process overview, deployment notes and some best practices follow. These initial chapters, designed to be read in sequence, introduce and explain the topic well and have a nice little "What you have learned section" at the end. There were many worthwhile asides in the book as it covers these topics and after these introductory chapters, the book then goes (somewhat abruptly) into a series of chapters on various kinds of refactoring - structural, data quality, referential integrity, architectural, method and transformations. These chapters take a series of very specific refactorings. The potential motivation, tradeoffs and implementation mechanics are defined for each. The refactorings are self-contained and, while this makes reading them as a set somewhat repetitive, it should make the book a much better reference guide for actual users.
The book did not really touch on how you should consider data and database designs used in analytic models or the potential value of using business rules, but these are minor quibbles. The book is well written, full of great examples and gives lots of good advice. show less
This book is sort of like a software development crash course — there's a few pages on almost everything from use cases to polymorphism. The information is well-supported (through citations and authorial experience), and it rang true for the parts about which I know something. The breadth is odd — I imagine most people, like me, know a lot about some parts of the full development process, and therefore didn't learn anything useful from those chapters. And the chapters that applied to show more parts of the process in which I've never participated were too brief to grasp any kind of working knowledge. show less
Lists
You May Also Like
Associated Authors
Statistics
- Works
- 24
- Members
- 1,007
- Popularity
- #25,603
- Rating
- 3.4
- Reviews
- 7
- ISBNs
- 73
- Languages
- 2
- Favorited
- 1














