Ahmed’s Dev-Shop

Tradition vs. Innovation: story of an ancient war

Posted in Engineering, mindset, programming, Thoughts by Ahmed Siddiqui on September 30, 2009

If you ever noticed that most of our nonintellectual discussions and debates are wars between tradition and innovation. Here you may find a person trying to convince others that one should stick with the legacies: experienced, practices, and patternsnot necessarily using the said words but some contextual jargon— while the other person is contradicting like if  only innovation and creativity can make a difference or in other words you learn as you go. The same quarrel exist in our software engineering field.

1. The Fundamentalist Craftsmen or Blind Followers

There are people who have beleive only in proven practices. They always have the same number of documents, same life-cycle, identical design, and unbelievably a single strategy for every project. The most surprising point for me is that even the consecutive failures are unable to make them believe that there’s something wrong. Instead of trying to make some improvements and searching for the shortcoming in their practices and strategy, they start believing that failure is a norm, or it’s not failure at all. For instance, you’ll hear them saying “Clients never get satisfied” or “Losing deadlines is a norm in our industry”.

Example —makes things easier

In a software project, the offshore back-office development team shares the documents reside in their local repository with the on-site front-office team to let them update the documents. In absence of their access on offline document repository, the back-office team shares the documents via email with the front-office team. Obviously they get frequent version conflicts in documents and when it happens, they arrange a meeting and manually resolve the conflicts in the documents.  For months, they suffer with this problem but avoid change in their practice e.g. having an online document repository instead of sharing the documents on email. This approach is named as Brute Force approach by Steve McConnell.

2. The Innovator –or scientist, we can say

Away from the above category, the innovators are what most of our new graduates comprise of. They start with buzzwords like Web 2.0, cloud computing and believe that legacy practices are all obsolete and that the senior folks are not creative at all. They drive their projects for learning, ignoring the ground realities they neglect the cost and risk of change and avoid exploiting legacy patterns and practices. Since they believe that they make things better than they are, it’s possible if you see them writing their own DB connection pooling for technologies having built-in connection pooling or writing their own classes from scratch instead of extending the existing one. They often try to make simple things state-of-the-art and having insufficient knowledge and experience they get lost in the middle. This approach is named as “Silver Bullet approach” by Steve McConnell.

3. Engineering Mindset: the most needful

The moderate mindset — or engineering mindset as I say— tends to utilize and exploit the experience, invested by lots of great minds avoiding useless reinventions but never shy addressing the issues with a practice in the particular scenario. The mindset says that understand your objective whether it should be build-to-learn or learn-to-build. It says that to be honest and successful, an engineer shouldn’t behave like a scientist who build and destroy just for learning. And it says that there’s always room for improvement since improvement is a continues process and a going concern but it’s not the ultimate goal of an engineer which is to deliver the most optimal and economical.

A single practice may have various out comes when followed with or without reason. So, if a practice is being followed by majority, most probably there are reasons, try to find them, don’t shy asking other followers if you couldn’t,  but if nobody else knows, you have at least one reason to avoid it. Better to have your own with reasons instead of following blindly.

a request

Being an engineer, I do not think, I am right all the way; considering that I’ve limited amount of skills, knowledge, and experience. Your comments and disagreements are highly anticipated hoping it’ll help us having a more balanced mindset.

Laws of Systemantics by John Gall

Posted in Engineering, software by Ahmed Siddiqui on May 15, 2008
  1. The Primal Scenario or Basic Datum of Experience: Systems in general work poorly or not at all. (Complicated systems seldom exceed five percent efficiency.)
  2. The Fundamental Theorem: New systems generate new problems.
  3. The Law of Conservation of Anergy{sic}: The total amount of anergy in the universe is constant. (“Anergy” := ‘human energy’)
  4. Laws of Growth: Systems tend to grow, and as they grow, they encroach.
  5. The Generalized Uncertainty Principle: Systems display antics. (Complicated systems produce unexpected outcomes. The total behavior of large systems cannot be predicted.)
  6. Le Chatelier’s Principle: Complex systems tend to oppose their own proper function. As systems grow in complexity, they tend to oppose their stated function.
  7. Functionary’s Falsity: People in systems do not do what the system says they are doing.
  8. The Operational Fallacy: The system itself does not do what it says it is doing.
  9. The Fundamental Law of Administrative Workings (F.L.A.W): Things are what they are reported to be. The real world is what it is reported to be.
  10. Systems attract systems-people. (For every human system, there is a type of person adapted to thrive on it or in it.)
  11. The bigger the system, the narrower and more specialized the interface with individuals.
  12. A complex system cannot be “made” to work. It either works or it doesn’t.
  13. A simple system, designed from scratch, sometimes works.
  14. Some complex systems actually work.
  15. A complex system that works is invariably found to have evolved from a simple system that works.
  16. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over, beginning with a working simple system.
  17. The Functional Indeterminacy Theorem (F.I.T.): In complex systems, malfunction and even total non-function may not be detectable for long periods, if ever.
  18. The Newtonian Law of Systems Inertia: A system that performs a certain way will continue to operate in that way regardless of the need or of changed conditions.
  19. Systems develop goals of their own the instant they come into being.
  20. Intrasystem{sic} goals come first.
  21. The Fundamental Failure-Mode Theorem (F.F.T.): Complex systems usually operate in failure mode.
  22. A complex system can fail in an infinite number of ways. (If anything can go wrong, it will.) (see Murphy’s law)
  23. The mode of failure of a complex system cannot ordinarily be predicted from its structure.
  24. The crucial variables are discovered by accident.
  25. The larger the system, the greater the probability of unexpected failure.
  26. “Success” or “Function” in any system may be failure in the larger or smaller systems to which the system is connected.
  27. The Fail-Safe Theorem: When a Fail-Safe system fails, it fails by failing to fail safe.
  28. Complex systems tend to produce complex response (not solutions) to problems.
  29. Great advances are not produced by systems designed to produce great advances.
  30. The Vector Theory of Systems: Systems run better when designed to run downhill.
  31. Loose systems last longer and work better. (Efficient systems are dangerous to themselves and to others.)
  32. As systems grow in size, they tend to lose basic functions.
  33. The larger the system, the less the variety in the product.
  34. Control of a system is exercised by the element with the greatest variety of behavioral responses.
  35. Colossal systems foster colossal errors.
  36. Choose your systems with care.

Why Patterns Suck?

Posted in Engineering, mindset, programming, software, Thoughts, workplace by Ahmed Siddiqui on April 10, 2008

Surprised when I heard some people saying “Patterns suck”, I was eager to know why they hate these precious guidelines which often save us from reinventing the wheel, letting us using it.

Fortunately after just few days I had to work with some confident developers, known as pattern-lovers. Having plenty of technical knowledge, they were used to count the names of patterns–and there authors–on finger tips. People, you can speak technobabble with, for not just hours but for days. I admired them and found myself among blessed people.

Later I found something strange, besides all their knowledge they had very few success stories and their management was not satisfied with their problem solving skills.

I had started observing the causes of their failure. Mean while I had to design an architecture for a coming enterprise business application. I started scaffolding by enhancing and optimizing my legacy libraries and framework with my team. I asked the experts to review my approach to let my approach become foolproof.

Geeks love technical discussions so I got a prompt response and they started highlighting the weaknesses, I was very glad as I got a chance to improve. But unexpectedly most of the issues identified were as follows:

Geeks: Aren’t you using NHibernate (a port for Hibernate for .Net)?

Me: Nope, I personally admire NHibernate for its OO approach and database independence but I think that this application does not have complex business processing, instead it mostly comprise of chatting between the user and database. It also comprises of complex reports which is not a specialty of NHibernate. While our tailored framework provides Report Factory and configuration as well as tiered approach for reporting. Another reason is that our expertise on NHibernate do not allow us to use it in a time-critical project at this stage.

Geek: What? Do you know where NHibernate came from, it’s a port of Hibernate, being used in the most powerful language “Java”. It has nothing to compete with MS’ ADO objects.

Me: Yes, I do agree that Java and it’s platforms are lot more maturer but since every language or technology has some of its own strengths and weaknesses, our framework and libraries are optimized with the strengths of .Net. Our wrapper classes exploiting some new features provide in the latest version of .Net.

Geek: Hey don’t use ADO.Net objects, they do nothing but violates layering These objects are mess. You should use pure objects that’s why I recommended you to use NHibernate.

Me: I think it depends that how are you using them, in our scenario they are completely database independent because they are boxed in generic objects and are created by abstract factories so we can enjoy Inversion of Control, Polymorphisms, and Database Independence.

Geeks: These libraries are not open source, you don’t know what they have written in it.

Me: I admire the benefits of open source but these object are rich, free, built-in, tested and performing well in enterprise applications. I do not very often use them but I found them very useful in such kind of applications.

Geeks: You incorrectly applied this pattern; let me show you the documentation.

Me: This pattern like other patterns have different applications, I am following this approach because it fits well in this scenario. This flexibility is also allowed by experts.

Geek: No, patterns should be followed as is. They are not to be compromised for performance or whatever. And remember enterprise applications, built on great technologies like EJB, looks graceful even if they are not enough performant.

Geek: Increase your number of layers like we have did in that application. You have not decoupled enough.

Me: Yes previously I did have the same number of layers but I found it as an overkill in this project, so I modified this version for medium-sized performance-hungry applications.

Geek: And why did you coupled these two major tiers, this is an unacceptable violation of N-Tier Architecture

Me: No, these are still two different layers, but I am keeping them in a single project during development as most of the developers are working on both layers. They still can be deployed on different servers.

Geek: I’m still not satisfied, a lot patterns have not been used, recommended by the gurus and we follow them because we know they are the best.

Me: They might have recommended it for some different type of project and this approach may be suitable in that particular scenario.

Geek: We found their practices the best in all type and size of projects, whatever, it’s not that simple you think it is, you have to add a lot more complexity.

Me: May be you are right as I found you very knowledgeable but I learned and believe that a complex system that works is invariably found to have evolved from a simple system that works.

… that’s how I got to know somehow why people hate patterns”