Sunny Nagi

Solutions Architect who likes .NET Framework and Cloud Computing, Amateur Photographer loves his Gadgets and Cars



alt text

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.

Alive Again

Yep after almost an year of slumber, I have woken up again. Lots has changed in my life in last 2 years some good changes and some bad ones but like one wise man once said it is never about the destination but it is always about the journey and experiences that you gather along the way.

These days I am working with one the worlds largest IT services company and I get my hands into a number of technological pies :)

Still loving Microsoft Stack but keeping a keen eye on how Cloud and mobility are shaking this world.

Long running web services

Udi Dahan has just posted an excellent blog post about long running web services.

Recently while working on project I came across a similar sort of situation. In our scenario we were dealing with a web application calling and WCF based Web service which has some business logic execution steps followed by a call to a third party provider on http.

The B2B communication is handled by Tibco business works and we have noticed that performance is phenomenal, but business logic execution on our end uses SQL stored procedures and calls to some class library functions which has been a major bottle neck.

To get around this problem of waiting UI we decided to split the call to the WS into major sections - Submit request return to UI and then finally try to get a response back.

This approach more or less looks like Basic polling that Udi has mentioned in his post. I will try to implement REST-full polling that Udi has mentioned.


Software Architecture

Software architecture has become one of the hottest topic in last year or so. I also moved into software architecture role at the start of last year. It is very different world but very interesting as you get to deal with the problems first up and come up with a solution that is always best for business and not necessarily always best technical solution.

Here are couple of really good articles which highlight some of the challenges that are faced with architects

The Hidden Roles of Software Architects

Thoughts on being a Solution Architect

Debugging Demos

Tess has posted an excellent series on how to debug your applications using Windbg and SOS dll that ships with debugging tools for windows.