How do we value the system development team?
How we value a system?

How do we value the system development team?


Design and Simplicity

Developing software is a challenging task. Even when we aim to create something simple, we can end up creating something overly complex. Often, we try to incorporate new technologies or techniques in the belief that they will improve our development process, but in reality, they increase complexity and cost us time and money in the long run. Therefore, it is crucial to prioritize simplicity in our software development efforts.

Why do we develop software? It is easy to lose sight of the end goal, but the purpose of every software we create is to help people. Whether we're developing a web browser or a spreadsheet program, the ultimate goal is to assist users in performing tasks more efficiently. Keeping this in mind, we can identify the functionalities that matter most to our users, prioritize them, and eliminate unnecessary tasks.??

Value and effort

Suppose we have 50 features to implement in our application. How do we prioritize them? We need to consider the value of each feature and the effort required to develop it. We can divide the project into multiple sprints, each lasting 15 days or a month, and focus on delivering specific functionality in each sprint.

We also need to consider the infrastructure required to support our application. It must be scalable enough to handle thousands of users, transactions, and requests per day. We will need the expertise of software architects and DevOps specialists to guide us in choosing the best approaches and frameworks for our development team.


The Value

The value of a potential functionality is determined by its usefulness to the end-users. While it is not always easy to measure the value of a feature, we can make approximations based on its potential and probable value. A feature that is rarely executed but has high potential value is still desirable, especially if it is executed frequently. Similarly, if a feature is executed many times, but its potential value is not that high, it is still worth implementing. Finally, we have functionalities that are neither executed often nor very useful, and these should be of low priority.

To understand the client's needs and priorities, we need a business analyst who can help us communicate with the client and identify the essential functionalities required for the final deliverable. They will work with the client to agree on priorities and segment the deliverables for the development team to complete on time.


Effort

The effort required to develop a specific functionality can be measured in terms of time, but it depends on various factors that make it difficult to quantify accurately. For instance, not all programmers work at the same pace. Moreover, there are several hidden costs that can increase the overall effort, including code maintainability, problem analysis time, communication with quality departments, validation tests, administration, UX design, and server environments standardization (production, QA, and test).

Maintenance

Developing a complete functionality or module is not enough; it must also be maintained over time. Depending on the decisions we make, this can either be easy or complicated. It's important to program everything with a perspective for the medium and long term, considering scalability and adaptability.

Quality and Future

Software quality involves testing both functional and non-functional deliverables according to client requirements. It's not just about finding bugs; it's about avoiding errors in production, which can be costly. It's cheaper to identify bugs during unit and integration testing rather than during alpha testing or production. A good development department should have QA teams to assist in this process.

All these variables emphasize why well-designed and high-quality software is desirable. Building software that serves many people for years is more complex than building software for an individual. If we neglect design and future maintenance, we'll end up with software that is either unhelpful to users or doesn't work properly.

We must also consider version control systems, and changes, and strive to have an environment similar to production servers (DevOps). DevOps helps in releasing software with continuous integration (CI/CD) and ensures a suitable environment, enabling smoother release changes and proper deployment close to production with minimal impact on end-users. With DevOps, the focus is on continuous improvement, reduction of variations, automation of deliverables, quick correction, and timely deliveries.

"The importance is continuous improvement, and reduction of variations. Automation deliverables, and quick correction, and deliveries in a timely manner".


Simplicity

The most effective approach is to implement incremental modifications, while also considering the ease of future maintenance. It can be argued that the maintainability of any software system is directly proportional to the simplicity of its components.

In other words, the more straightforward and uncomplicated our development components are, the easier it is to manage and maintain the entire system.

"Simplicity is the ultimate sophistication". Steve Jobs


Testing

To ensure the ongoing functionality of our programs, testing is an absolute necessity. The more rigorous the testing process, the greater the level of confidence we can have in the system's reliability.

Regardless of our level of expertise, it is imperative to test the code we produce, as mistakes are inevitable and no one is infallible. It is recommended to conduct a range of tests, including Unit, Integration, Regression, Stress, and Usability testing, to ensure comprehensive coverage and accuracy.



Value Project or System Development

Value each delivery (W), or User Story, or Effort

W = [Sum (Positive Attribute's) - Sum(Negative Attribute's] / Timeto the case.

Note: It's flexible formula, you value or multiply attributes according to the case.

Positive Attributes (example's): +Delivery Development, +Business Analyst, *Simplicity (0 to 100%), Maintainable, *Environment with Devops(0 to 100%), *Test QA(number tests cases/total test cases).

Negative Attributes (example's): Bugs, Delivery Lately (real time - plan time), Without structure (design patterns), etc.


Value Project Total = W1 ?+ W2 + W3 + Wn ….


Don't stop there "Value Project Total", you always will have to learn from and improve in each project's.        


Summary:

The effectiveness of a programmer or a system can be evaluated based on the efficiency of their deliveries, the number of errors identified during the QA process, and the absence of errors in production. If unexpected errors do arise, the response time to resolve them should be optimal.

To facilitate the development process and streamline the release pipeline, DevOps practices are highly recommended. These practices can help create ideal development environments, prepare systems for production release with minimal bottlenecks, and provide best practice recommendations for system simplicity, scalability, and robustness.

The simplicity and maintainability of our code are crucial to ensuring success, and while achieving this is not an easy task, it can be accomplished with sufficient experience and good design. Additionally, providing client support and user manuals can give them peace of mind. It is also important to obtain and incorporate feedback throughout each project to continue learning and improving.

I leave you the formula to estimate Value Project Total, it is in the last paragraph.

要查看或添加评论,请登录

Constantino Kusulas Vazquez的更多文章

社区洞察

其他会员也浏览了