Posted by: ahmedashfaque | August 13, 2015

Economic considerations in software development

Technical people working on software projects do not worry about economic impact on any decision making for software development. For example, if a decision is to be taken for programming language selection then consideration for technical viability for implementing a solution is the only consideration. Off course the project team also considers expertise available on hand by seeing the skill set of the project team. However the project team never considers the economic aspects about any decision taken on the project. Off course the technical team has no idea about economics of the given project; however someone on the project must consider the economic aspect when selecting technology for a project or considering software design.

Generally the project managers themselves are not well versed with economics. For example in the decision to select a suitable programming language for the project, a project manager may consider factors like difficulty level, available skill sets, technical viability etc. but never about productivity gains.

Due to this shortcoming, decision making on software projects is always faulty. What is the solution then? Well We have various types of organization structures under which software projects are executed. Some of them include program management, portfolio management etc. Most of these organization structures take care of aspects like resource utilization, customer management etc. Unfortunately none of them seriously take into account the economic factors.

While considering a programming language if the project team thought about amount of code reuse which the specific programming language will allow? What about special functions already defined in the programming language which can be used to do many computations without writing those functions from scratch? How much time and effort can be saved using these features of the programming language?

These questions should always be asked and hard facts should be tried to be found before a programming language is selected.

Posted by: ahmedashfaque | August 10, 2015

Software development: code reuse

Code reuse is a big concept in software development. But how many project teams understand as to how to reuse code effectively? Even bigger question is: how to do it?

Good software design is the first step towards ACHIEVING code reuse. But project teams fail to understand the design concepts which can go a long way in utilizing code reuse. For example, suppose you need to implement 2 different functionalities of creating a new record for a user and a user request for some service. These 2 functionalities are independent of each other. The database tables may also be different.

Now is it possible to combine these 2 functionalities in design? This will be needed if some code reuse can be done. The reality is that most project teams will never realize that it can be done. Thus they will never try to do it.

But it is perfectly possible to do it. How you can achieve code reuse here? First you create a class which may contain 2 methods: one for each functionality. On top of these 2 methods you can write the logic which will redirect a connection coming from some event to the right piece of code.

The benefit of such a design is that some more code can be reused if similar kind of functionality is required at some other places.

Posted by: ahmedashfaque | August 8, 2015

Fallacies in creating a software design

On most project teams, software designers create a software design and throw it to the software developers without considering implementation aspects. The software developers then find it difficult to implement such kind of a design.

One often occurring problem is that of managing database connections. Most software designers forget about this aspect. They create classes with all details about their members (class variables and methods). They also describe all the details about relationships among the classes and how data will pass from one class to another. When this detailed software design is passed to developers, they start thinking about implementing the design. But they encounter one problem though. How to take care about database connections as database connections management is never described in the design.

In such a situation, developers modify the design themselves. Since database connections are required at many places, they create a separate class for database connection management. The other place which needs to be modified in the design is user authentication. User authentication or session management is also one area which is used very frequently throughout the software application. Here again, software designers do not consider the aspect of code reuse. So the developers again need to modify the design so that code reuse can be done properly.

Posted by: ahmedashfaque | August 7, 2015

Technological considerations for building software design

Recently I was involved in a software development project. The software design was built with all the classes and their elements defined. Obviously this design was an object oriented design. At this stage I asked my team if we have everything needed to start writing the source code? The team affirmed that they have a good design and now they are ready to start writing the source code.

Frankly speaking this instant confidence in the team came from working on projects of similar nature for quite some time. But unfortunately this is not always the case. On most projects, you need to provide additional information to the project team apart from class designs.

Suppose you need to build a web based software application. Then you need to find out which programming language and which programming technology will be used on the project. Based on these choices your class designs may even need to be changed. In any case, these considerations play a profound role in software design and implementation. For example suppose in the web based application you want to display a message to the user in response for successful or unsuccessful operation for a user input. This type of response mechanism can be implemented in various ways. You can write the logic inside the server side scripts or inside a compiled class.

Without incorporating technological considerations, a software design may not work perfectly.

In this era of social networking websites, software vendors invest money to develop these websites and offer their users to use their software product (in form of these websites) for free. Why a software vendor like Twitter or Facebook will spend millions of dollars to develop their software product and then allow their users to use their software products for free? How they earn their money so that they get a good return on their investment? Let us learn about how this business model works?

These software vendors earn their money from many sources. For example Twitter allows its customers to have a business account. Using a business account, a customer can tweet about their products and services and these tweets are visible throughout the entire community of twitter account holders. This is in contrast to the tweets which are made from twitter accounts which are not business accounts. Here a tweet is visible only to the followers of that twitter account. Thus having a business account on twitter is a good way to advertise your products and services to millions of people.

Facebook has a different business model. It allows its users to advertise on its website free of cost. It charges the customer who has placed its advertisement when any user clicks on the advertisement.

The most important consideration for these software vendors is the number of users who use their software product. If number of users for their software product is very limited then their business model will not work. For example if a software product has only some thousand users then any advertisement on their web pages will be seen by only these thousands odd people. This will not result in good sales for the advertiser. But if number of users of a software product number in millions then defnitely an advertisement will result in good sales for the advertiser.

So number of users matter for this type of business model. If a software vendor is not able to make its software product popular among its users then the software vendor will never be able to make any money from its software product. On the other hand popular software vendors like Faceook are minting money to the tune of billions of dollars annually.

Posted by: ahmedashfaque | July 23, 2015

Software release management in the agile era

Before agile methodology was adopted for software projects, most projects were following waterfall model. In waterfall model, a software product is released after the software product is designed, developed and tested. This software product is released so that it can be deployed and then used by end users. Thus we used to see very few software product releases. Once per software product development project!

In agile methodology, we see many releases of a software product. It is because software product is developed incrementally in agile methodology. Whenever a new increment is added to an existing software product, we can have a new release of that product. With each new release, we see some additional product features get added to the software product.

In between the agile and waterfall era; there used to be a transition era where software product vendors used to release there software proructs more than once. In this era we used to see alpha and beta releases of a software proruct apart from the usual final release. Even today many software vendors adopt this release strategy. Alpha and beta releases of a software product are used for 2 purposes. First the software vendor wants to create awareness about its product in the market by giving free evaluation copies to its customers. For example Microsoft makes alpha or beta releases of its software products in the market.

The other reason for creating alpha and beta releases of a software product is to get it tested by customers themselves. When customers install and use alpha releases of a software product, they may find some software defects. They will report these defects to the software vendor. The software vendor will fix these defects. If too many defects were reported then the software vendor may create a beta release so that the software product is tested further by customers.

Alpha and beta releases are great tools to get a software product tested quickly and free of cost. If the software vendor had decided to get the software product tested inhouse then it would had to hire a team of software testers. This approach is not only costly but it is also slow. Afterall there is a limit to the number of software testers who can be hired. In contrast, an alpha release can be installed, used and tested by thouands of customers.

Posted by: ahmedashfaque | July 22, 2015

Why programming is difficult?

On any software project, the software designer creates the software design and hands it over to the software programmer to write the source code. Generally the software design contains design for every business logic which need to be implemented. The detailed design is generally good enough for a software programmer to understand how the business logic works. But still implementing the business logic in the source code is not easy as many software programmers will vouch.

What are the factors which lead to such a situation? One problem could be difficulty in implementing a business logic using a programming construct. Many looping constructs are difficult to implement. For example looping through an array and finding some value of an element of the array is a cumbrsome task which many programmers find difficult. Looping through records stored inside a database and finding some value is again a difficult task. Linking a user interface element like a drop down box with values stored inside a database is again a difficult task.

Another programming task which is difficult to implement is maintaining user sessions for web based software applications. In fact developing a web based software product itself is a difficult task. The reason is that you need to create and pass values from user interface elements to some variables to session variables to a database. Since you need to pass values to variables at many layers and levels, the entire programming task becomes difficult.

There are some more programming constructs like thread management, memory management, performance management which are even more difficult to implement. So even though a prrogrammer is given all the software design information, implenting the design into source code is still a challenging and difficult task.

Posted by: ahmedashfaque | July 15, 2015

Why accesor methods are still bad?

In object oriented programming, accessor methods are used to provide access to hidden (private) class variables. If accessor methods are good?

Using get accessor methods, a private class variable can be seen from outside a class and its value can be known. Though you can not change the value of the private class variable. So it is safe. When you really need to set value of a private class variable then you use set accessor methods. These methods allow a mechanism to change value of a private class variable from outside a class. This mechanism can be locked for unsecured connections to a class so that unauthorized access to the private class variable can be totally avoided.

So it seems that accessor methods are good. But the fact is that they are still not good enough. Why?

Any class variable is created for the purpose of exposing it to other classes. Otherwise there is no use of declaring a class variable. But we know that excessive use of class variables will lead to tight coupling between software components. There will be too many connections and too much information exchange among classes. This is a bad software design. Remember the software design mantra of loose coupling and high cohesion.

There should not be too many connections among classes. This means there should not be too many public methods and variables inside a class. Most of the methods and vaariables should be created to be used only inside a class. A public method or a variable should be used only when a connection is neeeded with another class for getting or sending any data.

For this reason use of too many private class variables and their accessor methods is a bad design.

Posted by: ahmedashfaque | July 6, 2015

Difference between product quality & process quality

When we talk about software quality assurance, we often discuss process measurements, process improvements, productivity increase, quality improvement etc. And when we talk about quality improvement, mostly people think about product quality improvement. Most of the time people forget about process quality improvement. In fact, people find it difficult to differentiate between product quality and process quality. Let us find out the difference!

During software development we have work products like requirement specifications, software design, software code, user documentation, etc. Quality of any of these work products can be done by measuring its attributes and finding of they are good enough. For instance, a requirement specification may be ambiguous or even wrong. In that case, quality of that requirement specification is bad. So during quality assurance audit (peer review, inspection etc.), this defect can be caught so that it can be rectified.

During software development project, a lot of processes are followed. The top processes are the project processes like project initiation, project planning, project monitoring, and project closure. Then we have development processes like requirement development, software design, software coding, software testing and software release.

All of these processes are not executed perfectly on any project. Improvement in these processes can be achieved if we have audits of these processes. For instance, these audits are done by using standards like CMM (Capability Maturity Model). These standards dictate as to how any project or development process needs to be executed on any project. If any process step is deviating too much from these standards then that process step needs to be improved. The most important job of any software quality assurance department is to audit and ensure that all processes on projects being executed in that organization adhere to these standards and so quality of these processes (project & development) is good enough.

Posted by: ahmedashfaque | July 5, 2015

More university list for software project management

I am delighted to share the information that more universities have adopted my book “Software project management: a process driven approach” as the textbook.

Here is the new universities:

1. Mercu Buana University, Indonesia
2. King Mongkut’s University of Technology, North Bangkok, Thailand
3. Indian Institute of Technology, Jodhpur, India
4.Soongsil University, South Korea

Older Posts »



Get every new post delivered to your Inbox.

Join 121,425 other followers