× back

Project Scheduling & Software configuration management

Project Scheduling Basics

Project scheduling involves organizing tasks efficiently in software projects. Here are the key steps a software project manager follows:

  1. Identify Activities: List all major tasks that need to be completed.
  2. Break Down Tasks: Divide tasks into smaller, manageable steps for easier execution.
  3. Understand Dependencies: Determine which tasks depend on others and the sequence in which they must be completed.
  4. Time Estimates: Estimate the time required for each task, considering factors like complexity and resources.
  5. Create Activity Network: Visualize task relationships using an activity network or flowchart to see how tasks are interconnected.
  6. Task Dates: Set start and end dates for each task, considering dependencies and resource availability.
  7. Critical Path Analysis: Identify the critical path, which is the sequence of tasks that determines the project's overall duration. Tasks on the critical path must be completed on time to avoid project delays.
  8. Allocate Resources to Tasks: Once tasks are identified and their dependencies understood, the next step is to allocate resources effectively. This involves assigning the right people, equipment, and materials to each task to ensure smooth execution. Factors to consider include availability of resources, their skills and expertise, and any constraints such as budget or time limitations. Proper resource allocation is crucial for meeting project deadlines and achieving goals efficiently.

The first step in scheduling a software project is to list all the activities needed to finish the project. Knowing the project details and development process helps managers identify these key activities. Next, these activities are divided into smaller, logical parts called tasks. Tasks are then assigned to different developers.
Once tasks are divided, the project manager identifies dependencies among them. Dependencies determine the order of task execution. For example, if Task A needs Task B's results, Task A must be scheduled after Task B because it depends on Task B.

Project Scheduling Basic Principles

Effective project scheduling is guided by several fundamental principles that help organize and manage tasks efficiently. These principles ensure that projects are broken down into manageable parts, tasks are assigned appropriately, dependencies are identified, and progress is tracked through defined milestones. Here are the key principles:

Relationship between People and Effort

Managing people and effort is crucial in software development. One common misconception among managers is the belief that adding more programmers can compensate for falling behind schedule. However, the reality is more nuanced. Software engineering deals with the dynamics between people and effort management during the product development phase. Here are some key points to consider:

  1. Project Size: Small projects can often be handled by a single person.
  2. Team Size: Larger projects may require additional team members to complete.
  3. Adding People: Adding team members late in a project can disrupt schedules as they need time to learn the system, impacting productivity.
  4. Early Staffing: Staffing more people early in a project can speed up completion, while reducing resources can extend the timeline.

It's important to balance team size and project complexity to ensure efficient progress and timely completion.

Task Network

The task network, also known as the activity network, plays a crucial role in meeting project deadlines in software development. It is a graphical representation of the flow of tasks within a project, highlighting major software engineering activities. The task network diagram helps identify the critical path and project duration.

An activity network outlines the various activities in a project, their estimated durations, and their dependencies on each other. There are two common representations for activity networks:

  1. Activity on Node (AoN): In this format, each activity is represented by a rectangular node. The duration of each activity is displayed within its respective node, and directional edges indicate inter-task dependencies.
  2. Activity on Edge (AoE): Here, tasks are associated with the edges of the network. The edges display task durations, and project milestones are represented by nodes in the graph.

Scheduling

Project scheduling involves defining start and end dates for individual tasks, along with allocating resources within a budget. It focuses specifically on tasks, their deadlines, and project dependencies.

Time-Line Charts / Gantt Chart

When creating a software project schedule, the process starts with defining a set of tasks (known as the work breakdown structure). Tasks may also be assigned to specific individuals. Based on this information, a time-line chart, commonly known as a Gantt chart, is generated. This chart can cover the entire project duration or be segmented into charts for different project functions or individuals involved in the project.

Using time-line charts or Gantt charts aids in visualizing project timelines, task dependencies, resource allocation, and individual responsibilities.

PERT Charts

A PERT chart, also known as a PERT diagram, is a tool used to schedule and organize tasks within a project. PERT stands for Program Evaluation and Review Technique. It provides a visual representation of a project's timeline. These charts are similar to Gantt charts but are structured differently.

PERT Chart Creation Steps

  1. Identify Project Tasks: The first step is to collect necessary project information and tasks, including a business case, a communication plan, and an initial kickoff meeting.
  2. Define Task Dependencies: Task dependencies show relationships between various tasks. Creating dependencies helps track work, ensure task completion, and establish clear communication. Dependencies are visualized by connecting and numbering tasks.
  3. Connect Project Tasks: Once task dependencies are created, PERT is prepared by connecting project tasks using arrows to represent tasks and nodes to represent events or milestones.
  4. Estimate Project Time Frame: The overall project time frame is prepared using the critical path method (CPM) and the PERT formula. Time estimates are calculated based on the following parameters:
    • Optimistic Time: The minimum amount of time needed to accomplish a task.
    • Pessimistic Time: The maximum amount of time needed to accomplish a task.
    • Most Likely Time: The best estimate of how long it will likely take to accomplish a task.
    The PERT formula is used to calculate the expected duration of tasks and completion time using: (Optimistic Time + (4 × Most Likely Time) + Pessimistic Time) ÷ 6. This can be measured in minutes, hours, days, or weeks.
  5. Manage Task Progress: The final step is to manage task progress until project completion by closing dependencies and addressing issues along the way.

Example PERT Formula Calculation: If the optimistic time for a task is 30 minutes, the pessimistic time is 60 minutes, and the most likely time is 45 minutes, the PERT formula would be: (30 min + (4 × 45 min) + 60 min) ÷ 6 = 45 minutes.

Staffing

Software project managers select their project team members, aiming to identify skilled software developers crucial for project success. Good developers enhance team productivity, while poor ones can reduce it significantly. Staffing is the process of managing human capital, the organization's most important resource, encompassing possession, retention, promotion, and compensation.

Staffing Process

  1. Manpower Planning: Involves workload and workforce analysis to determine staffing needs. Workload analysis defines required job types and numbers, while workforce analysis assesses available human resources, identifying shortages or surpluses.
  2. Recruitment: Involves searching for and encouraging prospective employees to apply.
  3. Selection: Choosing and appointing suitable candidates through various steps like screening, tests, interviews, and medical exams.
  4. Placement and Orientation: Assigning selected candidates to suitable roles for efficiency and personal satisfaction.
  5. Training and Development: Providing training internally or externally to improve skills and productivity.
  6. Performance Appraisal: Evaluating employees based on predefined standards and providing feedback.
  7. Promotion and Career Planning: Transferring employees to higher roles with increased responsibilities and compensation.
  8. Compensation: Providing financial and non-financial rewards like salary, bonuses, insurance, and vacations to employees.

Software Configuration Management Concepts and Definitions

The configuration of software refers to the state of all project deliverables at any given time. Software configuration management (SCM) is responsible for controlling the configuration of software throughout its life cycle. The deliverables of software projects include various objects like source code, design documents, SRS documents, test documents, user manuals, etc., which are modified by multiple developers, leading to new revisions and versions.

Software Revision vs Version

Configuration Management Activities

  1. Configuration Identification: Involves deciding which parts of the system should be monitored.
  2. Configuration Control: Ensures smooth changes to the system.

Configuration Identification

Objects are classified into controlled, precontrolled, and uncontrolled categories. Controlled objects are under configuration control, precontrolled objects will be controlled later, and uncontrolled objects are not subject to control. Controllable objects include requirements specifications, design documents, tools, source code, test cases, and problem reports.

Configuration Control

Need and Importance of Software Configuration Management (SCM)

Need of SCM

Software projects often involve multiple contributors, continuous updates, and various versions, branches, and authors. Geographically distributed teams working concurrently also require effective management. SCM is necessary to accommodate changes in user requirements, policies, budgets, and schedules.

Importance of SCM

Benefits of Software Configuration Management (SCM)

Software Configuration Management (SCM) is crucial for managing and controlling the evolution of software products. Below are some of the key benefits of using SCM:

  1. Better Quality Control: SCM organizes the development process, leading to improved quality control and reduced errors.
  2. Version Control: SCM tracks different versions of software, particularly helpful for large projects and collaboration.
  3. Improved Collaboration: SCM tools enable collaborative work by allowing developers to share code, track changes, and manage conflicts effectively.
  4. Automated Builds and Testing: SCM automates build and testing processes, simplifying software maintenance and deployment.
  5. Faster Release Cycles: SCM accelerates release cycles by automating processes, enabling quicker deployment of new features and fixes.
  6. Traceability: SCM provides a comprehensive history of the development process, aiding in tracking changes and understanding product evolution.

Overall, SCM enhances the efficiency, quality, and reliability of the software development process.

The Software Configuration Management (SCM) Process

Software Configuration Management (SCM) is a structured approach that ensures control and management of software products throughout their lifecycle. The SCM process involves several key activities that contribute to the efficient development and maintenance of software systems.

  1. Identification and Establishment:

    This step focuses on identifying and establishing configuration items (CIs) from software products. CIs can include various elements such as design documents, source code files, test scripts, and configuration files. Proper identification is crucial for managing these items effectively.

    For example:

    • Naming conventions like "login_v1.2.php" for version control.
    • Organizing folders, such as "Code_D," to indicate daily backups.
    • Defining baseline configurations that ensure the software operates without errors.
  2. Version Control:

    This activity involves creating versions or specifications of existing software products. Version control systems track changes made to files over time, allowing developers to work collaboratively while ensuring the integrity of the software.

  3. Change Control:

    Change control is essential for managing modifications to configuration items. It includes processes for requesting, evaluating, approving, and implementing changes while maintaining consistency and avoiding conflicts within the software system.

  4. Configuration Auditing:

    Configuration auditing involves technical reviews to verify the correctness, completeness, and consistency of modified configuration objects. Audits ensure that the software configuration aligns with project requirements and standards.

  5. Reporting:

    Reporting provides stakeholders with accurate status updates and current configuration data. Documentation such as admin guides, user guides, FAQs, release notes, and installation guides facilitate communication and transparency throughout the software development process.

Infrastructure Setup for Software Development

Setting up the right infrastructure is crucial for efficient, organized, and quality-oriented software development projects. The following steps outline key aspects of infrastructure setup:

  1. Create a Test Environment:

    The test environment is where the project is thoroughly tested. All modules are assembled here to ensure they work properly. This environment is dynamic and subject to frequent changes, so having a dedicated test environment is essential for successful software development.

  2. Create a QA and Staging Environment:

    This environment is used for staging the application and conducting quality assurance testing. It allows project managers to demonstrate the project/product to stakeholders at different stages of production.

  3. UI Environment:

    Developers set up an isolated environment to test the user interface behavior and design. This ensures that the user interface functions as intended.

  4. Create a Pipeline for Automatic Build, Test, and Deploy:

    Setting up a pipeline for automatic build, test, and deployment is crucial. When developers make changes, this pipeline automatically triggers responses such as building the product, running automated tests, and deploying the code. This process saves time and reduces errors.

  5. Basic Model Page:

    For web-based projects, a basic model page is created to communicate design guidelines, brand definitions, and other standards. This page serves as a model for subsequent pages and establishes the connection between the web front end, service middle tier, and database backend.

Team Training for Software Development

A software development team plays a crucial role in designing, building, testing, deploying, and maintaining software products or services. Team training is essential for introducing new business software, addressing common training needs, enhancing customer service, and promoting technical skills.

How to Train the Team:

  1. Use Team Input to Determine Training Needs:

    Seek feedback from your team to identify areas where they require more experience or training. Their input can guide the type of training needed.

  2. Establish a Training Schedule:

    Create a training schedule that aligns with department activities. Ensure that the team has adequate time to learn new skills without disrupting critical workdays.

  3. Create Lesson Plans:

    Develop lesson plans for each training session, including lectures, group activities, presentations, and other educational components to enhance team knowledge.

  4. Balance Lecture-Style Training with Team Activities:

    Keep the team engaged during training by varying the learning format. Combine lecture-style presentations with interactive group discussions and activities.

  5. Create Key Points for Each Session:

    Document key talking points, questions answered, and topics covered in each training session to ensure that important information is retained.

  6. Test Team Learning:

    Conduct tests or quizzes to assess the team's understanding and learning progress. Use the results to gauge the success of the training session.

  7. Evaluate Training Success:

    After training concludes, evaluate its success by measuring the performance levels of individual participants. You can also gather feedback through surveys to improve future training sessions.

System Maintenance in Software Development

Software maintenance is a continuous process that occurs throughout the entire life cycle of a software system. The goal of software maintenance is to keep the software system working correctly, efficiently, and securely. This includes fixing bugs, adding new features, improving performance, and updating the software to work with new hardware or software systems.

It is crucial to have a well-defined maintenance process. Software maintenance can be costly and complex, especially for large and complex systems. Therefore, the cost and effort of maintenance should be taken into account during the planning phase of a software project. A clear and well-defined maintenance plan should include regular activities such as testing, backup, and bug fixing.

Key Aspects of Software Maintenance:

  • Bug Fixing:

    The process of finding and fixing errors and problems in the software.

  • Enhancements:

    Adding new features or improving existing features.

  • Performance Optimization:

    Improving the speed, efficiency, and reliability of the software.

  • Porting and Migration:

    Adapting the software to run on new hardware or software platforms.

  • Re-Engineering:

    Improving the design and architecture of the software to make it more maintainable and scalable.

  • Documentation:

    Creating, updating, and maintaining documentation such as user manuals, technical specifications, and design documents.

Types of Software Maintenance:

  1. Corrective Maintenance:

    Fixing errors and bugs in the software.

  2. Adaptive Maintenance:

    Modifying the software system to adapt it to changes in the environment, such as changes in hardware or software, government policies, and business rules.

  3. Perfective Maintenance:

    Improving functionality, performance, and reliability, and restructuring the software system.

  4. Preventive Maintenance:

    Taking measures to prevent future problems, and implementing preventive measures such as backups.

Maintenance can be categorized into proactive and reactive types. Proactive maintenance involves taking preventive measures to avoid problems from occurring, while reactive maintenance involves addressing problems that have already occurred.

System Retirement in Software Management

System retirement, also known as applications decommissioning, is the process of shutting down jobless or obsolete business applications. This process does not affect a company's primary systems and data but focuses on retiring redundant software to reduce operational costs, enhance system performance, and optimize resources.

The Need for Application Retirement:

  • Technological Advancements:

    Changes in technology may render old applications obsolete, necessitating their retirement.

  • Changing Business Requirements:

    Evolution in business processes may make certain applications redundant, leading to their retirement.

  • High Maintenance Costs:

    Outdated applications often incur high maintenance costs, making retirement a cost-effective solution.

  • Security Risks:

    Obsolete applications may pose security risks due to lack of updates and support, prompting their retirement.

Retirement Process:

  1. Comprehensive Analysis and Planning:

    Analyze existing software and create a retirement plan.

  2. Migration and Data Management:

    Develop a migration strategy for a smooth transition from legacy systems to new systems.

  3. Stakeholder Engagement:

    Involve key stakeholders to gather insights, address concerns, and ensure a successful transition.

  4. Continuous Monitoring and Optimization:
    • Monitor new applications' performance and gather feedback from users.
    • Optimize systems based on user needs and evolving business requirements.
    • Regularly assess the retirement strategy's effectiveness and make adjustments as needed.
  5. Testing:

    Test migration tools and estimate the impact of retirement on business operations.

  6. Migrate Users:

    Notify users of the upcoming retirement and facilitate their migration to new systems.

  7. Archive:

    Properly archive existing data, code, documentation, and system artifacts for potential future restoration.

  8. System Removal:

    Take a complete backup of the system before initiating the retirement process.

Configuration Baselines in Configuration Management

In configuration management, a baseline is an agreed description of the attributes of a product at a specific point in time. This baseline serves as a basis for defining changes, where a change represents a movement from the baseline state to a subsequent state.

A baseline can be established to mark an approved configuration item, which may refer to a single work product or a set of work products used as a logical basis.

Baseline Control:

In many environments, baselines are controlled to either permit or prohibit certain subsequent activities against work products. These activities are selected, controlled, and sometimes monitored depending on the configuration management system.

Configuration audits associated with baselines may include:

The purpose of baseline control and audits is to ensure that the configuration items are managed effectively and that changes are appropriately evaluated and approved.

Interface Control in Software and Systems

Interfaces serve as points of communication between different components within an application or system. They define interactions between hardware, software, and users, facilitating seamless functionality and communication.

Developers use interfaces as tools to enable interaction between various system components, ensuring efficient communication and data exchange. Interfaces also play a crucial role in allowing users to interact with hardware devices and software programs.

Types of Interfaces:

1. Hardware Interfaces:

  • USB (Universal Serial Bus) interfaces
  • Serial interfaces (transmit data as single streams of items between digital systems)
  • Parallel interfaces (allow sending multiple bits of data across different channels)
  • PCI and PCI-Express interfaces (Peripheral Component Interconnect)
  • IEEE 1394 interface (communication between audio and video-based hardware devices)

2. Software Interfaces:

  • Operating systems
  • Simple Mail Transfer Protocol (SMTP) email
  • IP network protocols
  • Software drivers

3. User Interfaces:

  • Command-line interface (text-only interface for issuing basic commands)
  • Graphical User Interface (GUI) for controlling devices using graphical icons and audio cues
  • Menu-driven interface with screens (menus) for user interaction

Each type of interface plays a crucial role in system functionality, facilitating communication, control, and user interaction within software and hardware environments.

Submitting Change Request Process

A change request is a formal proposal to alter the functionality or scope of a project. Managing change requests involves several steps to ensure proper evaluation and decision-making.

Steps for Managing Change Requests:

  1. Collect Relevant Documentation: Gather all necessary documentation describing the proposed change, including its purpose, benefits, and potential impact.
  2. Determine Scope: Evaluate whether the change falls within or outside the project's defined scope and boundaries.
  3. Priority Analysis: Assess the importance and urgency of the change request to prioritize its implementation.
  4. Approval/Rejection: Based on analysis and evaluation, decide whether to approve or reject the change request. Small changes may be approved by a designated team, while significant changes may require higher-level approval.
  5. Implementation Planning: If approved, develop an implementation plan detailing tasks, resources, timelines, and responsibilities for executing the change.

Communication throughout this process is crucial, ensuring stakeholders are informed of decisions and reasons for approval or rejection. Effective change management helps maintain project alignment with business goals and ensures changes are implemented smoothly and efficiently.

Configuration Control Tool in Software Configuration Management

Software configuration management involves automating maintenance tasks to ensure proper software functionality and performance. A configuration control tool plays a crucial role in managing these tasks effectively.

Types of Software Configuration Management Tools:

  • Version Control Software (VCS): Tracks software changes, including source code and application code modifications.
  • Build Automation Tools: Automates compilation, testing, packaging, and deployment processes, commonly used for continuous integration (CI) and test execution.
  • Configuration Management Systems: Manages system configurations to maintain consistency across different environments.
  • Artifact Repositories: Stores and organizes binary artifacts like compiled code, libraries, and dependencies.
  • Issue and Bug-Tracking Software: Tracks and manages issues, bugs, and defects throughout the software development lifecycle.

These tools enhance productivity, streamline processes, ensure version control, and facilitate collaboration among development teams. Choosing the right combination of configuration control tools is essential for efficient software development and maintenance.