Everyone hates the legacy application and wants to replace it. You're tired of the brittle, untested code, the outdated frameworks, the platform nobody cares about anymore. You want to apply current practices and the productivity gains of today's tools. Usually this is just a frustrated dream, but every once in a while, you actually get to do it. That's great news, but it raises a question: how do you do that?
In this presentation, we'll examine the issues encountered by a business undertaking the enormous effort of replacing a key legacy application with a new technology stack. We'll explore the technology, business, and people problems that can result, looking at specific technology solutions for a slow and careful migration of business-critical functionality off of one system and on to another of a very different kind.
6. Housekeeping
Audience
via Negativa
Disable write-only mode
7. Housekeeping
Audience
via Negativa
Disable write-only mode
Tim Berglund
www.augusttechgroup.com
tim.berglund@augusttechgroup.com
@tlberglund
8. Housekeeping
Audience
via Negativa
Disable write-only mode
Tim Berglund
www.augusttechgroup.com
tim.berglund@augusttechgroup.com
@tlberglund
Sponsored by No Fluff Just Stuff
15. Slaying the Dragon
St. George
Untestable
Brittle
Orphaned framework
Low productivity
16. Slaying the Dragon
St. George
Untestable
Brittle
Orphaned framework
Low productivity
Downtime
17. Slaying the Dragon
St. George
Untestable
Brittle
Orphaned framework
Low productivity
Downtime
Poor performance
18. Slaying the Dragon
St. George
Untestable
Brittle
Orphaned framework
Low productivity
Downtime
Poor performance
Frustrated Users
19. Slaying the Dragon
St. George
Untestable
Brittle
Orphaned framework
Low productivity
Downtime
Poor performance
Frustrated Users
A Frustrated Business
120. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
121. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
122. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
Desire for quick fix
123. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
Desire for quick fix
Defensive behavior
124. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
Desire for quick fix
Defensive behavior
Reduced imagination
125. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
Desire for quick fix
Defensive behavior
Reduced imagination
You are dumb and mean
126. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
Desire for quick fix
Defensive behavior
Reduced imagination
You are dumb and mean
Solutions
127. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
Desire for quick fix
Defensive behavior
Reduced imagination
You are dumb and mean
Solutions
Is it rational?
128. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
Desire for quick fix
Defensive behavior
Reduced imagination
You are dumb and mean
Solutions
Is it rational?
Information
129. An Anxious Team
Bowen Theory
Results of Anxiety
Decreased ability to learn
Demands for certainty
Either-or thinking
Desire for quick fix
Defensive behavior
Reduced imagination
You are dumb and mean
Solutions
Is it rational?
Information
Deal with vectors
148. Overpromising
Motivations
Sealing the deal
Being a hero
Sunny optimism
Dimensions
Delivery time
Functionality
Nonfunctional improvements
Solutions
Iterate and measure
149. Overpromising
Motivations
Sealing the deal
Being a hero
Sunny optimism
Dimensions
Delivery time
Functionality
Nonfunctional improvements
Solutions
Iterate and measure
Publish incremental results
150. Overpromising
Motivations
Sealing the deal
Being a hero
Sunny optimism
Dimensions
Delivery time
Functionality
Nonfunctional improvements
Solutions
Iterate and measure
Publish incremental results
Focus on business drivers
152. Thank You
Tim Berglund
www.augusttechgroup.com
tim.berglund@augusttechgroup.com
@tlberglund
Sponsored by No Fluff Just Stuff
153. Photo Credits
Smaug Destroying Laketown
http://thespectacleblog.wordpress.com/2009/03/12/the-best-monsters-in-kid-lit/
1950s Era Kitchen of Questionable Sexual Politics
http://www.vintageadbrowser.com/household-ads-1950s#ad2x37yn4diylmqj
St. George and the Dragon
http://www.fromoldbooks.org/Cassell-MagazineOfArt/pages/337-St.-George-and-the-Dragon/
Che Guevara
http://www3.uakron.edu/worldciv/pascher/che.html
Typewriter Ad
http://www.vintageadbrowser.com/office-ads-1950s#adbz3ufs8ths6l8k
Slinky
http://www.vintageadbrowser.com/tools-ads-1950s/2#ad4g1wzxkuxkuuy0
Platform Shoe
http://www.flickr.com/photos/mediaeater/145813815/
Hipster
http://www.flickr.com/photos/jalex_photo/2102264370/
Truck, Vines, and Oil Cans
http://www.flickr.com/photos/m-louis/2065730338/sizes/l/
Rusty Oil Drums
http://www.flickr.com/photos/carsten_tb/3332082580/
154. Photo Credits
Painting Car
http://www.flickr.com/photos/schudio/3182465850/
Credible Hulk
http://www.flickr.com/photos/marcoveringa/3243701953/
Marine Corps Drill
http://www.flickr.com/photos/sis/121704669/
Vintage Circus Ad
http://www.vintageadbrowser.com/entertainment-ads-misc-years/16#admqdba5a2efbu10
Red Team vs. Blue Team
http://news.filefront.com/the-red-vs-blue-team-calls-it-quits/
Pitfall
http://www.flickr.com/photos/arkestra/323314605/
Ovid
http://commons.wikimedia.org/wiki/File:Latin_Poet_Ovid.jpg
Vintage Strange Contraption Ad
http://www.vintageadbrowser.com/electronics-ads-1940s/61#adj2cm4xmpjmhnyb
Blob
http://www.flickr.com/photos/zen/513338540/
Gears
http://www.flickr.com/photos/tim_d/155441805/
Editor's Notes
Test of speaking notes. If screens are set up properly, you should see this.
This talk is addressed to architects, but all developers, PMs, and business people can benefit.
This talk is about legacy code like Feathers’ book. This talk does not dwell on technical details. It points to many tools and disciplines, but we can’t cover it all without making it a several-day workshop.
I’m an independent consultant, developer, trainer. Work with UGs and IASA in Denver. NFJS speaker.
This talk is addressed to architects, but all developers, PMs, and business people can benefit.
This talk is about legacy code like Feathers’ book. This talk does not dwell on technical details. It points to many tools and disciplines, but we can’t cover it all without making it a several-day workshop.
I’m an independent consultant, developer, trainer. Work with UGs and IASA in Denver. NFJS speaker.
This talk is addressed to architects, but all developers, PMs, and business people can benefit.
This talk is about legacy code like Feathers’ book. This talk does not dwell on technical details. It points to many tools and disciplines, but we can’t cover it all without making it a several-day workshop.
I’m an independent consultant, developer, trainer. Work with UGs and IASA in Denver. NFJS speaker.
This talk is addressed to architects, but all developers, PMs, and business people can benefit.
This talk is about legacy code like Feathers’ book. This talk does not dwell on technical details. It points to many tools and disciplines, but we can’t cover it all without making it a several-day workshop.
I’m an independent consultant, developer, trainer. Work with UGs and IASA in Denver. NFJS speaker.
This talk is addressed to architects, but all developers, PMs, and business people can benefit.
This talk is about legacy code like Feathers’ book. This talk does not dwell on technical details. It points to many tools and disciplines, but we can’t cover it all without making it a several-day workshop.
I’m an independent consultant, developer, trainer. Work with UGs and IASA in Denver. NFJS speaker.
This talk is addressed to architects, but all developers, PMs, and business people can benefit.
This talk is about legacy code like Feathers’ book. This talk does not dwell on technical details. It points to many tools and disciplines, but we can’t cover it all without making it a several-day workshop.
I’m an independent consultant, developer, trainer. Work with UGs and IASA in Denver. NFJS speaker.
This talk is addressed to architects, but all developers, PMs, and business people can benefit.
This talk is about legacy code like Feathers’ book. This talk does not dwell on technical details. It points to many tools and disciplines, but we can’t cover it all without making it a several-day workshop.
I’m an independent consultant, developer, trainer. Work with UGs and IASA in Denver. NFJS speaker.
This talk is addressed to architects, but all developers, PMs, and business people can benefit.
This talk is about legacy code like Feathers’ book. This talk does not dwell on technical details. It points to many tools and disciplines, but we can’t cover it all without making it a several-day workshop.
I’m an independent consultant, developer, trainer. Work with UGs and IASA in Denver. NFJS speaker.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
St. George was originally venerated in Cappadocia, now known as Turkey. The origins of the myth are unclear, but the story is familiar: the town Silene is beset by a dragon (Ascalon) living in a lake. The peace is kept by feeding the dragons sheep, later children chosen by lottery, finally the king’s daughter. George appears on horseback, wounding the dragon with a spear, the fashioning the virgin’s corset (in the medieval version) into a collar and leading it back to down. George says I’ll kill it if you’ll repent and be baptized.
Anecdote about failed migration.
This is a large-scale action that you can’t sneak in like testing in Groovy.
Killing a dragon is great. You do a good thing, and people remember you. You learn a lot. You improve.
But it might hurt you! Be ready. Also, people usually won’t tolerate the risks unless they feel the pain.
Anecdote about failed migration.
This is a large-scale action that you can’t sneak in like testing in Groovy.
Killing a dragon is great. You do a good thing, and people remember you. You learn a lot. You improve.
But it might hurt you! Be ready. Also, people usually won’t tolerate the risks unless they feel the pain.
Anecdote about failed migration.
This is a large-scale action that you can’t sneak in like testing in Groovy.
Killing a dragon is great. You do a good thing, and people remember you. You learn a lot. You improve.
But it might hurt you! Be ready. Also, people usually won’t tolerate the risks unless they feel the pain.
Anecdote about failed migration.
This is a large-scale action that you can’t sneak in like testing in Groovy.
Killing a dragon is great. You do a good thing, and people remember you. You learn a lot. You improve.
But it might hurt you! Be ready. Also, people usually won’t tolerate the risks unless they feel the pain.
Anecdote about failed migration.
This is a large-scale action that you can’t sneak in like testing in Groovy.
Killing a dragon is great. You do a good thing, and people remember you. You learn a lot. You improve.
But it might hurt you! Be ready. Also, people usually won’t tolerate the risks unless they feel the pain.
Anecdote about failed migration.
This is a large-scale action that you can’t sneak in like testing in Groovy.
Killing a dragon is great. You do a good thing, and people remember you. You learn a lot. You improve.
But it might hurt you! Be ready. Also, people usually won’t tolerate the risks unless they feel the pain.
Anecdote about failed migration.
This is a large-scale action that you can’t sneak in like testing in Groovy.
Killing a dragon is great. You do a good thing, and people remember you. You learn a lot. You improve.
But it might hurt you! Be ready. Also, people usually won’t tolerate the risks unless they feel the pain.
Anecdote about failed migration.
This is a large-scale action that you can’t sneak in like testing in Groovy.
Killing a dragon is great. You do a good thing, and people remember you. You learn a lot. You improve.
But it might hurt you! Be ready. Also, people usually won’t tolerate the risks unless they feel the pain.
Nothing of scale can succeed without them. Groovy unit testing doesn’t need them, even if they exist.
Should be expressable in terms of some simple business abstraction (production cost, time to market, distribution, quality, etc.)
Probably not your job, but you’d better know these anyway.
Nothing of scale can succeed without them. Groovy unit testing doesn’t need them, even if they exist.
Should be expressable in terms of some simple business abstraction (production cost, time to market, distribution, quality, etc.)
Probably not your job, but you’d better know these anyway.
Nothing of scale can succeed without them. Groovy unit testing doesn’t need them, even if they exist.
Should be expressable in terms of some simple business abstraction (production cost, time to market, distribution, quality, etc.)
Probably not your job, but you’d better know these anyway.
Nothing of scale can succeed without them. Groovy unit testing doesn’t need them, even if they exist.
Should be expressable in terms of some simple business abstraction (production cost, time to market, distribution, quality, etc.)
Probably not your job, but you’d better know these anyway.
Nothing of scale can succeed without them. Groovy unit testing doesn’t need them, even if they exist.
Should be expressable in terms of some simple business abstraction (production cost, time to market, distribution, quality, etc.)
Probably not your job, but you’d better know these anyway.
Nothing of scale can succeed without them. Groovy unit testing doesn’t need them, even if they exist.
Should be expressable in terms of some simple business abstraction (production cost, time to market, distribution, quality, etc.)
Probably not your job, but you’d better know these anyway.
Nothing of scale can succeed without them. Groovy unit testing doesn’t need them, even if they exist.
Should be expressable in terms of some simple business abstraction (production cost, time to market, distribution, quality, etc.)
Probably not your job, but you’d better know these anyway.
An old version of something important is going obsolete. You have a new CIO who hates Java/loves Java/wants to make an impression.
An old version of something important is going obsolete. You have a new CIO who hates Java/loves Java/wants to make an impression.
An old version of something important is going obsolete. You have a new CIO who hates Java/loves Java/wants to make an impression.
An old version of something important is going obsolete. You have a new CIO who hates Java/loves Java/wants to make an impression.
An old version of something important is going obsolete. You have a new CIO who hates Java/loves Java/wants to make an impression.
An old version of something important is going obsolete. You have a new CIO who hates Java/loves Java/wants to make an impression.
It’s a good time to back up and take a fresh look at the old system.
It’s a good time to back up and take a fresh look at the old system.
The business understands the problem better now. The business has changed. Reexmaining old concept will lead to better features, less code. Previous hacks/workarounds can die. Smaller system, less waste.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Resist all change. The legacy system supports a business and works. Person-decades of effort have gone into it.
Does anybody really choose? Usually not. Probably there’s an enterprise standard, or an architect or tech-savvy executive has a preference or a relationship that makes the decision for you.
Does anybody really choose? Usually not. Probably there’s an enterprise standard, or an architect or tech-savvy executive has a preference or a relationship that makes the decision for you.
Choosing by hipness: might not be bad. Can be a strategic recruiting advantage, can expose you to new productivity gains.
Probably is bad, though. Resume-driven design is a moral failing.
Choosing by hipness: might not be bad. Can be a strategic recruiting advantage, can expose you to new productivity gains.
Probably is bad, though. Resume-driven design is a moral failing.
If you’re a Java shop, prefer Java as a platform. If you’re a PHP shop, consider staying there. You can change a team, but it’s hard.
If you’re a Java shop, prefer Java as a platform. If you’re a PHP shop, consider staying there. You can change a team, but it’s hard.
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
These debates are interminable. They are not useless, but in reality, you can probably build anything with anything. While specific characteristics matter, form is more important than function. What is the wood grain of the platform? What does the community care about?
Prototyping: a sticky wicket. Usually can’t find pain points in a simple demo. Hard to discern productivity advantages when you’re just dipping your toe in the water.
BUT NOT ALWAYS. Can be good on large-scale stuff. Also, you should always play around with new technologies; just recognize the limitations in doing so.
Prototyping: a sticky wicket. Usually can’t find pain points in a simple demo. Hard to discern productivity advantages when you’re just dipping your toe in the water.
BUT NOT ALWAYS. Can be good on large-scale stuff. Also, you should always play around with new technologies; just recognize the limitations in doing so.
We won’t get into many specifics. Writing the new app is just building code. Lots of help on how to do that. Go to No Fluff if you want to learn more. :)
It’s up to you to do the actual lancing of the beast, but there are some areas of interest we can discuss along the way.
We won’t get into many specifics. Writing the new app is just building code. Lots of help on how to do that. Go to No Fluff if you want to learn more. :)
It’s up to you to do the actual lancing of the beast, but there are some areas of interest we can discuss along the way.
We won’t get into many specifics. Writing the new app is just building code. Lots of help on how to do that. Go to No Fluff if you want to learn more. :)
It’s up to you to do the actual lancing of the beast, but there are some areas of interest we can discuss along the way.
The biggest issue is who lives and who dies. This affects everything.
The biggest issue is who lives and who dies. This affects everything.
When the legacy DB is bigger than just this app or has other reasons to live, you have to stick with it. This will limit your ability to improve things.
When the legacy DB is bigger than just this app or has other reasons to live, you have to stick with it. This will limit your ability to improve things.
This can help a little bit, like tylenol. Treating symptoms. In reality, domain modeling and schema design leak onto one another a lot. Tacit knowledge of ORM framework shapes domain design.
This can help a little bit, like tylenol. Treating symptoms. In reality, domain modeling and schema design leak onto one another a lot. Tacit knowledge of ORM framework shapes domain design.
This doesn’t mean the legacy database has to stay awful forever. You can reform an old schema a piece at a time. You need Liquibase and lots of help.
Interestingly, Ambler also holds the key to true migration.
This doesn’t mean the legacy database has to stay awful forever. You can reform an old schema a piece at a time. You need Liquibase and lots of help.
Interestingly, Ambler also holds the key to true migration.
This doesn’t mean the legacy database has to stay awful forever. You can reform an old schema a piece at a time. You need Liquibase and lots of help.
Interestingly, Ambler also holds the key to true migration.
This doesn’t mean the legacy database has to stay awful forever. You can reform an old schema a piece at a time. You need Liquibase and lots of help.
Interestingly, Ambler also holds the key to true migration.
This doesn’t mean the legacy database has to stay awful forever. You can reform an old schema a piece at a time. You need Liquibase and lots of help.
Interestingly, Ambler also holds the key to true migration.
This doesn’t mean the legacy database has to stay awful forever. You can reform an old schema a piece at a time. You need Liquibase and lots of help.
Interestingly, Ambler also holds the key to true migration.
This doesn’t mean the legacy database has to stay awful forever. You can reform an old schema a piece at a time. You need Liquibase and lots of help.
Interestingly, Ambler also holds the key to true migration.
The new schema comes to life alongside the old, and triggers synchronize them. Assumptions of triggers.
If triggers won’t work, you can try ETL—with time constant constraints.
Also consider nontraditional NoSQL solutions.
Concurrency scenarios.
The new schema comes to life alongside the old, and triggers synchronize them. Assumptions of triggers.
If triggers won’t work, you can try ETL—with time constant constraints.
Also consider nontraditional NoSQL solutions.
Concurrency scenarios.
The new schema comes to life alongside the old, and triggers synchronize them. Assumptions of triggers.
If triggers won’t work, you can try ETL—with time constant constraints.
Also consider nontraditional NoSQL solutions.
Concurrency scenarios.
The new schema comes to life alongside the old, and triggers synchronize them. Assumptions of triggers.
If triggers won’t work, you can try ETL—with time constant constraints.
Also consider nontraditional NoSQL solutions.
Concurrency scenarios.
The new schema comes to life alongside the old, and triggers synchronize them. Assumptions of triggers.
If triggers won’t work, you can try ETL—with time constant constraints.
Also consider nontraditional NoSQL solutions.
Concurrency scenarios.
The new schema comes to life alongside the old, and triggers synchronize them. Assumptions of triggers.
If triggers won’t work, you can try ETL—with time constant constraints.
Also consider nontraditional NoSQL solutions.
Concurrency scenarios.
The new schema comes to life alongside the old, and triggers synchronize them. Assumptions of triggers.
If triggers won’t work, you can try ETL—with time constant constraints.
Also consider nontraditional NoSQL solutions.
Concurrency scenarios.
Sometimes there are good reasons not to do this with triggers, like changing database technologies or scale considerations. This is difficult, but answers may exist.
Sometimes there are good reasons not to do this with triggers, like changing database technologies or scale considerations. This is difficult, but answers may exist.
This is a good time to consider whether legacy content belongs in an RDBMS.
This is a good time to consider whether legacy content belongs in an RDBMS.
Are there lots of blobs? That’s a smell.
Good solutions for nonrelational content.
Good solutions for nonrelational content.
Good solutions for nonrelational content.
Good solutions for nonrelational content.
To make a credible go at this, you need tooling. Liquibase provides this.
To make a credible go at this, you need tooling. Liquibase provides this.
If this is your existing team, they’re probably up to the task. But is this your team? Will yours need formal training? Do they want to learn new things? Have they demonstrated an ability to learn? Does a sober assessment of your team tell you they can do this?
If this is your existing team, they’re probably up to the task. But is this your team? Will yours need formal training? Do they want to learn new things? Have they demonstrated an ability to learn? Does a sober assessment of your team tell you they can do this?
Maybe that’s not your team. If you’re refactoring to a new technology, can you hire for it? Downside to cutting-edge tech: hard to recruit. How to look for relevant experience. Look for related, foundational, and analogical technologies. Consider your market.
Maybe that’s not your team. If you’re refactoring to a new technology, can you hire for it? Downside to cutting-edge tech: hard to recruit. How to look for relevant experience. Look for related, foundational, and analogical technologies. Consider your market.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Anxiety is a threat response. Cognitive resources are conserved to deal with the threat. This makes us unpleasant to deal with, particularly when the threat is misperceived.
Much more to be said about relational systems as they apply to the workplace. Most of this is out of scope, but you *will* deal with anxious people if you’re refactoring a legacy system of any size.
Fred Brooks: "The second is the most dangerous system a man ever designs." (p 55)
Throw in all the things you thought of the first time. Only applies if the same architect is building the second one, or knew the first one very well.
You had to live with all of these problems all this time. And they were your fault! Finally things can be made right.
Related: the “now’s our chance” dynamic of sneaking functionality in. This can afflict anyone.
We’ve talked about how rebuilding a legacy system interacts with the business, how you should approach it to maximize your reputation, reasons businesses do this, how to choose a platform, how to deal with the database, what impacts this can have on people, how to employ web services, and what kinds of pitfalls we can find. This is a difficult task, and it will always be painful, but it can be done.