Category: Software

Application launcher : Freeware

Application launcher is a light-weight tool created in C# .NET. This serves following four important uses.

  1. With this tool users can load multiple applications, documents and utilities (executables) with a simple mouse click.
  2. Users can move the applications (low priority) from auto startup of Windows to this application. So that users can load them manually only when necessary. It will help Windows to load quickly.
  3. This application runs silently in background and displays just notification icon in Windows tray area. As Windows 8 doesn’t have Start menu, it will be helpful for Windows 8 users to quickly load the necessary applications and documents.

  4. Users can save their list of preferred files as as session so that they can be launched whenever required. It will also help users to switch between the sessions easily. This tool will be useful for the users who are using same machine(laptop/PC) for multiple purposes. For example, for the users who are using a same laptop to develop different types of applications (.NET, Java, Android etc) or for the users who are using a machine for both official and personal uses.


You can download Application Launcher tool from the following link


  • Please install this application other than the programs files folder to avoid folder security permissions issue.
  • This application is portable. The files can be copied to any other machine having .NET 2.0 and can be used.

Implement important design patterns in a single solution


Recently I had been provided with the interesting problem “Cube list to be implemented with the double linked list”.

I began with solving the problem with the straightforward algorithm. But started refactoring the same with OOP principles and design patterns.

The solution is implemented with C# Core 2.0. You can find the source code at Google Drive.

Phase 1: Use most important design patterns

The most important design principles and patterns, I applied in the first phase of refactoring are as below.

  1. Dependency Inversion principle is implemented with necessary interfaces.
  2. Factory pattern
  3. Service Locator pattern is implemented using inbuilt .NET core dependency injection framework.
  4. Iterator pattern is implemented using IEnumerable and yield.

Basic Idea

  1. Cube is implemented with both singly linked list and doubly linked list.
  2. Both the list classes implement common interface ICubeNode. The Cube list class is not aware of (doesn’t care) what type of list is used. (Dependency Inversion principle)
  3. The type of list to be used to build the cube can be selected by the user at run-time.
  4. The selection is passed as a parameter to the Factory class. (dependency injection)
  5. The Factory will generate the required node objects (service locator pattern)
  6. Each and every element of the cube can be extracted using Iterator pattern.


Note: Thanks to Armen Shimoon for sharing the idea to invoke the factory pattern within the .NET Core dependency injection container.

Software Maintenance and Support


This article is a collection of notes and references from other web sites for the self study of Single Page Applications and Angular. The list of source web sites referred are mentioned in the “References” section of this article.


“Begin with the end in mind”

  • Maintenance and support will continue for the life of your software system. A significant portion of the system’s life-cycle budget will be consumed by these tasks. In fact, experts estimate that Maintenance can eventually account for 40 to 80% of the total project cost. 
  • Software does not “wear out” but it will become less useful as it gets older, plus there WILL always be issues within the software itself.
  • Software maintenance cost is derived from the changes made to software after it has been delivered to the end user.


What is Maintenance?


This phase of the software lifecycle consists of the tasks required to keep your system operational after it is delivered into Production.


The different types of maintenance tasks are described as:

  1. Corrective – Updates that are required to correct or fix problems. (generally 20% of software maintenance costs)
  2. Perfective – Modifications that enhance or improve the functionality or performance of the software. This includes new user requirements. – costs due to improving or enhancing a software solution to improve overall performance (generally 5% of software maintenance costs)
  3. Adaptive – Software modifications that are required due to environmental changes (eg. upgrade to operating system) – costs due to modifying a software solution to allow it to remain effective in a changing business environment (25% of software maintenance costs)
  4. Preventative – This corrects potential flaws or problems in the software before they become effective.
  5. Enhancements – costs due to continuing innovations (generally 50% or more of software maintenance costs) Same as Perfective ?

What is Support?

Support refers to the assistance given to users to address their problems and queries after system implementation.

Effort Estimation

Key parameters considered while estimating the efforts required are as below

  • The industry and application type
  • Size of the application
  • Platform Types.
  • Programming language used
  • Effort spent on different maintenance activities
  • Effort spent on different support activities
  • The number and types of defects found during the maintenance period
  • Average time is taken to repair defects
  • Calls to Help Desk
  • Team size

Approaches to take over projects in production

Requirement Elicitation

  • The term elicitation is used in books and research to raise the fact that good requirements cannot just be collected from the customer, as would be indicated by the name requirements gathering. Requirements elicitation is non-trivial because you can never be sure you get all requirements from the user and customer by just asking them what the system should do OR NOT do (for Safety and Reliability). Requirements elicitation practices include interviews, questionnaires, user observation, workshops, brainstorminguse cases, role playing and prototyping

Detect patterns and the general structure of an application at a high level

  • Reverse analysis the source code

    The architecture tools and Static Code Analysis in Visual Studio Ultimate help us to visualize the organization, relationships, design patterns and behavior of existing applications

  • Generate sequence diagrams from the existing code and get required interfaces for each component
  • Sequence diagrams help to asses the impact of changes

Improve productivity and quality through Automation

  • Automated Live Unit Testing with VS
  • Automatically runs the impacted unit tests in the background as you type and provides real-time feedback

Use Agile or Iterative Waterfall SDLC

  • Produces working software early during the lifecycle
  • The focus is on delivering a sprint of work
  • Deliver series of valuable/shippable features/projects
  • Lowrisk
    • Low risks factors as the risks can be identified and resolved during each iteration.
    • if one project goes wrong, it would not impact another project
  • Flexible
    • More flexible as scope and requirement changes can be implemented at low cost
Questions / Metrics to be clarified

  1. Size of each application or module
Application Number of Modules Number of



Number of  Scheduled Batches Number of  Integrations to External applications

The number and types of defects found in a year

Classification Priority No of issues found
Standard Critical (P1)
High (P2)
Medium (P3)
Low (P4)

List of different .NET languages, Databases used with the applications.

Technology / Languages Number of applications
SQL Server

List of different .NET frameworks used with the applications.

Technology / Languages Number of applications
ASP.NET – Web Forms
Entity Framework
Any other technologies

Third-party applications or packages integrated with the applications

Third Party integrations Number of applications
CRM (Siebel, Vantive, Remedy, SharePoint, Documentum etc.)
BI / OLAP / DW Tools

(ETL, Data Stage, Sagent, Informatica,

SAS, Ab Initio)

ERP Skills (Peoplesoft, SAP,

Oracle Applications etc.)

Software development life cycle models used

SDLC Number of applications Number of releases in a year
Iterative Waterfall
Any other SDLC methods

Type of Integration and deployment methods used (to estimate the efforts to deliver the build to different environments

Integration and Deployment Number of applications
Automated deployments only
Manual Integration and deployment

Availability of the documents in English

  • Architecture documents, HLD, LLD, User guides, deployment documents etc


  5. SDLC Models
  6. Visual Studio Architecture Tooling Guide Scenarios