The economics of software performance
It does not matter the current state in which an application is, everyone always wants a bigger, better and faster version. Yesterday talking to my peers we discussed this point: If you have to choose amongst these items, which one would you leave for last? I said performance.
My point is: To design for high performance is expensive and
on these times of ROI is a good thing to save some for when
we need it most.
In my first job about a decade ago, I had to work with
protocols and microchip programming. In one of those
projects I had to implement a little protocol to communicate
2 heaters. I asked to use C, after all I was studying it at
the Uni.
At the same time, there was a group of cool people
programming in Assembly and these guys told me to give
Assembly a try, for performance reasons. I told them:"Guys,
I do not have experience with this and I prefer to use C. It
will be even better for my grades in the future tests."
Truth must be said; the prototype was done and indeed it was
too slow. Way too slow.
It was during my young years and I still remember all the
comments I've heard about this bad performance. Those
comments just fired me up! I was in a mission now to prove
them wrong.
I asked for more time, and with more 2 friends we debugged
the code. We were wasting too much time during the
handshake. That's it! we found the bottleneck! I said. So we
implemented just that handshake part in Assembly.
After some fine tuning: the application was now too fast!
Nowadays, I see people putting too much effort in new
technologies, new methodologies and focusing too much about
performance where is not really needed. use datasets or use
MVC? Use an array list or a generic list? That’s something
like over-engineering an application. IMHO, this can lead to
complex and expensive systems to maintain.
So, lessons learned from this situation:
First, make sure you have freedom to use your skills in the
area you know most. Sometimes we are forced to follow an
already designed specification and there is not much freedom
for our own ideas. The project priorities supersede our own
priorities. If you have this ability then...
Second, do proof of concepts. When you find a proof that is
modular enough to detach and that works good enough above
the average, move on to the next module...and then...
Focus the effort in time and money with the most critical
parts.
Be sure of that: Not even Jesus pleased everyone. At the end
it does not matter how effort you placed in the application
or how cool you did that module using a new logical path
there is always people telling you it could be done
better.
That's software, that's simple and that's life.
but hey, these are the sort of comments that makes you want to be better, to improve and move stronger ahead, aren't they?