Saturday, May 10, 2008

Why keeping up to technology trend while my old VB6 product is working fine?

Recently, I was being told by the COO of a software company that having the passion to build software with great patterns and practices is too unrealistic and I was being classified by him as a perfectionist. To him, I may not have the opportunity to contribute this to the company as the situations are usually not allowed. For instance, they have some old products written in VB6 without any proper coding standard and yet they still need to continue providing feature enhancements and support maintenance to their customers. If I were being employed, I may need to live with the traditional and messy coding standards in order to continue supporting the business. Secondly, the design architecture of the ongoing projects could have already been established and he does not want anyone to mess around with the architecture anymore so that the development can proceed. Thirdly, they only need someone who can play a full project management role which only has little chance for the person to get involved in the technical aspect.

In fact, the COO of this company is not the first person that I have met so far with this kind of mindset; there are plenty in the Malaysia’s software industry. If having a passion to build software in great patterns and practices is too impractical to software businesses, I wonder why Microsoft and Google can be so successful – the God must be pampering them too much.

After having a long discussion with the COO, I can only conclude that: In Malaysia, we lack of industry leader who can control the situation instead of letting the situation to control us. Usually, there are too much of excuses for us not to move forward until we really have forgotten which field that we are in now – An information TECHNOLOGY company that does not believe in TECHNOLOGY. How can ones lose their trust on technology if they still willing to survive in the software businesses? Are they forgetting about what they are selling? How can ones continue to sell nutrition and food supplement to the consumer when they no longer believe in nutrition can make people healthier?

Another key argument is that, if you believe great health can give greater success to someone, why don’t you take your own food supplement products regularly and prove to your customers that this really works? The same goes to software businesses. One thing that most of them never realized is that, the software industry has come to the realization that the methodologies and approaches being used should not only help to build software that improves the efficiency and productivity of the end-users. It should also help to improve the efficiency and productivity of the developers and therefore the software businesses as a whole. For example, Microsoft has realized the popularity of a design pattern called Model-View-Controller (MVC) and started to officially incorporate it into ASP.NET 3.5 to facilitate automated unit test (also referred as Test-Driven Development, TDD) as well as improving the agility of the Web application architecture to facilitate change. Also, the Agile Development Methodology has been aggressively promoted by many industry experts to correct the way that we build and deliver the right working software to the stakeholder based on the nature of how the software suppose to be designed and developed. Such improvements have not only brought revolutionary benefits to the ISVs but also gives significant benefits to the end-users, e.g. better architectural agility that capable of adapting to the ever changing business needs, highly predictable and maintainable code that allows developers to provide faster response to the change requests, much more stable and usable software that reduces the total cost of ownership and so on.

Many key persons of the software companies were questioning me: “How do you think a software company can continue to sustain without businesses? Do you think we can survive for not selling anything for one or two years time by just doing R&D in designing and developing product using industry best patterns and practices?” To me, if you are not capable of producing competitive products and services, why start the business? In that case, what is your key competency in the IT market? Is it because you have not faced any great competition so far? If one day you have, will you fight, or will you close up the business for surrender, leaving the company with the money that you have earned for years and enjoy your retirement with your family? What about those who have been loyal and led by you for years, maintaining VB6 code without progressing themselves to the next level and losing their market value simply because of trusting your leadership?

The following chart explains software companies are likely to be more sustainable when they are able to grow according to the technology trend:


Figure 1.0 – Company B, although not a market leader in the earlier age, due to the ability to keep up with market trend, they are more sustainable in long-term basis.

Figure 1.0 shows that Company A may be the market leader in the earlier age when Thick Client technology was first introduced. Due to the size of the Company B and its financial strength as a startup company, they were far behind Company A. However, due to the ability and their passion to catch up with the new technology trend, they are able to continue fulfilling the market demand. This has also created opportunities for them to enter as a pioneer for a specific market segment, for example Smart Client, Mobile Client, Web 2.0, and even Service Oriented Architecture (SOA) (as what was happening to Company A during the age of thick client). For Web 2.0, due to the Software-as-a-Service (SaaS) and Application Service provider (ASP) business model, they gained one thousand customers as their monthly subscribers and enjoy monthly recurring income. Then they proceed to their venture to SOA and earned millions of dollars from the 50 customers. As for Company A, many of their software products were written in traditional VB6 programming language and they can’t afford to revamp the entire product range because they had been stopped leveraging on newer development technology since the release of .NET Framework. As the technology gap is too huge, the cost of conversion is too high for them until they are not able to move forward to the new era of development. Therefore, they continue to suffer with their existing customers in fixing their software bugs and performance issue because as time goes by, the data and number of users are growing. No proper design patterns and scalability approach were being adopted while building their applications. Due to this, they were also facing serious manpower shortage problem because many of their senior developers had left the company in order to acquire newer technology for the sake of their career. Besides, hiring new developers is difficult as nobody willing to deal with the primitive technology to make their skill set obsolete. As a result, Company A is lacking of capable people to help them to build more competitive software products and can no longer sustain in the current software market.

About how to make the company survive without compromising the software quality (this statement sounds stupid), I think I should leave this to the business experts to think about it – this is supposed to be their expertise for them to prove their business skills, not for me to answer. My job is to make sure that I can deliver highly competitive products for my company and the software that really works to the customers, this is my bottom-line. If the business operation management is not able to find ways to balance up between business and technology advancement, then this is simply too bad to the company. However, my thinking is simple: if I were to sell fried noodles, fundamentally, I have to make sure that my fried noodles are tasty enough to be publicly acceptable. And if I really want to be a successful and famous fried noodle’s business owner, I have to make sure that my fried noodle is EXTREMELY TASTY and HIGH QUALITY. These will of course very much concerning about the methodology and approach that I use in the production of my fried noodles. I will not give myself excuses like: My customers always get hungry and want me to be fast; I used to the way I’m frying the noodle and I have no time to think of changing my way of frying tastier noodles and so on. In Penang, Lorong Selamat, the famous Char Koay Teow costing RM7.00 per plate with great traditional taste and extra big prawns. The customers may need to wait for 30 minutes to an hour, queuing up under the rain or hot sun with umbrella, just to eat their Char Koay Teow. This is what Scott Ambler from IBM, who was conducting his speech during the IASA conference: “Do you prefer RED RED RED and then GREEN, or GREEN GREEN GREEN and then RED?!”

If we are selling software for survival, fundamentally, we should respect on what we sell and take pride on what we sell. If we have to do it, we got to do it. No matter how much effort that you have put in for reaching the current destination, If you think there will be a dead end by going further with the current practices, then you should make a U-turn and think of other alternative. Making a U-turn may cost you a lot of time, effort, and money, but it is definitely worthwhile than reaching to the dead end and fall down to the cliff.

Sunday, March 16, 2008

Managing Mess: The Ability to Classify and Associate

I always believe that all complexities in the universe originated from simple, small, and interrelated objects or entities. Things become extremely messy when various kinds of object have been mixed up together and not properly grouped. For example, consumers will find the desired product items hard to find if the available products sold in the supermarket do not well-arranged or well-classified. Besides, having the product items well-classified is not enough; ones should also know how to associate the relevancy among items to enhance the consumer's shopping experience.

The same goes to relational data modeling, object-oriented programming, user interface design, software architecture design, and even for project documentation. I came across with various kind of people in the software industry, throwing a few scenarios to me and asking me how to have a good design in addressing a specific business problem. Often, in my thinking process, before giving out my answer, I always start from two basic things: Classify and Associate.

Every business issue, or perhaps I would say every specific business domain, involves multiple business entities that have various kinds of relationship interconnected to each other. Without having all these clearly identified and understood, one may suffer in the mess and lose his/her clue in resolving problems. This may sound very basic and familiar to everyone, however, many tend to skip this process as it is 'too basic'. Others may also want to argue that 'I have done that', but most of the time, they are putting those that 'they have done' aside while cracking their head for solution. Let me give you a very good example which I got it from the real world experience:

A specific workflow system allows the registration clerk to submit a particular application from an applicant for approval. Once the application is submitted, the application status will change to 'Pending for approval'. If the applicant failed to submit a specific required information, however, the application status will change to 'Pending for information XXX'. Both 'Pending for approval' and 'Pending for information XXX' status are allowed to be forwarded to the officer for approval but the later will have the following two outcomes:

  1. The application will be approved by the officer;
  2. The officer will not approve the application and further follow-up need to be done by the registration clerk. Once the issue is settled, the officer will verify and approve the application, otherwise it will remain 'Pending for information XXX' until the problem is resolved.

The system analyst (SA) of this project approached me and asked: "Can we add a button called 'Reject' and notify the clerk that the application needs to be resolved further? But I want the status to remain as 'Pending for information XXX' instead of 'Rejected'."

Here, the SA had made a couple of mistakes:

  • She was trying to give herself an allowance for not classifying 'Pending for information XXX' and 'Rejected' under Application Status, which may add confusion and complicate the status logic.
  • She did not realize that when she asked for the 'Reject' button to be added and at the same time remain the 'Pending for information XXX' application status, she was actually trying to add/change the ATTRIBUTE of the specific application status.

To resolve this issue, the simplest solution is to allow the officer to add a Remark to the specific application of this status while remain the status logic of 'Pending for information XXX' (Pending for information XXX with Remarks). As such, the system can still notify the registration clerk by distinguishing the difference between 'Pending for information XXX' and 'Pending for information XXX with Remarks'. Here, the Remarks will become the ATTRIBUTE of any application status. It also act like a subtype of each application status -- with or without remarks.

Of course, there are couple of ways to resolve this issue in a proper classified and associated manner, such as creating a new status called On-hold and have a status selection control (e.g. radio button or dropdown list) for the officer to select instead of having a one-status-one-button approach, which will never be agile and facilitate extensibility. The UI designer can then remain the consistency of the UI design by having the Save and Cancel buttons across application forms, which later could possibly be converted into reusable UI framework.


Improving the skill of classifying and associating business entities in a logical manner will not only help making the complicated-sound business rules simple but also help ones to explain the solution logic in a clearer and more systematic way. In addition, complex business problems can be easily resolved once the job of classifying and associating business entities has been completed and well-defined. The reason behind this is that, the clearly defined business components and relationships provide higher visualization of the problem and hence making the path to solution visible.