Agile, Reengineering, CMMI
Agile, Reengineering, CMMI
How It Works,
Best Practices, Tools
Stackify September 17, 2017 Developer Tips, Tricks & Resources, Insights for Dev Managers
How It Works
It works by first admitting that the old “waterfall” method of software development leaves a lot
to be desired. The process of “plan, design, build, test, deliver,” works okay for making cars or
buildings but not as well for creating software systems. In a business environment where
hardware, demand, and competition are all swiftly-changing variables, agile works by walking
the fine line between too much process and not enough.
It abandons the risk of spending months or years on a process that ultimately fails because of
some small mistake in an early phase. It relies instead on trusting employees and teams to work
directly with customers to understand the goals and provide solutions in a fast and incremental
way.
Faster, smaller. Traditional software development relied on phases like outlining the
requirements, planning, design, building, testing, and delivery. Agile methodology, by
contrast, looks to deploy the first increment in a couple weeks and the entire piece of
software in a couple months.
Communication. Agile teams within the business work together daily at every stage of
the project through face-to-face meetings. This collaboration and communication ensure
the process stays on track even as conditions change.
Feedback. Rather than waiting until the delivery phase to gauge success, teams
leveraging Agile methodology track the success and speed of the development process
regularly. Velocity is measured after the delivery of each increment.
Trust. Agile teams and employees are self-organizing. Rather than following a manifesto
of rules from management intended to produce the desired result, they understand the
goals and create their own path to reach them.
Adjust. Participants tune and adjust the process continually, following the KIS or Keep
It Simple principle.
The most popular and common examples are Scrum, eXtreme Programming (XP), Feature
Driven Development (FDD), Dynamic Systems Development Method (DSDM), Adaptive
Software Development (ASD), Crystal, and Lean Software Development (LSD). Teams
generally pick one or two methods. The most widely used methodologies are Scrum and XP,
which dovetail nicely.
Here’s an example of how Scrum works: Bill meets with a customer to discuss her company’s
needs. Those needs are the product backlog. Bill chooses the most important tasks to work on in
the next two weeks. His team meets in a daily scrum to target work for the day ahead and address
roadblocks. At the end of the sprint, Bill delivers the work, reviews the backlog, and sets the goal
for the next sprint. The cycle repeats until the software is complete.
Image via Open-Ware.org
eXtreme Programming. Often used with scrum, XP is an example of how Agile can heighten
customer satisfaction. Rather than deliver everything the customer could ever want far in the
future, it gives them what they need now, fast. XP is centered on frequent releases and short
development cycles. It uses code review, pair programming, unit testing, and frequent
communication with the customer.
Here’s an example of how XP works: Bill builds a list of customer requirements by having the
customer tell “user stories” that outline the features. From these, he builds a software release
plan. The software will be delivered in iterations, with one delivered every couple weeks. The
team works in programmer pairs, using daily meetings to smooth roadblocks. The customer
delivers feedback in the form of more user stories. The cycle repeats until the software is
delivered.
The benefits of Agile are tied directly to its faster, lighter, more engaged mindset. The process, in
a nutshell, delivers what the customer wants, when the customer wants it. There’s much less
wasted time spent developing in the wrong direction, and the entire system is quicker to respond
to changes. For a more comprehensive list of benefits, see this post.
Faster. Speed is one of the biggest benefits of Agile Methodology. A faster software
development life cycle means less time between paying and getting paid. That, in turn,
means a more profitable business.
Increased customer satisfaction. With Agile, customers don’t wait for months or years,
only to get exactly what they didn’t want. Instead, they get iterations of something very
close to what they want, very fast. The system adjusts quickly to refine the successful
customer solution, adapting as it goes to changes in the overall environment.
Values employees. Employees whose ideas are valued are vastly more productive than
those who are ordered to follow a set of rules. The Agile Methodology respects
employees by giving them the goal, then trusting them to reach it. Since they’re the ones
with their hands on the controls and the ones who see the obstacles that crop up every
day, employees are in the best position to respond to challenges and meet the goals at
hand.
Eliminates rework. By involving the customer at more than just the phases of
requirements and delivery, the project remains on-task and in-tune with customer needs
at every step. This means less backtracking and less “out on a limb” time between the
time we do the work and the time the customer suggests revisions.
Best Practices
The list of best practices is long and involved, with dozens of tools to pick and choose. We’ve
outlined a short list of the main benefits below. For a more comprehensive best practices guide,
see this article.
Economics of Reengineering:
• Cost of maintenance: cost annual of operation and maintenance over application
lifetime
• Cost of reengineering: predicted return on investment reduced by cost of
implementing changes and engineering risk factors
• Cost benefit: Cost of re engineering - Cost of maintenance
Re-engineering advantages:
Reduced risk
There is a high risk in new software development. There may be development
problems, staffing problems and specification problems
Reduced cost
The cost of re-engineering is often significantly less than the costs of developing new
software
The complete Software Re-Engineering lifecycle includes:
Product Management: Risks analysis, root cause analysis, business analysis,
requirements elicitation and management, product planning and scoping, competitive
analysis
Research and Innovation: Definition of a problem, data gathering and analysis,
identifying a solution and developing best-of-breed or innovative algorithms, verification
of quality for data and results, patent preparation
Product Development: Technology analysis and selection, software architecture and
design, data architecture, deployment architecture, prototyping and production code
development, comprehensive software testing, data quality testing, and product
packaging and deployment preparation
Product Delivery and Support: Hardware/Platform analysis and selection, deployment
and release procedures definition, installations and upgrades, tracking support issues,
organizing maintenance releases.
Project Management: Brings efficiency and productivity to your software re-engineering
project by utilizing modern, practical software project management, software quality
assurance, data quality assurance, and advanced risk management techniques.
Reverse Engineering:
Reverse engineering is taking apart an object to see how it works in order to duplicate
or enhance the object. The practice, taken from older industries, is now frequently used
on computer hardware and software. Software reverse engineering involves reversing a
program's machine code (the string of 0s and 1s that are sent to the logic processor)
back into the source code that it was written in, using program language statements.
Reverse-engineering is used for many purposes: as a learning tool; as a way to make
new, compatible products that are cheaper than what's currently on the market; for
making software interoperate more effectively or to bridge data between different
operating systems or databases; and to uncover the undocumented features of
commercial products.
Following are reasons for reverse engineering a part or product:
1. The original manufacturer of a product no longer produces a product
2. There is inadequate documentation of the original design
3. The original manufacturer no longer exists, but a customer needs the product
4. The original design documentation has been lost or never existed
5. Some bad features of a product need to be designed out. For example,
excessive wear might indicate where a product should be improved
6. To strengthen the good features of a product based on long-term usage of the
product
7. To analyze the good and bad features of competitors' product
8. To explore new avenues to improve product performance and features
9. To gain competitive benchmarking methods to understand competitor's products
and develop better products
10. The original CAD model is not sufficient to support modifications or current
manufacturing methods
11. The original supplier is unable or unwilling to provide additional parts
12. The original equipment manufacturers are either unwilling or unable to supply
replacement parts, or demand inflated costs for sole-source parts
13. To update obsolete materials or antiquated manufacturing processes with more
current, less-expensive technologies.
CMMI Maturity Levels
Advertisements
Previous Page
Next Page
1. Initial
2. Managed
3. Defined
4. Quantitatively Managed
5. Optimizing
Now we will give more detail about each maturity level. Next section will list down all
the process areas related to these maturity levels.