Showing posts with label basics. Show all posts
Showing posts with label basics. Show all posts

Monday, 9 January 2012

Some Extreme Programming

Essentials

Software development fails to deliver, and fails to deliver value. This failure has huge economic and human impact. We need to find a new way to develop software.

Kent Beck, Extreme Programming Explained

Extreme Programming (XP) is a , , influential not only as a highly successful process (for smaller projects) but for the innovative practices (tools and techniques) described and the philosophy espoused.


XP values

For small projects, Agile, extreme programming and high-level programming languages are key practices because coding is the dominant activity for small applications.

Capers Jones, Software Engineering Best Practices


XP believes in

  • rapid feedback,
  • assuming simplicity,
  • incremental change,
  • embracing change and
  • quality work.

The exact limits of XP aren't clear yet. But there are some absolute showstoppers that prevent XP from working — big teams, distrustful customers, technology that doesn't support graceful change.

Kent Beck, Extreme Programming Explained

XP practices


We can drive ourselves crazy with expectation. But by preparing for every eventuality we can think of, we leave ourselves vulnerable to the eventualities we can't imagine.

Kent Beck, Extreme Programming Explained


XP separates traditional project management into

XP is a lightweight, efficient, low risk, flexible, predictable, scientific, and fun way to develop software.

Kent Beck, Extreme Programming Explained

Selected

Seed
Read
Feed

Thursday, 22 December 2011

Some Testing

Essentials

Optimism is an occupational hazard of programming. Feedback is the treatment.

Kent Beck

TDD seemed so revolutionary when it test infected Jakarta (and most of the rest of Apache). This test automation proved a notable factor in the later success of Tomcat, Struts, Ant, Maven, Commons (and all the rest).


Tests bridge the gap between the language of the customer and the languages of software. encourages alignment by starting with the customer then working inwards towards code.



Fine-grain unit tests execute fast, exercising a unit in isolation. Loosely coupled, cohesive designs are easier to unit test, so unit testing rewards good object-scale design.


Coarse-grain tests, exercising integrated components execute much more slowly, even with appropriate techniques (for example, switching to an in-memory store). Component-scale integration tests encourage cleaner, more reusable API designs.


The outermost layer exercises assembled applications. Fidelity to customer configuration is essential, and often means filling heavyweight stores with data. Set up and tear down costs are almost always high for enterprise applications.


Reasonable coverage using slow running integration and application layer tests costs. Avoid disrupting development flow: separate integration and application suites, and run them outside this flow. Consider triggering after each . To avoid maintenance issues, integration test selectively, invest in good fixtures and use the language of the customer.


A wide variety of open source tools continue to emerge, with sweet spots spanning the space. So spike.

Tools like and Fitness use the language of the customer, a fine match for outer (application and integration) layers. Mocking frameworks efficiently create test doubles to isolate the unit from its environment, and to efficiently verify behaviour (but not at the same time as state).

Efficient tools for special topics abound, for example web applications, load testing, performance testing, Swing, data access, JavaScript and so on...

Selected

Seed
Read
Feed

Friday, 16 December 2011

Some Evolutionary Design

Essentials

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

A Principle, The Agile Manifesto


Good design — perhaps a loosely coupled, appropriate blend of expressive, cohesive components — speaks for itself.


When XP arrived, democratising designempowering the developer crowd — seemed radical. To some it still does.


Agile design bubbles up, just-in-time. Complementary practices, tools and techniques facilitate design evolution and mitigate risks.

Selected

Seed
Read
Feed

Tuesday, 13 December 2011

Some Emergent Architecture

Essentials

Architecture is about the important stuff. Whatever that is.

Ralph Johnson

Just-in-time approaches to design fit well into agile development.


Evolutionary design reduces waste from over-engineering and design stock-piling; at the cost of some future reworking — a traditional focus of software architects.


Just-in-time approaches to architecture blend harmoniously with agile.


Let architecture emerge incrementally with no big upfront process.
Pay off pressing technical design debts before they become critical.

Architecture is the decisions that you wish you could get right early in a project.

Ralph Johnson


Selected

Seed
Read
Feed

Some Story Points

Essentials

velocity is a useful long-term predictor but is not a useful short-term predictor

Mike Cohn


Story points are an artificial, relative unit of measure for development effort, often combined with to .


Story points are coarse and atomic, arising from intuitive inductive judgement. Trade accuracy for speed, at the possible cost of future rework.

may use tools — such as planning poker — to reach collective valuations.


Estimates for
epics — supersized stories not yet decomposed — are almost always inaccurate.


So avoid unfounded perceptions of precision by limiting point values to a sequence — often inspired by Fibonacci.

Selected

Seed
Read
Feed

Some Continuous Delivery

Essentials

Release Early, Release Often

Eric Steven Raymond

Agile development finishes features to a regular cadence, a rhythmic flow of potentially releasable versions.


The DevOps movement seeks a stronger but more dynamic relationship between upstream teams and downstream consumers in operations.


Continuous delivery engineers a pipeline for the last mile, extending from integration through proof to delivery.


move from delivering services using projects to delivering them as products

Jez Humble


Selected

Seed
Read
Feed

Some Open Design

Essentials

Open source is chaotic. With its special magic comes a different reality.

James Duncan Davidson




Issuing open source an license is not enough. The benefits ascribed arise from opening the development process to a broad community.


Open design extends domain driven, consensual, emergent design beyond the agile team to engage a wider ecosystem.


Community building is non-trivial.
Sustainable communication and cooperation needs space to build and maintain relationships.


Walking the fine balance between technical leadership and openness to crowdsourced design ideas is an art.



Selected

Seed
Read
Feed

Some Planning Poker

Essentials

The estimates are a useful by-product, if your organisation values such things, but actually the most important benefit you get from planning poker is the conversation.

Matt Wynne


Playing planning poker exploits physicality, and team collaboration to improve agile estimates.

And it's a fun way to get the work done.


Buy, make or take a set of cards.

Numbered each with story points, Fibonacci sequenced or not.


Each player is dealt cards with every number for each hand.

To play a hand, all reveal a card with their private estimate then discuss
outliers.


Until consensus - or timebox - repeat.

Selected

Seed
Read
Feed

Some Kanban

Essentials

All kanban systems are designed to limit work-in-progress, because the more work-in-progress, the slower the flow.

Leading Lean Software Development



Kanban exploits physicality and pull scheduling to improve flow, and so throughput.


Downstream consumer demand pulls through the stages of a processing pipeline.


Progress may be visualised through a grid, visible to all players, showing the work in progress.

To improve flow, limit work in progress by focussing on bottlenecks. Eliminate waste.


A good solution for complicated processes, and a useful tool for complex problems.

Selected

Seed
Read
Feed

Saturday, 10 December 2011

Some Velocity

Responding to change over following a plan

The Agile Manifesto


Software development is , are not an interchangeable commodity and scale .
Domains with these flavours favour
techniques, such as .


This technique extrapolates estimates from historic team velocitystory points done per unit .

Selected

Read
Feed

Some Scrum

Essentials

Scrum is an , iterative and incremental framework for teams developing complex products, that is simple to describe but hard to master.


A scrum team has one product owner, one scrum master and 6±3 cross-functional self-organising developers.

Each sprint begins with one planning ceremony and ends with one review and one . Every day begins with one daily scrum. These events encourage inspection and adaptation.


Product and sprint backlogs are recorded. The orthodox school insists on burndown charts that are optional in the reformed school.
Rules relate these roles, events and artifacts into a prescriptive but extensible framework.


Of course, this description captures the mechanics but not the spirit.

Selected

Seed
Read
Feed

Search This Blog