Software Product Development Principles

All software products are a result of hundreds or thousands of small decisions made by a group of people overtime. Not everything can be captured in Product Requirement Documents (PRDs) and Jira (a project management tool) tickets for the engineers to make these small decisions. Furthermore, with remote and globalized workforces, it has become increasingly important that all engineers operate with the same set of principles to create a good product. Over the years, I found the following principles to be helpful: 


1. Build trust with the users 

For example, if you are releasing an update, ensure that it does not disrupt customer operations. 

2. Let fresh eyes verify the code before release (peer code review) 

Framework, culture, and tooling are needed to support this principle. 

3. Everything that could change with time should be implemented as a configurable parameter (high configurability)

Over-configurability can lead to increased complexity. 

4. Speed does not mean lower quality for the user- implement fewer features with quality rather than more features with low quality. 

Adopt a system for feature prioritization and quality assurance. 

5. Understand how the code fits into the big picture (integration testing) 

Critical for CI/CD development framework. 

6. Document what can go wrong (understand risks and have a mitigation plan)

For example, have rollback plans if software update fails. 

7. Ensure code does not lower the data integrity of the system 

Adopt data validation techniques. 

8. Understand the “why” behind the requirement (user empathy) 

Get a clear idea of what problem is user trying to solve. 

9. Simplify 

Increases speed, reduces bugs, and lowers maintenance costs. 

10. Frequent small deliverables are better than infrequent large deliverables

This is the main idea behind Agile development

11. Write release notes that both frequent and infrequent users of the product can understand

Follow the same template every time. 




Having principles is not enough. To build good software products, we must embody these principles daily, ensuring they guide our actions and decisions at every step.

Popular posts from this blog

Obituary: Charles T. Munger

Marry the best who will have you and other wisdom from Munger and Buffett

Systems Thinking as taught by Ackoff