Cloud Foundry: Design and Architecture
Derek Collison discusses the goals, the design premises and patterns employed in creating the architecture of Cloud Foundry, VMware’s open source PaaS, unveiling internal architectural details.
The content has been bookmarked!
There was an error bookmarking this content! Please retry.
Posted by Vikas Hazrati on Mar 25, 2009
Performance Engineering is an important software development discipline that ensures that applications are architect-ed, designed, built and tested for performance. However, mostly in traditional projects, the scope of performance engineering is limited to performance testing where instead of identifying the workload patterns and improving the process leading to better performance, the focus is on beating the clock under tested conditions. Balasubramanian,P shares an interesting perspective on building performance engineering practice in Scrum.
Balasubramanian provided the following overview of performance engineering activties,
- Collecting and validating the non functional requirements
- Developing the required models for analysis
- Developing a performance test strategy
- Reviewing the architecture and application code to ensure compliance to performance best practices.
- Reviewing the deployment of the application, and
- For pre-existing applications, reviewing the design and code to suggest appropriate tuning activities
According to him, performance engineering should be an essential activity in Agile because
Balasubramanian suggested focusing on the following four phases for introducing performance engineering in Scrum.
I. Planning Stage
Understanding requirements and planning for performance engineering activities.
II. System Architecture Phase
Validating the architecture in terms of system qualities apart from functional and business requirements.
III. Sprints
Building blocks for producing shippable, production quality software.
IV. Closure Phase
Deploying the complete application in the production environment.
In order to make the adoption process easier, Scott Barber provided a detailed collection of tips to the performance specialist on how to engage and be productive in an Agile project.
Balasubramanian does acknowledge that there are multiple challenges in building a performance engineering culture in any project. The biggest challenge being the mindset change to focus on system quality attributes just like the system functionality. However, the rewards for building performance engineering practice right from the start far outweigh the investment and the benefits start multiplying with every sprint.
Agile Maturity Model Applied to Building and Releasing Software
Improving Software Delivery Cycles: Pre-requisites and Inhibitors
Agile Practices to Improve Project Management Organization (PMO) Effectiveness
Visual Studio vNext: ALM features for Agile Planning, Team Collaboration
In today’s hyper-competitive world, later may be too late to adopt Agile development and this Roadmap for Success will help you get started. Download "Agile Development: A Manager's Roadmap for Success" now!
If you aren't paying attention to performance, methodology doesn't help at all. Plenty of waterfall projects have run into performance problems at the end. The difference is that it's a LOT more obvious in an agile project because of the nature of time boxing iterations used in most agile methodologies. With the inevitable delays you run into in waterfall, performance ends up being just one more reason you are slipping. Regardless of methodology, you need to build in the time and resources to include performance analysis/testing/fixing etc. If you don't, it will bite you more often than not.
All the best analysis, design, and coding practices simply won't help you with some of the hardest performance problems. The hardest performance problems often arise out of something that's being done that is subtly different this time around than the last 200 times you did it. What worked in the past isn't working in this situation, the only way to reveal that is with the code.
The good news is that if you are planning on frequent performance checks, those iterative time boxes actually work in your favor. You are testing and using the system a lot more and so you have more opportunities to see problems early, and therefore fix them before people forget about the code in question. Granted, that won't always help, but it will in at least some cases.
I do agree, no matter which methodology you adopt you will have to allocate adequate time to fix the problem. Agile or waterfall, performance problems will be caught and can be resolved only by testing more frequently. In essence, test driven approach is recommended to catch performance issues early on the dev cycles.
regards
While I think the method the article presents overall makes sense, I think its ironic that in this article all that's said about "defining non-functional requirements" is:
"This is an area everyone would agree is important and critical, but is the one often missed or partly
done due to various constraints. Efforts spent here will help the team to validate the performance requirements and be realistic about it."
Really? Important but often partly done? Sort of like the coverage this gets in the article!
It's a shame the article skips right over what's arguably the most important part of performance testing, clearly defined expectations of performance, and instead give it two sentences about being "important" while not providing examples, best practices, tips on how to clearly define performance levels, resources levels, etc.
Perhaps adding something like Planguage for defining Non-Functional Requirements would be an improvement to this method? More details here:
theagileengineer.com/public/Home/Entries/2009/1...
-ryan
I agree with the activities but I think the way you propose is not the right way to achieve performance engineering. I think that instead of having performance-related items on your backlog or having a performance engineering sprint, all this issues should be part of your definition of done. This way, during the sprint planning, the team will have focus on performance engineering and related tasks will be implemented within the sprint.
The product owner often don't have the knowledge to prioritize performance engineering items.
Derek Collison discusses the goals, the design premises and patterns employed in creating the architecture of Cloud Foundry, VMware’s open source PaaS, unveiling internal architectural details.
Andrew Watson talks about the work of the OMG, where CORBA is alive and well (hint: in your car), UML and UML Profiles vs. custom Modeling languages, DDS and other middleware, and much more.
Sohil Shah discusses creating iPhone and Android enterprise mobile applications based on cloud services using the open source platform OpenMobster.
Paul Sanford presents the transformations supported by data throughout its life cycle, and how that can be better done with Splunk, an engine for monitoring and analyzing machine-generated data.
A common “best practice” for unit tests is to only write a one assertion in each test. I intend to question this advice by showing that multiple assertions per test are both necessary and beneficial.
John Rauser presents the architectural and technological evolution of Amazon retail websites starting with 1994 and ending with adopting Amazon Web Services.
Michael Stal discusses system architecture quality, how to avoid architectural erosion, how to deal with refactoring, and design principles for architecture evolution.
Every developer has had to integrate with another system, API or component. Tis article provides strategies to handle the change and for he separating system boundaries.
4 comments
Watch Thread Reply