Wirfs-Brock Associates' mission is to amplify the effectiveness of business and technical architects, developers, analysts, and software managers. We commonly apply our expertise to complex problems. You are likely to call on us when you are starting something new, big, or important, or have a pesky problem that can't be ignored. Wirfs-Brock Associates draws on experiences of having successfully developed enginnering and business systems for over 30 years.

The ExpertsRebecca Wirfs-Brock, founder and principal consultant of Wirfs-Brock Associates, is experienced in object design, domain modeling, architecture, agile development, and analysis techniques and practices. She wrote two books on Responsibility-Driven design and was IEEE Software magazine's design columnist. She values effective written and verbal communication, clean code, clear thinking, and crisp designs. Frequently she works with teams, both agile and more traditional, to sharpen their communication, specification and design skills. Rebecca Wirfs-Brock invented Responsibility-Driven Design (RDD) and spawned the "-driven" meme that is attached to many popular software development practices. If you've heard of test-driven, domain-driven, or behavior-driven design, you'll feel at home working with us. These techniques trace their "driven" roots and share common values with RDD.

We network with other world-class experts in the field to seek out innovative solutions.

A Typical Consulting Engagement isn't Typical
Wirfs-Brock Associates puts its capabilitieis and experience to work making the critial parts of your projects improve--at many different levels. A typical engagement might start by addressing an urgent need, perhaps sharpening a team's object design skills by training them in Responsibility-Driven Design or Agile Design Principals and Best Practices. Our, we might work closely with lead developers to review and improve their design. We often define short, focused engagements where we work on specific design and coding issues. It can stope there, but we often provide ongoing advice. Our consulting engagements can be brief or longer-term technology development partnerships, depending on your needs. We fluidly move between details and "big picture" thinking. We excel at helping teams tease out powerful design solutions which support planned variations. With our help, you will be energized to create, design, redesign, and communication good solutions to complex problems..

Project PartnersAs project partners, Wirfs-Brock Associates provides continuous support during all phases of development. We assist with training and mentoring people in object-oriented development skills and techniques, analysis, agile best practices, monitoring progress with management, and coordinating the successful completion of intensive software projects.

Object Design and Architecture AssistanceWe are skilled modelers and object-oriented designers with a passion for working with teams to create good soluriona. We can work with your team to develop modeling skills or tackle complex modeling problems. We can coach you on the effective use of informal modeling techniques like CRC cards or agile user stories as well as effective use of UML Were skilled at communicating designs and can advise you on whats the right level of design documentation for your project. We are experts at domain modeling and effective implementation. We're practical and focused on results.

ReviewsWe are skilled at digesting large amounts of information, wading through code, and making assessments and communicating findings. At the conclusion of any review we produce a written summary of our findings, recommendations, and observations which we present and discuss with your team

Design ReviewWe help teams assess design ideas for their impact and leverage. Iterative development means frequent iterations. A design review at a critical milestone can have a high return on investment. Well-designed increments form a firm foundation for successive iterations. At key stages in your project, we can review your design by:

Reviewing detailed object models and working code for styles of control, application architecture, clarity and distinctness of roles in the object model, appropriate distribution of object responsibilities, consistency in class hierarchies, and opportunities for re-use

Evaluate a domain model for appropriateness of abstractions, clarity, and fit for use

The result of a design review is a report outlining strengths of your design and suggesting areas for improvement. Where there is fuzziness in thinking, undue complexity, or over-optimistic naivetéwe help you sort things out.

Architecture ReviewArchitecture should support key quality goals such as reliability, maintainability, performance, testability, or usability. With complex systems, design involves making tradeoffs. Increasing performance in one area might increase maintenance costs. Making a system more usable can impact performance. Increasing performance can compromise design integrity. We can help you analyze and review your system architecture and make sure that critical risks have been identified, and that impact critical architecture qualities have been appropriately addressed by your design. We can assess your system for:

Modularity - How well it can be apportioned to team members for parallel development?

Conceptual clarity and sufficiency - Does it describe the problem space clearly?

Flexibility - How effectively does your architecture support planned variations?

Framework Development and ReviewFrameworks provide useful functionality that is intended to be reused in multiple applications. The best way to test whether a framework is useful is to put it to use. Build it to solve a real problem, not a hypothetical need. We can help you develop and deliver quality frameworks. We can also assess a framework under development for fit and effectiveness. We can evaluate framework design and implementation for:

Clarity of key abstractions

Flexibility in different contexts

Ease-of-use

Extensibility

Support for tools

Use Case Modeling and ReviewA use case model describes how users in specific roles interact with the software to accomplish specific tasks. One of the strengths of use cases is that they capture usage requirements for a system. One of the perplexing challenges with use cases is that there can be a lot of variation in how they are written and confusion about what to include and at what level of detail. Although many teams use a standard use case template, they struggle over heavy-handed templates and yearn to develop more consistent writing styles. We offer personalized advice on how to effectively write use cases that will work for your organization. We can also help your analysts become better writers and communicators. We can quickly review use cases and suggest improvements, or point out inconsistencies. We dan also help you integrate use cases with your agile development practices by helping you adopt "lighter weight" use cases that can be used in conjunction with agile user stories and release planning.

Mentoring ServicesA mentor is experienced in technology and its practical application, and is extremely capable of developing such skills in others. You can ask a mentor anythin - no question is too naive. Mentors go beyond the boundaries of classroom teaching. A good mentor is a patient listener, an eager explainer, a thoughtful critic. A mentor leads by example while helping you learn to do things for yourself. A mentor is your guide, someone who works with you to achieve your full potential.

We provide mentoring services for individuals or small teams at all levels of experience-from beginner through framework developer and architect, for all phases of development. We specialize in object design and modeling, requirements writing, architecture, and object programming. We also can mentor teams on agile development best practices. A mentor can be an integral part of your team, or periodically work with you to tune your skills.

Process and Project SupportEvery software project has unique requirements and constraints. It is hard to follow a single development recipe. Successful development depends on:

Defining a development approach appropriate for the project

Defining a project scope, based on the investment, the team's skills, and the project schedule

Assessing skills and appropriately staffing the development team

A clear statement of the project's values and goals, and a set of guidelines to support them

A clear understanding of the project development context, including tools, frameworks, and system architecture

A clear understanding of the project risks and plans for mitigating them

A clear understanding of the development process

We can work with you to characterize your current development situation and to produce a blueprint for change.

You may want to be more agile - if so we can advise you on agile practices and suggest changes that will enable you to deliver value in planned increments.

Perhaps you need more consistency in your development processes. As part of methodology development we can produce style guidelines, define appropriate object technology deliverables for project milestones, develop project milestone review questions, identify project roles and team composition, and help you structure ongoing education and mentoring programs. Our goal is to enable you to successfully incorporate object technology and software development best practices into your unique environment. We don't embrace a one-size-fits-all approach. We will develop plans and guidelines based on your unique needs.

For inquiries regarding our consulting services please contact us at consulting@wirfs-brock.com or contact Rebecca Wirfs-Brock by phone at 1-503-625-9529.