I have been working on recovery of a .NET development project gone wrong.
I joined development team at a very late stage of project to get system over the UAT phase. The system itself is complex, some of the core code has inheritance depth of up to 20 levels (yep someone went over board). It’s quite strange as on surface it is a simple web application with few screens, some business logic and few data tables in the background.
Question needs to be asked why this complexity, well often we come across developers who don't understand YGANI (You Are Not Gonna Need It).
The principle of YGANI is fairly simple to understand which states that you should delay the decisions that you need to make today to tomorrow.
This application is a classic example of over engineering beyond believes, that again goes against KISS principle. The level of complexities that I have come across in this application along with the choice of poor components makes it a dog to run.
The client was promised a sports car with all of the bells and whistles but what they got is old school looking rusted lemon which is dog to run and is nightmare to maintain. Since the original development team had moved on the team managing the application were fairly junior who have been transitioned into support role to look after the pending defects.
With the level of complexity involved in simplistic of the features was enough to drive fear among the support team. After going through number of people to make this work, management soon enough realized that they need someone more senior. When I joined the project first thing I questioned was why ?? Why are we doing it this way? And soon enough I also realized that this maintenance time bomb ticking to explode. We suggested radical changes not only to the core of the application but also to the ALM itself to streamline and deliver quality to the customer.
Well I have been on this project for almost 3 months now and we have concluded that simple salvage job is not as simple as you would expect.
The shinning bright star of this whole journey has been the development framework that I have been developing for a little while now. Built on entity framework code first and using simplistic implementation of some core design patterns we have got junior developers picking it up and working on their components quite easily.
In conclusion all I want to highlight is that yes we all are techies, smart people capable of making sound choices but often due to our love for a specific technology and pattern we forget to look at the bigger picture that is to solve business problems with simple yet elegant technical solutions.
Whenever I am writing code I always have this thought in the back of my mind - someday someone else will get to work on what I am writing now and I don’t want them to feel what frustrates me today. Writing good maintainable code is not a privilege but it is a moral responsibility.