Software Project Planning

Software Project Planning

In my previous post of the "back to basics" series, I wrote about software testing. If you'd like to read it before proceeding, click here.

I've observed many projects and I had been the de facto PM in a few of them. If you are in a start up or a small team, where you don't necessarily have a project manager, this guide could serve you well.

This post discusses the discovery phase of a project, it is concerned more with capturing requirements and perhaps it intersects with product management.

First, Understand The Problem

What problem are you trying to solve? The more you examine and understand the problem, your odds of finding an appropriate solution with minimal resources increase.

From previous observations, I found that projects struggle or fail primarily because the client did not define the core problem well (leads to scope-creep) or did not provide clear-enough parameters (extends timeline).

Examples of past problems I worked on:

"Maintaining a product catalog for each country is onerous and tedious"

"Calibration and diagnosis process of a system is mundane and time-consuming"

"Process of returning defective goods to a supplier is redundant and cumbersome"

The Process

I have noticed that projects can succeed if the following specification-triad are on hand:

  1. Workflow Diagram
  2. Product Design (if applicable)
  3. Entity Relationship Diagram

Below, I describe how these steps can help bring about a successful outcome.

Workflow Diagram

One way to analyze a problem is with a diagram that describes the business process of concern. It would illustrate the problem in a definitive manner. It could also help derive a solution or discover potential improvements, and become the basis for business rules developed into the software.

The diagram can be manifested in various forms: workflow diagram, use-case diagrams, decision tree, flowchart, etc. Regardless of name, it should detail the present process.

Below is an example of such a diagram from a recent project (this is a derived solution).

No alt text provided for this image

I find it easier both for me and the client to pin down problems and requirements with a flow diagram than speaking of concepts or abstract notions.

Product Design

In the product design phase, details of deliverables are set in stone, and requirements are honed and refined further, reducing the chance of misunderstanding or misinterpretation of expected outcome. It also makes the deliverables more tangible.

Below are examples of mock-ups that were designed either by me or some colleagues.

No alt text provided for this image
No alt text provided for this image

Visual mock-ups are a cheap way to change requirements or find any blind spots missed in previous steps (i.e. skip the need to iterate thru a number of releases to discover them).

Entity Relationship Diagram

I mentioned in a previous post that software processes revolve around data, hence, the importance of understanding the data and how you model it. An ERD should be the first technical task you undertake, because if you get the data model right, the remaining technical tasks would fall in line almost seamlessly. The data model does not need to be complete, but should be extendable (i.e. normalized).

No alt text provided for this image

I usually find a schema diagram to be sufficient and achieves the purpose (illustrated above).

How to Detail Technical Tasks

Thru the years, I observed software teams try various ways and methods to improve project estimation, and none seem to add more accuracy. The one variable that helped bring more accurate results is the granular definition of technical tasks.

How do you go about defining as task? give this a try:

  1. Describe with context the requirements or requested change in a couple of sentences. This explains why the task is needed.
  2. Specify technical implementation details. It creates alignment and sets a parameter around the task (i.e. shape the piece to fit into the puzzle).
  3. List acceptance criteria that sets the expected outcome to a developer, and also defines the expected contract or interface to the client.

Below is an example of task details (in case of a bug, you may add "steps to reproduce").

No alt text provided for this image

The acceptance criteria should not be (and usually is not) negotiable. But technical implementation should allow room for discussion on an optimal solution. Acceptance criteria can also be a guide to additional automated tests, and the more you apply and enforce testing, the easier it is to iterate thru future changes.

When proposing a solution, it is tempting to find the easiest path. But that could lead to blind spots that may require substantial follow-on work. Instead, creating a solution with a cynical mindset of what-could-go-wrong and an eye on dependent components can provide a more broad and comprehensive enough solution (but no necessarily exhaustive or perfect).

A Note on Project Planning

I like to groom tasks before a project or development cycle kicks-off. I fill in necessary details, and set parameters to any further discussions. This helps reduce lengthy discussions and debates. Open-ended brainstorming never end, and nothing can slow a project's velocity than a good dose of lengthy meetings.

I also practiced having weekly touch-points with stakeholders after project kick-off, and increased the frequency of these engagements the closer we get to delivery deadline.

Summary

No alt text provided for this image

Being agile and being precise are not contradictions. This process is simple and agile enough but also adds greater rigor and compliance to a project.

A picture is worth a thousand words

If you detected emphasis on visualization in the process above, you are correct. Visual aids can narrow the risk of spending countless man-hours playing a game of telephone, attempting to interpret what it is to be done. It also reduces the need to type lengthy and wordy textual interpretations (I've always hated reading such documents).

Armed with the process and information prescribed above, confidence in your project should go from 0 to a 100 real quick. Give this approach a try and let me know how it goes.

And as always, do it once, and do it right.

To view or add a comment, sign in

More articles by Ahmad A.

  • Software Engineering Management: How I Increased My Team's Delivery Rate to 81%

    Nine months ago, I stepped into the role of Engineering Manager at Xplor Pay, where the business division operates a…

  • Back to Basics: Software Testing

    In my previous post of the "back to basics" series, I wrote about UI design. If you'd like to read it before…

  • Back to Basics: User Interface

    In my previous post of the "back to basics" series, I wrote about data flow. If you like to read it before proceeding…

  • Back to Basics: Data Flow

    In my previous post of the "back to basics" series, I wrote about system architecture. If you like to read it before…

  • Back to Basics: System Architecture

    In my previous post of the "back to basics" series, I wrote about software architecture. If you like to read it before…

    2 Comments
  • Back to Basics: Software Architecture

    Most software products employ client-server architecture. A client requests data or information, and the server…

Others also viewed

Explore content categories