Spanish-American philosopher George Santayana was quoted as saying, "those who cannot remember the past are condemned to repeat it." Santayana's conclusion provides a great deal of merit. One could, therefore, express that "those who know or understand the past are not likely to repeat it." Right?
Personally, I would agree with the secondary expression, but only if a small disclaimer that says, "unless you are working in information technology" is added.
Within the last 12 months, an Agile team that I am familiar with worked on a solution that was replacing an existing application. The legacy application already had a database, but the team was set on using a new database with the application, moving from one database provider to another.
Since the team was Agile in their approach, they would be introducing a set of features within each sprint cycle. In the meantime, end-users would use functionality from the old application in cases where the new functionality did not exist yet.
The team decided that they would use a middleware product to keep the old application in sync with the new application. Then, when they finally reached the point where the legacy application was no longer needed, they would stop the sync process and retire the legacy application.
What may have sounded good in a project room or looked great on a whiteboard, turned out to be an unfavorable situation when the middleware solution attempted to keep the two applications "in sync" with each other. The process of keeping two databases in sync with each other turned out to be far more difficult than they expected.
In hindsight, the team realized that use of Data Transfer Objects (DTO) could have been created in the new application, which represented the target state, while still utilizing the legacy database via a translation at the model layer. Taking this approach would have kept the data in one location. Then, a future Sprint could be focused on migrating to the intended database provider and schema.
The Lesson Not Learned
Fast forward from that situation to earlier this year and a similar example could be found. The background is nearly the same: a team is planning to replace an existing application. They are going to deliver results via an Agile approach, providing new features and relying on the legacy application for items that haven't been addressed yet.
The team also wants to utilize a new database (again with a different provider) and plans to implement a middleware process to keep the two applications in sync with each other. Sound familiar?
Upon hearing this information, one of the team members from the original scenario spent time with the development team, sharing the history and challenges that were faced. This individual, who is a well-respected architect-type person, conveyed the lessons learned and thoughts on how the approach should be modified based upon the prior results.
In the end, the team decided to stick with their original plan, which has a very good chance of falling into the same pitfalls that were encountered during the prior instance. The efforts to avoid a similar situation failed.
I joked in the intro that I would believe the idea of "those who know or understand the past are not likely to repeat it" is probably true everywhere except in the world of technology. Unfortunately, I believe this situation is far more wide-spread than just the world of Information Technology. I am not sure if this inability to learn from our mistakes is intentional or if those driving initiatives just don't believe the same results will occur.
Courses on history in my primary and advanced educational programs were never a favorite of mine. Yet, I have undoubtedly seen the value of understanding historical aspects within my career in Information Technology. Perhaps, if there would have been a history course focused on mistakes within Information Technology, I would have gained a better of appreciation back in those days.