Performance is an end-to-end thing

Posted by Albert Gareev on Aug 06, 2012 | Categories: NotesProblems

Some time ago I had a hard time discussing performance problem with application developer. My challenge was to overcome a “block” set by the developer: “this is a one-page code, it’s a very simple logic, and I see no reasons to spend time evaluating its performance”. I didn’t have more than 5-7 minutes for the discussion, so I handled it with an analogy, which was convincing to some degree.

If I had more time, here’s how I’d go.

The end-code doesn’t run by itself. It uses objects defined in the underlying layer of the architecture. But those objects use data manipulation functionalities and are based on the generic framework.
This is how we can represent it in the table:

Code Layer Complexity Comments
Developer’s code Low One-page client-side code receiving and sending objects via RESTful service.
Business logic classes High Classes implementing objects used by developer’s code.
Data manipulation classes Very High XML serialization / deserialization.
Base Framework High Foundation classes the solution is built upon. For example, Dot Net Framework.

This table does not pretend to 100% accurately describe the architecture and complexity of a REST-based web application. Business logic complexity may vary from “Low” to “Very High”, and there can be other components (plus, it’s only client-side part we’re looking at). Nevertheless, the table is accurate enough to make the point:

While it may seem that execution is as simple as in the picture below –

The actual pathway will look something like this:

You better do not underestimate performance cut of the underlying code layers! Test it out.

Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported
This work by Albert Gareev is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported.