evolution of architecture in agile projects

19
Evolution of Architecture (I obviously mean „in agile projects”) Paweł Lipi ński

Upload: pragmatists

Post on 18-Dec-2014

1.670 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Evolution of architecture in agile projects

Evolution of Architecture(I obviously mean „in agile projects”)

Paweł Lipiński

Page 2: Evolution of architecture in agile projects

pawel@agileee:/etc$whoami

• based in Warsaw / Poland

• then >10 years in Java

‣ SCJP, SCWCD, SCBCD, SCEA

• i did: development, consulting, trainings, audits, architecture

• software and system architect for the last 4 years

• worked with: cowboy, quasi-RUP, FDD, Scrum (CSP), XP

• currently:

‣ developer & owner @ Pragmatists, doing a merge of Scrum&XP

• professional interests: (A)OO, agile, software quality assurance, languages

Page 3: Evolution of architecture in agile projects

What’s this gonna be about

• baseline - what’s architecture in general and how do I see it in agile projects

• some principles of agile architecture what I think is important what helps what not to do

• how we try to implement it

Page 4: Evolution of architecture in agile projects

Welcome changing requirements, even late in development. Agile processes harness change for

the customer's competitive advantage.

The best architectures, requirements, and designs emerge from self-organising teams.

agile manifesto, principles #2 & #11

Page 5: Evolution of architecture in agile projects

Architecture

„Architecture” is a term that lots of people try to define, with little agreement. There are two common elements: One is the highest-level breakdown of a system into its parts; the other, decisions that are hard to change.

Martin Fowler, PoEAA

From the perspective of change, the role of architecture in agile development becomes quite clear: a good architecture is responsive and will support agility; a poor architecture will resist it and reduce it.

Kevlin Henney, The role of architecture in agile development

Page 6: Evolution of architecture in agile projects

so how should the architecture be?

should encourage change - so it must be extensible and modifiable

should promote quality - care for / ensure testability, readability, feeling of safety

promote creating value - make adding functionality simple, enable regular demos / reviews of new features

enable research and verification - developers should always be able to check different approaches, verify their ideas

be self-documenting - architecture lies in the code, the more readable it is at a high level, the less one needs to describe (often just the package names are enough to give high level description of architecture)

Page 7: Evolution of architecture in agile projects

(some) principles of Agile Architecture

influenced by Dean Leffingwell, scalingsoftwareagility.wordpress.com

Page 8: Evolution of architecture in agile projects

a team which codes the system, designs the system

conscious decisions need data - which appears / emerges during development

decisions should be made by the team - it increases responsibility and engagement / commitment

making decisions by several people increases probability of making better ones

for the architecture to evolve, the architect (as a role) must be aware of costs and consequences of changes - and these are known to the team only

Page 9: Evolution of architecture in agile projects

choose the simplest architecture that can possibly work

if we suppose that architecture can evolve together with the development of the system, we can also suppose that it’s enough that it supports only what’s necessary NOW and what we’re absolutely sure is required (vs. YAGNI)

the simpler the architecture, the easier it is to control and grasp by the team

the bigger the team, the more true it is

Page 10: Evolution of architecture in agile projects

if unsure, check it with code

evolution of architecture, design, code means constant refactoring, permanent trials and tests leading to the right solution

sometimes you need to check several things up to empirically verify which one is better

that’s the best way to gain knowledge and architectural experience

Page 11: Evolution of architecture in agile projects

the one to build is the one to test

performance and stability tests verify correctness of architecture (eligibility in respect to nonfunctional requirements)

in order to find these kinds of issues, tests must be performed often (CI)

tests can lead architecture similarly as they do with design

Page 12: Evolution of architecture in agile projects

if you know it, don’t pretend you don’t

some things can be safely assumed / decided on very early, so that big changes are not needed later

some things lie in experience and there’s not much sense in verifying them

sometimes the last responsible moment is just the very beginning of a project

if a decision is to be made, and we have complete data do make it, there’s no sense to pretend we don’t know what to do

Page 13: Evolution of architecture in agile projects

architecture is a collaborative work

sometimes it just means a work done commonly within the development team

for big systems, with big/many teams it’s a subset of people

team members can change - it’s good to have developers there as well - they’re the ones that need to commit!

Nokia Test - it’s not agile if any part of a project is done by a single person

Page 14: Evolution of architecture in agile projects

how’s that done in practice?

initial conceptevaluation

and changes

software development

systems architect architecture team:architect + developers

development teams

the concept is just a vision, not a BAUF

Page 15: Evolution of architecture in agile projects

Architecture as a part of each iteration

Analysis Architecture Design Coding Testing Integration

Page 16: Evolution of architecture in agile projects

Inspect & AdaptPragmatistsPriority: _____Release: _____

Notes:

Estimate:Number:

13As a Manager I want to

see statistics of progressof my projects

A statistic should contain:- project name and description- budget in € and %-tage of overall budget- progress as %-tage

2 15

8

architecture is just one aspect of a project, and just like any other is governed by the same forces and principles

iterativeness, communication, feedback, balance between decisions and risk enhance reactiveness to change

Page 17: Evolution of architecture in agile projects

Architecture is not a document or some prescriptions, but an effect of a long-lasting process, which starts with initial concept, and then, during system’s development reacts to new-coming data and adapts to them.

It’s a message about current system state, a shared team’s knowledge being under constant evolution.

Architecture as such is a waste. It’s of no value to a client, but is an element of lowering costs of creating the actual value.

Page 18: Evolution of architecture in agile projects

One of the more insidious and persistent myths of agile development is that up-front architecture and design are bad; that you should never spend time up front making architectural decisions. That instead you should evolve your architecture and design from nothing, one test-case at a time.

Pardon me, but that’s Horse Shit.

(...)

Don’t feel that TDD is the only way to design. On the other hand, don’t let yourself get too vested in your designs. Allow TDD to change your plans if it leads you in a different direction.

Robert C. Martin, ObjectMentor blog, „The Scatalogy of Agile Architecture”, 25.04.2009