A little over a year ago, one of our clients came to us and asked if we would take over a project that had fallen into disrepair. Much effort had been expended to get the project off the ground several years ago but time and other priorities had taken their toll. Users were growing increasingly frustrated with bugs, performance problems, data issues and the lack of any forward movement in terms of new features. Several attempts were made to breathe life into the applications, but acquiring and allocating the proper internal people was proving to be a very challenging endeavor. E-gineering was given the opportunity to bring it back from the brink. Figure 1 shows a simplified view of the suite.
The client provided an outstanding project manager, product owner and IT manager. It cannot be stressed enough how awesome these people were. They helped us remove many impediments that were outside of the scope of influence of the E-g team. They gave us access to the users and let us participate in a shadowing exercise. They allowed us to introduce some Agile practices. We also worked with the client’s internal QA team and they were great – and open to making some improvements in requirements management. It just couldn’t have happened without them and we’re extremely grateful for the opportunity.
The E-g team tackled the biggest source of issues head-on: the legacy system. Three valiant E-g consultants volunteered to dive into 1970’s technology so that the team could resurrect the back-end. They had to spend several weeks coming up to speed on the technology. Then they had to read through a few thousand lines of code and reverse engineer the data structures. They had to figure out where data was coming from and where it went – as well as who to talk to regarding the same. The code was placed under source control (Git) and build jobs were created. The team even created a basic data change management tool that allowed for deployment jobs to run data structure and migration changes associated with change sets. Deployments of this component went from high-stress to push-the-button fun with large data migrations being the most time-consuming part. The team overcame numerous data quality issues and squashed a few very nasty performance problems.
Deployments of this component went from high-stress to push-the-button fun.
The Sales Web App was built from the ground up with Angular 1.x and has turned into a wonderful, responsive app that has been well received by those users longing for a desktop experience for data-entry intensive tasks. The web team did a fabulous job of writing tests and making the app look slick!
The Data Quality Web App was a 7 year-old application that made direct XML/HTTP calls to the legacy system. It too had fallen into disrepair and the users needed some love. The team was able to introduce several significant enhancements and squash a good many bugs. A couple members of the team even helped out another group by writing an Address Verification and Geo lookup service using their integration platform.
The iOS application had an outdated UI, quite a bit of copy/paste code and stability issues. Our mobile dev team members cleaned up the code and even started to properly migrate a good bit of it to Swift. A major accomplishment was implementing a complete overhaul of the user interface – incorporating a wonderful user experience design from another vendor. The mobile dev team did it in about three months, all while taking in API-level improvements.
The API team not only cleaned up the API by making HTTP return codes and error handling more consistent, they also refactored to a much improved REST interface. However, this was minor compared to the task of beginning the migration off of the legacy system by introducing Microsoft SQL Server. Migration and Synchronization code was written and tested extensively so that the production deployment was a walk in the park because we had already migrated it dozens of times. Replacing all the legacy XML/HTTP calls with ORM technology and queries was no small task. This also was completed in about 3 months.
Yes, this section gets its own title because this stuff was absolutely critical to the success of the release. Our client’s management team gave us the green light to take on some responsibilities that made a big difference.
The project team supports the apps
We had a team member who fielded all production issues from the users. He reached out to each user quickly letting them know he was aware of the issue. If more information was needed, he arranged a meeting with the user and respectfully gathered what he needed and listened to them. Finally, analysis work was done so that a proper support ticket could be written up for the development team. If the development team members were needed to help with the analysis, they did it. The team felt more directly what the users were experiencing and were actively involved in addressing issues. It’s notable that in every case the users were happy to work with us and appreciated the responsiveness. We didn’t relegate support to someone else. It was good old fashioned customer service and we owned it.
Simply put, we were given all the access we needed to virtual machines, build servers, databases and configuration management tools. When we needed low-level needs from the operations team, they were responsive. However, with access to all the essential components of the architecture, we became a part of the ops team. The only direction we could point a finger at if a deployment went wrong was at us. There was no “hand off” to operations. Again, we owned it.
Where possible, we performed builds on every commit on every branch. We followed gitflow, which drove our deployment process. We invested some E-g time and dollars to create an open source Maven plug-in to do most of the work. Check it out!
We were able to consolidate several build jobs down to just a few and do things like deploy the same binary that we used in the test and staging environments. We put all of our environment configuration under source control. Worked like a champ.
The frequent and consistent use of the word “team” here is entirely intentional. We have a fantastic, hard-working, unselfish, team-oriented group of people. The great thing is, E-gineering is crammed with such people.