
The GOLDEN Rules of Software Engineering
Published on: October 28, 2023
Last updated: August 22, 2024 Read in fullscreen view
Last updated: August 22, 2024 Read in fullscreen view



- 27 Oct 2020
8 principles of Agile Testing 921
- 01 Oct 2020
Fail fast, learn faster with Agile methodology 695
- 08 Dec 2021
What Are The 4 Types of Maintenance Strategies? 677
- 13 May 2022
IT Training and Development: The most effective options for upskilling IT staff 635
- 02 Dec 2022
3 Levels of Quality in KANO Analysis Model 606
- 14 Oct 2021
Advantages and Disadvantages of Time and Material Contract (T&M) 577
- 21 May 2022
"Fail Fast, Fail Often, Fail Forward" is the answer to Agile practices of software success 532
- 19 Oct 2021
Is gold plating good or bad in project management? 521
- 09 Oct 2022
Key Advantages and Disadvantages of Agile Methodology 501
- 18 Oct 2020
How to use the "Knowns" and "Unknowns" technique to manage assumptions 493
- 03 Nov 2022
Questions and answers about Kano Model 453
- 08 Oct 2022
KPI - The New Leadership 444
- 14 Oct 2021
Stream Story - Low land stream or fast moving stream? 436
- 06 Mar 2021
4 things you need to do before getting an accurate quote for your software development 414
- 13 Oct 2021
What is Bug Convergence? Why is it important for User Acceptance Testing (UAT)? 399
- 01 Sep 2022
Facts Chart: Why Do Software Projects Fail? 372
- 12 Oct 2020
The Agile Manifesto - Principle #8 335
- 16 Apr 2021
Insightful Business Technology Consulting at TIGO 310
- 23 Sep 2021
INFOGRAPHIC: Top 9 Software Outsourcing Mistakes 300
- 01 Oct 2020
Handling tight project deadlines as a business analyst 285
- 07 Jul 2021
The 5 Levels of IT Help Desk Support 278
- 02 Nov 2022
Frequently Asked Questions about Agile and Scrum 264
- 10 Dec 2023
Pain points of User Acceptance Testing (UAT) 254
- 28 Dec 2021
8 types of pricing models in software development outsourcing 252
- 19 Apr 2021
7 Most Common Time-Wasters For Software Development 250
- 11 Jan 2024
What are the Benefits and Limitations of Augmented Intelligence? 241
- 13 Dec 2020
Move fast, fail fast, fail-safe 237
- 10 Apr 2022
Agile self-organizing teams: What are they? How do they work? 229
- 31 Oct 2021
Tips to Fail Fast With Outsourcing 228
- 05 May 2021
TIGO Magic Scale - PoC tool for you to apply dichotomous thinking before submitting RFP 222
- 07 Oct 2020
How To Manage Expectations at Work (and Why It's Important) 218
- 06 Feb 2021
Why fail fast and learn fast? 217
- 20 Nov 2022
Agile working method in software and football 210
- 16 Jul 2022
What are disadvantages of Agile Methodology? How to mitigate the disadvantages ? 207
- 06 Nov 2019
How to Access Software Project Size? 192
- 10 Apr 2021
RFP vs POC: Why the proof of concept is replacing the request for proposal 190
- 01 May 2023
CTO Interview Questions 189
- 18 Aug 2022
What are the consequences of poor requirements with software development projects? 183
- 03 Nov 2022
Top questions and answers you must know before ask for software outsourcing 183
- 01 Mar 2022
Why Does Scrum Fail in Large Companies? 180
- 07 Aug 2022
Things to Consider When Choosing a Technology Partner 170
- 28 Nov 2023
Scrum Team Failure — Scrum Anti-Patterns Taxonomy (3) 168
- 10 Nov 2022
Poor Code Indicators and How to Improve Your Code? 164
- 03 Jul 2022
Manifesto for Agile Software Development 160
- 09 Feb 2023
The Challenge of Fixed-Bid Software Projects 141
- 20 Nov 2022
Software Requirements Are A Communication Problem 136
- 26 Dec 2023
Improving Meeting Effectiveness Through the Six Thinking Hats 136
- 11 Oct 2021
10 Myths About Low-End Project Management Software 133
- 07 Oct 2022
Digital Transformation: Become a Technology Powerhouse 132
- 01 Dec 2022
Difference between Set-based development and Point-based development 130
- 01 Mar 2023
Bug Prioritization - What are the 5 levels of priority? 129
- 17 Feb 2022
Prioritizing Software Requirements with Kano Analysis 129
- 09 Mar 2022
Consultant Implementation Pricing 123
- 21 Oct 2022
Virtual meeting - How does TIGO save cost, reduce complexity and improve quality by remote communication? 117
- 01 Mar 2023
How do you deal with disputes and conflicts that may arise during a software consulting project? 108
- 09 Jan 2022
How to Bridge the Gap Between Business and IT? 106
- 08 Nov 2022
4 tips for meeting tough deadlines when outsourcing projects to software vendor 106
- 05 Jan 2024
Easy ASANA tips & tricks for you and your team 93
- 16 Feb 2021
Choose Outsourcing for Your Non Disclosure Agreement (NDA) 91
- 01 Jun 2022
How Your Agile Development Team is Just Like a Football Team? 82
- 10 Oct 2022
Should Your Business Go Agile? (Infographic) 82
- 12 Mar 2024
How do you create FOMO in software prospects? 63
- 14 Mar 2024
Why should you opt for software localization from a professional agency? 51
- 17 Mar 2025
IT Consultants in Digital Transformation 33
Software Design
- If you don't do a system architectural design with well-defined interfaces, integration will be a big mess.
- Successful software is designed by people who understand the application of the software (e.g., a well-designed missile control program was designed by someone who understood missiles).
- Unaddressed technical debt increases software entropy and cost of further rework.
- Software development requires a substantial time commitment to learning the application domain.
- Use defensive programming.
- To be an anti-pattern it must have been witnessed occurring at least three times
- Decisions made in the upstream portion of the software development process (requirements and design) impact productivity, quality, and costs throughout the life cycle more than the other portions.
Requirements
- Specifications are almost always incomplete and fraught with ambiguities.
- Requirements will appear to fluctuate when the development team lacks application knowledge and performs an incomplete analysis of the requirements.
- Specification mistakes often occur when designers do not have sufficient application knowledge to interpret the customer's intentions from the requirements documen
Team
- If a project is late and you add more people, the project will be even later.
- Two factors that affect productivity are work force experience level and level of project familiarity due to learning-curve effects.
- Developers' productivity varies greatly depending on their individual skills (experience concerning a development activity, knowledge of the tools, methods, and notations used, etc.)
- Using better and fewer people is more productive than using more less qualified people.
- The greater the number of developers working on a task simultaneously, the faster that task is finished, but more overall effort is required due to the growing need for communication among developers. Thus, the productivity of the individual developer decreases.
- Broad application knowledge is acquired more through relevant experience than through training.
- A new project assignee does not become productive until six months to a year into the project.
- Matching the tasks to the skills and motivation of the people available increases productivity.
- Use Tuckman's Model of Team Dynamics.
- Productivity is increased by increasing motivation, improving the work environment, getting the best people for the job, improving the process, and maximizing reuse
Task Assignment
- Using stretch work assignments to help engineers grow.
- The two task-type variables that have the greatest impact on programmer productivity are the programming language and the quality of external documentation.
- The three resource-type variables that have the greatest impact on programmer productivity are the availability of programming tools, the availability of programming practices, and programmer experience.
- Efficiency is secondary to effectiveness.
Process (Best Practices)
- The earlier problems are discovered, the less the overall cost will be.
- Reviews of non-technical documents (e.g., requirements specification, user manual) are more effective if the customer is involved.
- Talk to users, not to customers to verify the prototype.
- Reducing undiscovered work leads to increased productivity
- Configuration management is good.
- Sticking with a too-tight schedule increases cost due to a large work force.
- Improving the software process increases employees's motivation, which also increases their productivity.
- Rework is usually due to customer requirements, product flaws, and communication breakdown between project members.
- Implementers may be hired only after the architecture of the system has been completed.
Simplicity
- Simplicity is the ultimate sophistication
- Most systems work best if they are kept simple rather than made overly complicated - The KISS principle (or Keep It Simple, Stupid)
- Product complexity can be reduced by reducing code complexity, design complexity, cognitive complexity, test complexity, and management complexity/
Flexibillity
- Learn the rules, break the rules, make up new rules, break the new rules (De-normalization).
- Software is a lot more about people than it is about computers.
- Team members that are new to a project are less productive (1/3 to 2/3 less) than the adequately trained people.
The mythical man-month
- No silver bullet
- Aware of the second-system effect/syndrome "trying to build a bigger, shinier, more complex system than the first one"
- The average newly hired employee is about as productive as an experienced employee.
- Extreme time pressure leads to decreased productivity.
- Extreme time pressure leads to a faster rate at which errors are made, which leads to a further delay in the completion date.
- Slower programmers show a great deal of improvement when using inspections (I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it. - Bill Gates)
Paradox
- In most projects, the first system built is barely usable… Plan one to throw away; you will, anyhow.
- Reuse Complicates Use
- Coarse-grained entities are easier to use, but fine-grained entities are more reusable.
- Evolution Impedes Survival
- Flexibility Breeds Complexity
Negotation
- The customer often changes deadlines to be earlier than originally agreed-upon, requiring negotiation with the customer for either allowing some deliverables to be delivered at the earlier date, with the rest being delivered later, or dropping some deliverables or requirements altogether.
- Besides a developer's ability to design and implement programs, his skills in resolving conflicting requirements, negotiating with the customer, ensuring that the development staff shares a consistent understanding of the design, and providing communications between two contending groups are crucial to project performance
By Truong Pham (Henry), PMO Director, TIGO Solutions
Pham Dinh Truong (Henry)
CEO at TIGO Solutions
CEO at TIGO Solutions
Henry Pham is the founder and CEO of TIGO SOLUTIONS. After 20 years of working in the IT industry, he founded it for the contribution back to the community. In addition to providing cost-effective outsourcing solutions to clients worldwide, TIGO SOLUTIONS recruit at the top of their market, providing cutting-edge software development services to partners located across the world through a unique, integrated resource model.
While TIGO engineers team create high quality deliverables, Henry Pham will help clients create an excellent scope of work: Say "no" to distractions and "yes" to innovation.
You can get in touch with him here, or find out more about TIGO Solutions.[{"displaySettingInfo":"[{\"isFullLayout\":false,\"layoutWidthRatio\":\"\",\"showBlogMetadata\":true,\"showAds\":true,\"showQuickNoticeBar\":true,\"includeSuggestedAndRelatedBlogs\":true,\"enableLazyLoad\":true,\"quoteStyle\":\"1\",\"bigHeadingFontStyle\":\"1\",\"postPictureFrameStyle\":\"1\",\"isFaqLayout\":false,\"isIncludedCaption\":false,\"faqLayoutTheme\":\"1\",\"isSliderLayout\":false}]"},{"articleSourceInfo":"[{\"sourceName\":\"\",\"sourceValue\":\"\"}]"},{"privacyInfo":"[{\"isOutsideVietnam\":false}]"},{"tocInfo":"[{\"isEnabledTOC\":true,\"isAutoNumbering\":false,\"isShowKeyHeadingWithIcon\":false}]"},{"bannerInfo":"[{\"isBannerBrightnessAdjust\":false,\"bannerBrightnessLevel\":\"\",\"isRandomBannerDisplay\":true}]"},{"termSettingInfo":"[{\"showTermsOnPage\":true,\"displaySequentialTermNumber\":false}]"}]
Via
{content}
