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
Recommended for you
- 27 Oct 2020 8 principles of Agile Testing
- 01 Oct 2020 Fail fast, learn faster with Agile methodology
- 13 May 2022 IT Training and Development: The most effective options for upskilling IT staff
- 08 Dec 2021 What Are The 4 Types of Maintenance Strategies?
- 14 Oct 2021 Advantages and Disadvantages of Time and Material Contract (T&M)
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}
Explore more on these topics
TIGO Quality Secret
Tips and Tricks
Consulting and Business Support
Agile Development