We are helping a client assume ownership of a recent business they purchased.
We got all the code, domain, etc.
But! Like many IT projects the documentation was insufficient.
Our first step was to then audit the existing system. We discovered that multiple web-servers were involved, not just physical-servers, but Apache, Lighttpd, Tomcat, etc) all on the same box. Some Apache proxy to the Tomcat, etc. A complicated configuration with a wide set of dependencies.
It was clear there was some scrambling in the old project, code forks all over, duplicated libraries and a wide varsity of languages used (PHP, PERL, Java, JavaScript, BASH). There was duplicated logic-libraries in each language! More complications that introduce inconsistencies (ie: fix the PHP lib but forget the PERL – OOPS!). This is also clearly too complicated.
There are many reasons why projects get to this state. Maybe one engineer likes Java more than PERL or historically it started with a shell-script. History, politics and engineer preferences can all be a factor. At the end however, we don’t care why.
Complexity Kills. Computers already have 1000s of layers of software between the Human and the Hardware. Putting a Rube Goldberg application on top does nothing to help.
Our KYSS Method
So what did we do to fix it? Our policy was to pick the low hanging fruit first. About 80% of the project was PHP we decided to push it all there. We simplified the system by replacing the Tomcat/Java piece with a PHP component. Reduced by one language and Tomcat dependency. Then we focused on performance of that component to reduce resource (network/memory) consumption by over 60%) Added a bit of caching and it was done. Then the back-end libs in PERL and Bash were streamlined to PHP as well.
The end result was taking a project with three web-server-software dependencies and reducing that to two (Apache/Lighttpd). Reduced the language count from five to two. A result of those to is a smaller, faster and simpler configuration that is much easier to maintain.
It will take roughly eight months to return on our investment of cleaning and simplifying this project. Awesome.
There are many cases when multiple languages need to be used, too numerous to list. In the end a seasoned architect & business analyst need to evaluate this and make a plan. Otherwise, like in this example, developers/engineers go their own fractured way and entropy reigns.