Sophisticated application stack refactoring / redesign strategies

I participate in a project maintenance plan that includes either major refactoring or a complete redesign. We have a very complex existing technology stack that has been developing organically for five years. I myself joined three years ago and was “caught up” by madness. This stack has been compiled based on the growing needs of the customer and is quickly becoming an uncontrollable hippo consisting of many technologies and uncontrolled data collection.

Our main goal is to make the stack more efficient and manageable and to create a more efficient system for managing data in the future. We would like to transform the tightly integrated Business Model and REST Controller, written primarily in PHP, into a single REST API.

Our PHP business model is based on the XML eXist database, which contains most of the data, and MySQL, which supports 2 of our sub-application data. We have a SQL and XQuery source code library for dynamically managing data in data warehouses. There are also parts of the business model that rely on Java code using the PHP-Java Bridge and SAXON and FOP to create PDF fax documents stored in an XML database. Since this is a web application, we use a combination of PHPTAL, XSLT, CSS, XHTML and JavaScript to facilitate the user interface of the client. Finally, we have a bunch of home scripts that control PHP, Apache, Perl functions that are controlled by Ant tasks.

The main functions of the stack are to simplify electronic forms for various user models. The simple philosophy underlying the application has been undermined over the years by a combination of client game, excessive use of hands by the end user, lack of system analysis, poor testing methodology and lack of future goals and a clearly defined area of ​​the project.

Currently, we plan to stop any further development, better describe a system that may or may not include the best unit test plans, and create the basis for the API using the same technological components. My reaction to the guitar is to come up with a solid volume and redesign the system using a well-supported programming language and framework that is well suited for writing a web API, perhaps some functions, but retaining the functionality that matters most. I would also recommend migrating existing data to a separate read-only platform.

My question for those who have been in similar situations:

  • How did you get out of this situation?
  • What planning steps will be useful for use in such situations?
  • Are there source control methods for these types of stacks? what am i looking for? - search keywords

I understand that there are no perfect solutions, and in order to answer these questions, I will need to clarify our projects. I cannot do this for various reasons. I have problems finding useful resources to help me approach this issue, and I would appreciate advice on how to proceed.

+6
source share
1 answer

Here are some questions I would ask or think about if I were in your place:

Database Design:

  • What information do you want to capture?
  • How to connect all this?
  • What reporting do you need to do?
  • What indicators do you want to collect?
  • When should old data be cleaned long before the long-term archive?

Application Design:

  • What can you create in the system now to make it less likely that clients should be "manual"?
  • What features are currently missing or missing?
  • Are there any easy changes you could make to expand your customer base?
  • Do you have an official coding standard? Is it forced?
  • What kind of testing do you want to require? (Unit testing, formal QA, etc.).
  • What documentation do you want to request? (Source code, end user, etc.).
  • What metrics do you use to determine how well apps work?
  • Looking back three years when you started - knowing that you know now what design decisions you want to implement, then?

Software:

  • Is it possible to provide the same services at the same level using a smaller set of technologies?
  • What technologies are most familiar to your existing employees?
  • If you need to hire more people, which technologies are the easiest to use on an ongoing or advisory basis?

Equipment:

  • Does your existing equipment fit your needs? If not, what do you need? More servers? Big servers? Load balancers? and etc.
  • Are you currently using virtualization?

Personnel:

  • Do you have a “purchase” from all interested parties? If not all of them, will you at least buy from decision makers?
  • Do stakeholders understand how big this task is?

Disaster Prevention / Recovery:

  • How can you ensure redundancy if the primary server (s) / network (s) are unavailable?
  • How will you back up data (on-site, off-site, short-term, long-term)?
  • What monitoring needs to be configured? How should you be notified in case of a problem? Who should be notified?

Sorry, I could not fit into the comment :-) And I did not have time to figure it out, I just killed time, waiting for a meeting.

+2
source

All Articles