Sunday, December 22, 2013

Measuring Software Architecture

I found interesting approach on the subject being developed by Structure 101 team. They introduced Excessive Structural Complexity, XS in short.

They pointed that an architecture may be seen in two dimensions: Tangle which is structural complexity on design level and Fat which is "too much code in one place". More precisely:
Tangle
it's set of items being in a cyclic dependency; tangle is counted on packages level; for each set of tangled items a Minimum Feedback Set (MFS) is calculated which is a minimum set of dependencies that would need to be removed in order make the graph clean
Fat
for methods it's Cyclomatic Complexity, but for clases and packages it's a number of dependencies between them
XS is an excessive ie. unnecessary complexity, so some thresholds must be given. Indeed, you are able to define thresholds for Tangle, and also for Fat on each method, class, leaf package, package (design) levels. You may also trust the defaults. Those come from Structure 101 team experience.

After normalization, XS gives one single number expressing an excessive complexity of a piece of code. Depends on code level, a XS might be Fat mean, Tangle mean or sum of these two.

It is very interesting because it gives fancy measure for each architectural level. It works well on: methods, classes, packages, layers and more abstract components levels.

Intersecting XS and number of commits to a repo, we might more accurately say what is worth to be refactored and what is not. (Idea of this intersection comes from Michael Feathers, but, as far I remember he use the Cyclomatic Complexity instead of XS)

For more information read the whitepaper or try out the tool.

Thursday, December 19, 2013

Frame-of-our-work

Working with a software and repeatable tasks, teams walk form a hard-coded solution to a generic framework and back with confusion. Let's search for the third way.

Table below presents some attributes of those two types of approaches:

  adding a new code maintaining a design redesigning as time goes by...
comment How much time is needed to add new functionality which respects a framework architectural boundaries? Any piece of code must be maintained from now to the end Sometimes new functionality is out of a framework architectural boundaries. So that one need to be redesigned and refactored What will be happening with the code in the future?
hard-coded solution offhand n/a there's no a design n/a there's no a design maintaining becomes really hard
generic framework easy if one knows how a framework works needs some effort might be hard and expensive two scenarios might happen: a framework becomes more and more generic till someone decides to kill the project or a framework becomes more and more coupled with business-specific code and then it goes toward a hard-coded solution

Frame-of-our-work

If both of extremes are wrong what is the third possible way? This is: don't build THE FRAMEWORK. Build THE FRAME-OF-OUR-WORK instead. Please, pronounce these two words: framework and frame-of-our-work. I am serious. So now:
  • What a responsibility do you you put on framework and frame-of-our-work?
  • What is possible to do with framework and frame-of-our-work?
  • What is impossible to do with framework and frame-of-our-work?
  • What would you give up changing a focus from framework to the frame-of-our-work or opposite?

You know, naming is important. When you label a project you give a team the direction of work and it determines what kind of work will be done or undone. Focusing a team on building a framework you are at lots of cognitive biases. A framework word is so imprecise that you may do more work than you intended to. Besides we do really like to build frameworks - check Source Forge or Google Code :).

Frame-of-our-work focus you on what are we really doing now? You need to inspect tasks a team do, before you start building a frame-of-our-work. This is nothing but Single Responsibility Principle.


I put a characteristic a frame-of-our-work into the table:

  adding a new code maintaining a design redesigning as time goes by...
comment How much time is needed to add new functionality which respects a framework architectural boundaries? Any piece of code must be maintained from now to the end Sometimes new functionality is out of a framework architectural boundaries. So that one need to be redesigned and refactored What will be happening with the code in the future?
hard-coded solution offhand n/a there's no a design n/a there's no a design maintaining becomes really hard
frame-of-our-work fast easy needs some work but it's acceptable it's sensitive on rapid changes of business processes because it's highly coupled with them
generic framework easy if one knows how a framework works needs some effort might be hard and expensive two scenarios might happen: a framework becomes more and more generic till someone decides to kill the project or a framework becomes more and more coupled with business-specific code and then it goes toward a hard-coded solution

Although a frame-of-our-work is not so sexy as a framework does, my observation is the cost of redesigning a frame-of-our-work is mostly lower than the cost of maintaining a generic design of a framework.

A simple example

You build desktop application and you search for a good way to implement the GUI logic. It's not trivial in Java:) Focusing on framework you might decide to implement a generic Presentation Model with fancy widgets binding. This is very flexible solution, but...what kind of flexibility do you really need in your project?

On the other side, building a frame-of-our-work you might decide to prepare very simple Presentation Model where you have one stupid POJO per one user screen.

Both are well known approaches, but the difference is how much work will be done.

At last...

What if you really discovered a generic domain and a generic framework would be very useful? What then? Fork the project, find a sponsor in your organization and build the framework. But never ever build a generic frameworks as a part of your regular workflow.

Wednesday, December 18, 2013

The Developer and a developer

As an employer I have a privilege to decide who I work with. I hire people and also have fired some of them. I've noticed there is kind of employee who does right anything one has touched. And opposite: some people screw up even simple stupid tasks.

I cannot say what exactly is the difference, mostly I feel one is the right one. But I have some observations:
The Developer a developer
is focused on the task is focused on options of the solution or on 'the best solution'
is patient wants to have things NOW
when failed feels a frustration or a sadness when failed feels a guiltiness
assumes oneself of being a cause of one's mistakes assumes others of being a causes of one's mistakes
argue with people blame people
has own daily routine does things impulsively
wants to know what was done right or wrong afraids to know what was done right or wrong, so avoids it
takes things happened as a result of work and constant feedback takes things personally
takes the responsibility for a relationship between involved stakeholders takes the responsibility for tasks one was told to accomplish


Taking a responsibility

I always hear from team leaders: I want a developer to take a responsibility for assigned things. I was unable to understand what was 'a responsibility'. Now I think I should ask them: What are those 'things' you want a developer to take responsibility for?

Personally I am sure team leaders didn't mean responsibility for a task. A task is nothing. Having a task completed is not always directly related to increasing a business value. It may be, but this is not the rule.

Having said responsibility team leaders had in minds responsibility for a relationship. That's right. The core of being responsible for something is responsibility for a relationship between all involved stakeholders. Doing tasks is part of it. But meeting stakeholder needs and increasing business value always comes with taking care of relationship.

About payment

I won't write anything new. But spending our own money I convinced myself that cheap is expensive if about employee's salary. We used to hire employees only by reason of their financial expectations. Mostly they were unskilled. We invested our time teaching them. When they picked up some knowledge they left the organization. So we decided to hire the best people we can afford according to our business goals.

Monday, December 16, 2013

What Exactly Are Patterns?

I found very interesting paper: Developing GUI Applications: Architectural patterns Revisited by Alexandros Karagkasidis

Implementing presentation layer is a really tricky. It is at least so complex as implementing a domain layer and not at all less important. There are lots of approaches to the subject, from the most comprehensive MVC, MVP, PAC and HMVC to the most detailed being described by Martin Fowler or vendor-specific approaches i.e. MVVM (which might be described in a Flowler's language as well).

According to Alexandros all these share same problem: work well for simple cases. My own understanding is the core is how a GUI functionality should be exactly mapped to structural elements of a pattern.


Let's take MVC pattern. One may use this pattern on widget, container or window/frame level. Decision is left to a developer. Besides, from my experience an approach is highly coupled with a functionality flow and refactoring is really hard. Let's say you decided to implement MVC on container level and then a CR requires some small interaction between a frame caption, button, and tab color. You may hardcode it or extract a smaller MVC triad. With this, a refactoring is quite time-consuming.

My point is: non-GoF patterns define a general idea but it is not enough to implement them in a complex case. My observation is teams sometimes needs lots of iterations to find their own way to implement an architectural pattern. It may takes months or even years.

Mentioned article doesn't contain any solution, but it is worth to be read to give you an insight into a complexity of GUI development.

Wednesday, December 11, 2013

Conversation Patterns: Upward Generalization Pattern

This article is part of my work on Conversation Patterns for Software Professionals

Finally I've done Upward Generalization Pattern. I am really glad because the one and also Downward Specification Pattern are the 80 from the Pareto Principle.

Mastering both of them is essential for a developer to looking for the business needs and then system features effectively.

Tuesday, December 10, 2013

Sold out!

I had the agreement with my wife: we will buy new bookcase, when we will change the flat. Because changing a flat takes some time, so that the old one is still with us. But I found it overpacked.

I was standing looking on that 300+ books I had being collected for seventeen years and realized that a few of them really influenced my life. I realized I have read lots of books (there were times I was reading ten hours a day) and I know a lot of things, but it's a few things I have truly mastered.

For example, it has taken almost three years since I read Getting Things Done to implement it in my daily routine. It has taken thirteen months to implement some personal finances habits. Learning takes time, it takes plenty of time. God, I wish I could fully express what the difference between knowledge and skills means to me!

I packed all that books into bags and went to sell them. They picked out bestsellers and gave me 500PLN, its about 120EUR. 500PLN for seventeen years of collecting the books.

I feel strange now. I am terrified from one side and freed from the other one. Having books sold I only wish I met more friends instead of reading all that stuff.

What next?


Update: and I think I felt a shadow of the News is bad for you

Monday, December 9, 2013

There Is No The One Way in Software Architecture

At last they publish the presentation I did at Confitura Conference. It's in Polish, sorry.

This presentation contains my thoughts on software architecture. I'm talking about:
  • importance of a technical context
  • importance of a business context
  • core domains which may belongs to the both technical and business areas
  • few points being my own-made steps to verify vision of new architecture
I wish they published my 33rd Degree presentation, where I was talking about looking the Holly Grail and all that *Driven madness.

Conversation Patterns: What is "a need"?

This article is part of my work on Conversation Patterns for Software Professionals

We work with stakeholders needs hidden by wanted features, we try to fulfill our needs hidden by wanted refactorings :) I've already posted two entries in the subject. These are: A User Story Template Revisited and Don't Confuse a Need with a Feature.

But what is actually "a need"? I clarified this term in the Need Structure article on the Conversation Patterns for Software Professionals.

Monday, December 2, 2013

Conversation Patterns: Questions for Setting Priorities

This article is part of my work on Conversation Patterns for Software Professionals

Before we we'll talk about questions for setting priorities, we need to take a look at this issue from a stakeholder point of view. So, you are Stakeholder and I am Developer. Context is you want me to to deliver hot dogs to your team :) Here is our conversation:


You: Listen, we are waiting for hotdogs for four hours and we are starving. So, hurry up, pleeeease...

Me: Ok, ok! We are doing our best. When do you want them delivered?

You: When!? Four hours ago!

Me: I have a solution for you. Let's talk about your priorities. What is the most important for you: bun, sausage, or ketchup?

You: What? They are all equally important!

Me: It's impossible. Choosing priorities allows you to have your wants at least partially done. It is for your own good to prioritize your requirements. Besides, there is no two things in the world being equally important. So, again: bun, sausage, or ketchup?

You: But they ARE ALL important for us !^%@!#&!

Maybe the dialogue above sounds funny and you discovered a solution during a first reading. But it presents the structure of a typical conversation between a stakeholder and a developer.

The main issue is two points view. For most stakeholders their requirements are atomic. No matter how large they are: one LOC change or four-week long teamwork. For a stakeholder requirement is mostly atomic by design.

What Is The Need?

To set priorities the stakeholder need must be recognized first and this may be one of: an expected benefit or a problem to be solved.


To be clear, a human being is a really complicated object and the only things we have are models of its behaviour. All models are simplifications, but the may by useful or not. My model assumes that every requirement (functional, architectural or so on) of a stakeholder is driven by a need (an expected benefit or a problem to be solved or both). This model is extremely useful, so that I recommend it.

Questions for Discovering the Need (in the Priorities Context)

A stakeholder is mostly focused on the thing he wants, so it is good for your conversation to help him/her to name the need.

We'll use the Drilling Question Pattern. We'll ask a question with a presupposition there is a need back to the requirement. Because there are two types of a need (an expected benefit or a problem to be solved) you may ask two questions. One for presupposing an expected benefit and next one for presupposing a problem to be solved.

A structures for these questions are:
  • If you would to start [a benefit presupposed] now, what it would be?
  • If [a problem presupposed], which one you would give up first?

As you can see, assuming a benefit we asking for "achieving", but assuming a problem we asking for "avoiding". Some explanation of it you may find in article Don't Confuse a Need with a Feature.

You probably wondering: "Ok, but what kind of an expected benefit or a problem to be solved I should presuppose in my case"? Obviously it depends :) I'll give you a tip how to start.

There are two typical needs when you're asking for setting priorities in the business context:
  • One wants to use a system feature - that is an expected benefit
  • One is under pressure of time or money - that is a problem to be solved
So, now our questions for setting priorities might be:
  • I you would to start using a feature now, what would you choose in the first place?
  • Assuming you're lacking of money or time, which one of these features you would give up first?
I have mixed tenses intentionally, because benefits refers to the "future", but a pressure is being felt "now". So, if you are a native speaker, let me know how it sounds for you.

Let's Back to The Hot Dogs


You: Listen, we are waiting for hot dogs for four hours and we are starving. So, hurry up, pleeeease...

Me: We are doing our best. I want to ask you something. If it takes next two hours to deliver all hot dogs, would you mind to give up bun, sausage or ketchup?

You: !^%@!#&! We are taking buns, but NOW!

:) The dialogue above might happen, but it's trivial, huh? Let's take a look on the more realistic one:


1| You: Listen, we are waiting for hot dogs for four hours and we are starving. So, hurry up, pleeeease...

2| Me: We are doing our best. I want to ask you something. If it takes next two hours to deliver all hot dogs, would you mind to give up bun, sausage or ketchup?

3| You: Are you crazy! We want hot dogs!

4| Me: I see you are starving and I know we're late. I need more details to deliver hot dogs faster. May I ask you something?

5| You: Hit me.

6| Me: What it will happen when we don't deliver hot dogs on time?

7| You: I am afraid my boss will kill me.

8| Me: Listen, I'll give you two hot dogs off-hand for you boss. Would you mind to convince your team to wait? We will try to deliver hot dogs in two or three hours.

9| You: Hmmm...sounds interesting...

Again I tried to find a need (I assumed it is a problem to be solved = a hunger). This was line [2]. But my presupposition didn't meet your real need. So, I tried one more time in the line [6]. Your boss was your problem, not a hunger :). Starting from the 'boss problem' we build an acceptable solution.

That's all for now. Watch the blog for more Conversation Patterns.

Photo Credits: Bun, sausage, ketchup :)

Wednesday, November 27, 2013

Conversation Patterns: Don't Confuse a Need with a Feature

This article is part of my work on Conversation Patterns for Software Professionals

I have used an Inverted User Story presented in User Story Template Revisited during some workshops with teams and I want to add a tip.

How to recognize you discovered the right benefit or problem to be solved. Well, you can't. You should stay aware of a conversation flow and test a timeliness of stakeholder needs. So the core need driving a user story doesn't escape your notice. Try to implement the Heart beat design pattern in your mind :)

But you should distinguish between "need" and "feature". A Stakeholder often confuse these two. For example:

As a Logged user I want to generate salary report so that I will know who is a VIP

Without a wider context it's difficult to validate the story. But, "I will know who is a VIP" is probably a feature, not a need. It's because it points a system feature, but not a stakeholder benefit or problem to be solved.

I want to score under this is my supposition and I would fire up my Heart beat pattern asking a stakeholder about a need details.

In general you may use following heuristics to recognise stakeholder need:
  • Benefits you discover, mostly fits to the template: I want to achieve...[benefit]
  • Problems to be solved you discover, mostly fits to the templates: I want to avoid....[problem to be solved]

Monday, November 25, 2013

The 'e' Letter Problem

I was inspired by Crista Lopes and her presentation to write this post. However, I found an analogy between her thoughts and my job, I recommend watching this presentation.

So, would you try to write a book or at least blog post without using words with the 'e' letter in the middle of a word? (In Polish it would be probably the 'a' letter). What implications it would cause? Would it be a challenge to express yourself giving the 'e' letter a miss?

Well, I think some of expectations about software development methodologies or techniques are similar to the 'e' letter restriction I mentioned:
  • How to estimate this requirement? But I only have three-words explanation and that's all?
  • How to start writing a code? But requirements will be precised soon ('soon' becomes 'now' when we will decide it is 'now')
  • How to refactor 10-years old code during a weekend?
  • How to deliver a software in 50% of time estimated with 50% of developers needed?
  • How to start *DD with a team not experienced enough?
  • How to accomplish more projects than our current capacity?
  • How to motivate people with a pay cutting at the same time?
  • How to boost our effectiveness without changing anything?
  • etc.

There is no magic in the world. All methodologies and techniques have its own preconditions. These must be guaranteed before start. But we do repeat the same mistake over and over again. We want to write a book without the 'e' letter.

Thursday, November 21, 2013

Software delivery organisational anti-patterns

It's good to have some electrical engineering background before reading this post ;P

I am confused every time I am asked what is the best way to manage requirements or which one is better: use cases or user stories, or how to ensure software quality by testing or how to evolve architecture properly, or does the *DD works, which design patterns are most wanted, what is better: agile or RUP. These are tricky questions, especially asked a consultant as I am.

Let's me try to explain what is a tricky part in these questions.

From IT point of view, the only goal of IT-Business collaboration is software delivery and nothing more. I like this term "software delivery" because it simply explains what we are responsible for. To achieve this goal we developed many tools which makes our work more effective. These tools address some difficulties we faced with when we collaborate with business people.


It is very important to notice these tools (show on the figure above) are not either-or dilemmas. You take whatever works and fits to a project context. Please read carefully at least:
  • Writing Effective Use Cases by Alistair Cockburn
  • Introducing BDD by Dan North
  • Decisions, decisions by Dan North
  • Specification By Example by Gojko Adzic
  • Domain Driven Design by Eric Evans
  • The Object Primer or agilemodeling.com by Scott Ambler

and you will see the tools are not competitors. Use stories are not compete with use cases, TDD is not competes with test-last approach, Scrum is not competes with free-style processes, DDD is not competes with simple anemic model, testing is not competes with test-free approach (really).

There is no "better", there is no "the best". Every single tools covers some aspect of IT-Business collaboration on software delivery. And everyone causes some benefits and consequences. But, you are responsible to choose a tool according to the project context. So yes, you should familiarize yourself with all of them.

The Source of All Evil

Problems start when one want to build a business around software delivery.
To scale the business one have to scale software delivery process to be more efficient.
So, one takes some of the tools and tries to compose The Process, for example: Analysis -> Architecting -> Implementing -> Testing -> Maintaining. So, tools becomes The Process steps and one builds teams around this steps.

You may say: ok it's old-school waterfall process. But, even organisations declaring agile approach have at least Analysis and Testing Departments. The rule is: the larger organisation is the more presented solution is applied. Where is a trick?

Software delivery is atomic. The only responsibility is to deliver software that is satisfying business needs and that's all. But scaling a software delivery we split this atomic thing into steps in a sequence.
We assume we may also split the Responsibility into small responsibilities of every single step. Moreover, we assume that Responsibility of whole software delivery is the superposition of the small responsibilities. In general it is not true.

You know, organisations where software is developed by programmers and tested by testers I may observe a lot of problems with a code quality and tension between Software Development Software Quality Departaments. Why? Because software developers are focused on their own responsibility and testers are focused on their own one.

Software Developers assume that testers will find all bugs and they are less motivated to test their own code. As a result tester have more and more work with bugs. And this a vicious circle.

One more example. Organisations where analysis is done by analysts (God, I'm trembling ever time I hear "Project Management Center") and development is done by developers, mostly have problems with requirements quality. It is happen that people don't know how to implement a requirement.

I think that problems listed above were caused by splitting what is unsplittable by the definition. Software delivery is unsplittable, it is atomic. We may use all tools to deliver better, faster or simpler. But we cannot split that tools into steps in a sequence. It doesn't work in that way. Once again: problems were not caused by the people or lack of competences. Problems were caused by the organisational anti-pattern.

Decoupled teams

Better idea is using tools around software delivery without splitting them.
Do you see the difference? Regardless of tools used the responsibility stays constant.
Ok, that was a metaphor but what about real world solution.
Solution is many stable Development Teams. A Team is responsible for delivering a complete working product. Moreover, there is no any dependencies between teams. A team is atomic.

Yes, I know there is more question than answers. How large a product should be? How to cooperate with other teams? How to build and develop a team? And so on, and so on.

The truth is we are in alpha-phase if about scaling agile teams on large projects and organisations. Some inspiration you may find in Disciplined Agile Delivery by Scott Ambler. Absolutely great case study is Scaling Agile @ Spotify. I believe the answer is out there and it will come soon.

Friday, November 15, 2013

Maturity is the Key

Do you know why: architecture, leadership, agility, effectiveness are so widely discussed? Because nobody know what they exactly are:) Or precisely: these are as complex as these mean different for different people and every point of view gives us some useful knowledge.

We coach development teams and looking in the past I may observe some interesting fenomenas. Let' see (important: I'm writing about Poland):
8 years agoNowadays
  • Some heard about XP
  • A leader aka PM was non-technical quy
  • Some heard about GoF Patterns
  • There was no terms "clean code", "implementation patterns" well known
  • Some have read "Code Complete"
  • When we talked about programmer soft skills we were understood as weirdoes
  • Teams declare using Scrum or "our own adaptive agile framework"
  • Most leaders do have a technical background
  • "patterns" is one of most discussed word in many meanings
  • Software Craftsmanship movement encourage to searching for better ways to do what we do and to improveme the craft
  • Honestly, there is so many books about "patterns", "agile", "software craftsmanship", "good enough", "code readability" I cannot handle it
  • Soft skills are widely discussed, but narrowly applied :)

So, we see the craft is changing. Software developers are changing. Nowadays, trainees or couchees are more experienced and educated then eight years ago. Some problems from the past are not problems anymore. But, we are faced with some new challenges.

What I want to say? According to Manfred Spitzer learing takes time (esspecially if we talk about social and soft skills). It is trivial, but not understood enough. We want to get skills and knowledge RIGHT NOW!. But it is impossible. Learning starts with acting based on simple procedures and lead up to contextual knowledge and contextual skills.

The crux is learning takes more time than average project length. Sometimes one expects to learn, let' say, "patterns" in four-days training. One also wants to apply its correctly in the project which is coming soon. But during a four-days training one will get a seed and an individual is responsible for its growth.

So, conclusions:
  • Software Craftsmanship is a lifelong challenge
  • See your learning goals from the five, ten or more years perspective...
  • ...but be aware that every single line of code is a small step leading you to some learning goal? Do you like this goal?
  • It is impossible to apply "patterns" or whatever always correctly
  • Yes, you will smell the code from time to time.
  • Make the failure faster :)

Tuesday, November 12, 2013

Conversation Patterns for Software Professionals

This article is part of my work on Conversation Patterns for Software Professionals


Real understanding of our stakeholders needs comes with a conversation. So we want to develop and share the best ways to do it.

Some readers of my book (in polish) and clients as well found its content very usefull. They encourage me to translate it into English. I have thought about it for a year, but couldn't decided.

So, I sent a proposal to couple international publishers and I am waiting for feedbacks. Regardless of their decisions I'm to gonna translate the book as Conversation Patterns for Software Professionals in the form of website conversation-patterns.com (guess what my inspiration was? :))

Having the book written I noticed that conversating with domain experts, users or clients is still difficult for a software professional. It is not a piece of cake to have a good conversations. So, the conversation-patterns.com and some of posts from this blog are intended to challenge it. I've already written two entries on the subject:

I have also a vision of a community around Conversation Patterns. There is a lot technical stuff we know. But a real understanding of what have to be done comes with a conversations. So, my dream is finding ways to do it effectively.

That is early stuff so any feedback is welcomed.

Tuesday, October 29, 2013

A Thought on Design Patterns

We were told a design pattern is a solution of a problem in a given context.


The metaphor above focuses our thinking on a space of a given problem. But if we extended a view a little more, we would see there is one more thing: tools.


So, a design pattern is a solution of a problem in a given context with given tools usage. And tools are obviously programming languages we use. Observing programming languages evolution (as I remember a great piece of it was given here), we may arrive at the conclustion that design patterns try to solve lacks of programming languages.

From this point of view moving to a next programming language may cause a problem disappears.


So don't try to introduce patterns to solve the problem you faced with. Find a technology where the problem is gone. This is a way I understand the Polyglot Programming movement. I think it is the right direction.

Monday, October 21, 2013

Please, define your organisational values

Dear HR Director,

I decided to write this letter, because for over five years I have worked with software engineers on their effectiveness and seen how organisational values influence software developers work.

Probably you have defined a mission statement and values in your organisation. But did you ever noticed their correlation to a quality of the source code or development processes?

Developers too often take organisational values with a grain of salt. They tell me these are just only "posters" on the walls or on their screen savers. But for me - an outer observer - it definitely is obvious that a mission statement and organisational values do their job. And do it well.

So, what I have seen? Organisations where values statements looks like:
  • We put our customers first
  • Our success is customers satisfaction
  • A customer can't wait
  • We are professionals
  • We do everything for our customers
and that is all, that organisations mostly (I said: m o s t l y) have a lot of multitasking and technical debt inside. That two lead to the even more multitasking and more smelling code as a consequences.

To be precise: all values above are good. I would be proud to identify myself with one of them. But, the problem is the values are not defined clearly enough. Engineers, managers and non-technical stuff simply do not know what to do. They try to satisfy organisational values so much, so they do just only one thing possible to be done: they guess what to do.

Of course, every individual guesses on its own account. In addition clients and deadlines bring the pressure to the teams. And here a multitasking and lack of decision making start working on software quality.

So please, define your organisational values. Define at least:
  • What kind of behaviours are acceptable
  • What kind of behaviours are not acceptable
I emphasised "behaviour" word on purpose. You have to be precise. People do not understand "be professional" but they clearly understand "do a code review". And last but not least - do what you said.


Yours sincerely,
Michal

Friday, October 18, 2013

Conversation Patterns: A User Story Template Revisited

This article is part of my work on Conversation Patterns for Software Professionals

This is well known user story template:

As a [role]
I want [feature]
so that [benefit]

But I noticed that because of this template teams focus mostly on features. What is wrong with that? However, discovering the right features is the goal of user stories, but at the same time a benefit part is neglected.

Consider following (anti)stories:
  • As a User I want to login, so that I use a system
  • As a User I want to print report, so that I can do my job
  • As a User I want to click RMB, so that I choose wanted option from the context menu
These are examples of stories where a benefit part was not clarified enough. Again, what is a big deal?

In general a benefit is a need and another type of a need is a problem to be solved. So, a role wants a feature because one requires a benefit or problem solution. This is natural feature - business need relation.


A feature is a way to satisfy business need by the software functionality. Having need clearly defined a team and PO are able to discover set of features satisfying business need and choose the best one.

But using a given user story template we start a conversation from a feature without talking about a business need first.


Then we want to fill a template so it is possible to put some general benefit instead of, you know, the "real" one.

My solution is: use a slightly different user story template:


In order to [benefit/problem to be solved]
I want [feature]
Being a [role]



UPDATED@10/03/2014
Upon further study I decided to redesign the given template as follows:

In order to avoid [problem to be solved]/In order to achieve [expected benefit]
As a [role]
I want [feature]

So now we have two US templates for each of stakeholder's need favour.


This template helps to focus on business need first. When the one is clearly defined you may start discovering possible features to satisfy the need.

Conversation Patterns: A Buffer of Useless Answers

This article is part of my work on Conversation Patterns for Software Professionals


So you're talking with a stakeholder about new backlog items. Which of the following questions you are going to ask:
  1. Do you want to add new items to the backlog?
  2. What of new items you want to add to the backlog?
  3. What of new features you're going to use next week?

You must always consider stakeholder answers as a result of your questions. So the better question you ask the better answer is given to you.

Choosing the first question: Do you want to add new items to the backlog? you indirectly define possible answers. These are: yes or no. Answering that question is not an effort, so your stakeholder will do it automaticly, without thinking a lot. One will take an answer form a buffer :)

I imagine every human being has a special area in its mind where all answers comes from. Stakeholder is trying to optimize energy when one is querying for the answer, so an 'answer area' is divided into two subareas: surface area and deep area.

The surface area I called a buffer of useless answers. When you ask the question a stakeholder tries to find an answer in this buffer first (to optimize its energy, of course).

The problem is what a buffer contains. Well, rubbishes in most cases: parts of memories, parts of conversations, random informations. A buffer of useless answers is like an uninitialized variable in C - it may contain anything :).


So, to get quality answers you have to drill deeper under the buffer of useless answers. How to do it? Well, ask a question with a suggestion where or how to seek an answer.

Consider the second question example: What of new items you want to add to the backlog? There is an assumption in the question: I know you want to add some items. A stakeholder is not instructed to take an answer from the predefined set of answers. Finally, one will make an effort querying a deep answer area, not a buffer of useless answers.

You may decide to drill even deeper. The third question example is: What of new features you're going to use next week?. Oh, yeah! A stakeholder's brain is red hot now. One was instructed to imagine oneself of act of using a software in the future. One tries to place priority features among the existing ones. Then one verify a usability of whole new mental model and then is ready to answer the asked question.

What questions you might to drill deeper?

Thursday, September 26, 2013

"You may say I'm an extremer (...)"

I found this one years ago #nostalgic...


Imagine there’s no requirements.
It’s easy if you try
Just a bunch of coders,
reachin’ for the sky
Imagine all the people,
coding for today

Imagine there’s no schedules.
It isn’t hard to do
No silly project deadlines,
no one supervising you
Imagine all the people,
coding hand in hand

You may say I’m an extremer
but I’m not the only one
I hope someday you’ll join us
and make coding lots more fun.

Imagine oral documentation.
I wonder if you can
No need for UML diagrams.
Just words passed, man to man
Imagine just refactoring,
playing in the sand

You may say I’m an extremer
but I’m not the only one
I hope someday you’ll join us
and make coding lots more fun

Wednesday, September 25, 2013

Public activities calendar

I publish my public activities calendar because I want o meet you, share our ideas and talk about our professional experiences.

You will find the calendar on this blog on the left or you may subscribe it via xml, ical or html.

So let's stay in touch, I hope to see you soon :)

Tuesday, September 24, 2013

The most valuable lesson learned from GTD

Whole GTD framework is worth to familiarize yourself with. But the one thing was a rocket jump for me - tasks chunking.

David Allen advice is tasks should be actionable. It means they should be ready to do now. You may examine your tasks by asking: Is it a physical action? where physical means you may express it in the language of your senses and you body. For example 'Process input data' is not physical action. Why? Try to show a process activity by your hands:). Impossible.

In opposite to tasks above: 'Talk to Peter about object model for input data', 'Draw down sketch of classes', 'Write down steps of the data processing algorithm', 'Write initial unit tests for data processing service',... are more 'physical'. So if you are aware of the context these tasks are ready to do as they are now. And this is what we call task chunking.


When I start working on a project I write down some general epics, stories, goals. But I never start working on them unless I write down at least one actionable task. In fact one actionable task is the minimum you need. Ok, I do mistakes and sometimes I take a task which is too general to accomplish it and then I always fail. The only rescue is tasks chunking.

I have also my own actionability cirterion I call it Copy-Paste Test:
'copy' a task and 'paste' it into different context; the less sense it make the more actionable it is. The reason is that specific and actionable task are strongly coupled with its context. So 'copying' them into different context make them incomprehensibled.

Consider: 'Implement the finding service' fits to every context so it is unactinable, but 'Implement service for finding Employee entity by department and salary' is stronger coupled with its context and it is more actionable.

About tools

Personally I use a kanban board on my fridge, at work we currently use LeanKit.com/. These two help me to keep clarity and limit work in progress. For tasks chunking I use todoist.com.

Monday, September 23, 2013

Quora.com - my new public service

I made a resolution to contribute to the Community more than I used to. I chose the quora.com to be my first step. Reading my blog or tweets you probably have some ideas what I am involved in. So, do not hesitate to ask detailed questions, if I know the answer I will let you know. You may follow your questions and my quora.com activity as well.

Thursday, September 12, 2013

Conversation Patterns: Polowania na czarownice i czarownik贸w

This article is part of my work on Conversation Patterns for Software Professionals


(...) uzmys艂awiamy sobie t臋 prost膮 prawd臋, 偶e za wszystkimi komunikatami, kt贸rym dotychczas pozwalali艣my brzmie膰 gro藕nie, stoj膮 jedynie ludzie o niezaspokojonych potrzebach, kt贸rzy prosz膮 nas, aby艣my co艣 zrobili dla poprawy ich samopoczucia, Marshall B. Rosenberg

A gdy ju偶 co艣 pierdyknie, to zaczyna si臋 poszukiwanie przyczyny niepowodzenia. Sk膮din膮d ta racjonalna idea opiera si臋 na uproszczonym za艂o偶eniu, 偶e gdzie艣 istnieje single point of failure, lub double. No, sko艅czona ilo艣膰 pojedynczych przyczyn.

Jednak dyscyplina system thinking wskazuje, 偶e niepowodzenie jest wypadkow膮 z艂o偶onych interakcji w "systemie". Ciekawe studium przypadku w tym kierunku mo偶esz znale藕膰 w Efekcie Lucyfera by Philip Zimbardo.

A wi臋c szukamy winnych...

...poniewa偶, czujemy potrzeb臋 roz艂adowania emocji, z kt贸rymi sobie nie radzimy. Kolejne szczeg贸艂owe obja艣nienie znajdziesz w Porozumieniu bez przemocy, sk膮d pochodzi pocz膮tkowy cytat.

...poniewa偶, to naj艂atwiejszy spos贸b do uzyskania poczucia, 偶e problem zosta艂 zrozumiany, i 偶e w przysz艂o艣ci b臋dzie mo偶na go unikn膮膰. Oczywi艣cie owo "poczucie", nie oznacza, 偶e sprawa rzeczywi艣cie zosta艂a rozwi膮zana. Oznacza to wy艂膮cznie tyle, 偶e skoro pola艂a si臋 krew, to wszyscy zestresowani zainteresowani odetchn臋li z ulg膮, 偶e oberwa艂 kto艣 trzeci i 偶e spraw臋 za艂atwiono.

...poniewa偶 nie umiemy sobie radzi膰 z "otwartymi" sprawami. Trudno zaj膮膰 si臋 czym艣 innym, gdy nurtuje Ci臋 pytanie, na kt贸re nie znasz odpowiedzi, test, kt贸ry nie przechodzi, czy //XXX, kt贸rego nie mo偶esz namierzy膰. Ta zasada jest podstaw膮 ka偶dej hmmm... metodologii efektywno艣ci m.in. 7 Habits of Highly Effective People, Getting Things Done, Personal Kanban, Awake the Giant Within, kt贸re daj膮 przepisy na przekszta艂canie "otwartych" spraw w motywuj膮ce mierzalne cele.

Psikus z otwartymi sprawami polega na tym, 偶e gdy czego艣 nie rozumiemy i w dodatku mamy do tego mocno emocjonalny stosunek, to rozpaczliwie szukamy zamkni臋cia otwartej sprawy, cho膰by owo zamkni臋cie by艂o najg艂upszym z mo偶liwych. W ten spos贸b zadowalamy si臋 prostymi odpowiedziami na trudne pytania i preferujemy tanie suplementy intelektualnej diety.

Co z tym fantem?
Poni偶ej podaj臋 kilka pomys艂贸w, jak przeciwdzia艂a膰 poszukiwaniu winnych. Nie s膮 to rozwi膮zania instant, ale kilka z pewno艣ci膮 si臋 przyda.
  • Omawiaj wtopy po weekendzie; b臋dzie nieco czasu na och艂oni臋cie
  • Omawiaj wy艂膮cznie fakty (ad rem). Fakty dotycz膮 tego, co do m贸zgu dostarcza nam jeden z pi臋ciu podstawowych zmys艂贸w, czyli to co mo偶na zobaczy膰, us艂ysze膰, pow膮cha膰 itd; sz贸sty zmys艂 a wi臋c wszelkiego rodzaju mind reading zostawiamy w spokoju
  • Jak ognia unikaj zda艅 zawieraj膮cych: jeste艣 (ad personem), zawsze, nigdy, ci膮gle, wci膮偶, 偶aden (kwantyfikatory)
  • Jak piekielnego ognia unikaj ocen - ten punkt jest dla wielu z nas nie do przej艣cia. Zdanie Zobaczy艂em, 偶e to spieprzyli艣cie nie jest stwierdzeniem faktu lecz ocen膮, bo czynno艣ci spieprzenia nie mo偶na zobaczy膰, ale mo偶na zobaczy膰, 偶e: w po艂owie iteracji na tablicy wisia艂o du偶o zada艅 z b艂臋dami, burn-up chart ma 20 schodk贸w, kto艣 zatwierdzi艂 kod z b艂臋dami itd.
  • Omawiaj fakty tylko z pierwszej r臋ki. Zabawa w g艂uchy telefon jest 艣mieszna w przedszkolu i to tylko wtedy, gdy traktuje si臋 j膮 jako zabaw臋; tymczasem doro艣li traktuj膮 g艂uchy telefon 艣miertelnie powa偶nie
  • Najpierw zbierz wszystkie punkty widzenia, a dopiero potem je omawiaj. Z szacunku dla tajemnicy ludzkiego umys艂u bezpiecznie jest za艂o偶y膰, 偶e nawet gdy kto艣 co艣 komu艣 zrobi艂, to ka偶da ze stron ma 艣wiadomo艣膰 tylko wycinka ca艂ej sytuacji. Najpierw zbierz wszystkie puzzle, a dopiero potem staraj si臋 zobaczy膰 obrazek
  • Rozwi膮偶 problem lokalnie, a potem standaryzuj
  • Trenuj Technik臋 pozytywnej intencji

Du偶o pisz臋 o faktach. M贸wimy o faktach, ale wszystko to w obr臋bie empatycznego porozumienia, po kt贸re odsy艂am do ksi膮偶ki Marshalla Rosenberga.

Monday, September 2, 2013

Niezadowolenie ma sens

Product Owner, kt贸ry "odpuszcza" w trakcie demo, dzia艂a przeciw zespo艂owi. O co chodzi?

Iteracja by艂a trudna. Wyskoczy艂o sporo bug贸w, zwi膮zanych z niezaplanowan膮 refaktoryzacj膮 dawno zapomnianego kawa艂ka systemu. Zesp贸艂 pracowa艂 na najwy偶szych obrotach, a schodki na burn-up chart zdawa艂y si臋 nie mie膰 ko艅ca. W ostatnim tygodniu wszyscy z ut臋sknieniem czekali na pi膮tek, a gdy ju偶 nadszed艂, od samego rana czu膰 by艂o podekscytowanie zbli偶aj膮cym si臋 demo.

Wysprz膮tany pok贸j, rozstawiony rzutnik, zesp贸艂 w 艣wi膮tecznym nastroju. Brakuje tylko czerwonych go藕dzik贸w dla zas艂u偶onych. Wszyscy z uwag膮 艣ledz膮 rozmow臋 PO z jednym z programist贸w, prezentuj膮cym implementacje poszczeg贸lnych historyjek. Scenariusz po scenariuszu id膮 jak z p艂atka i nagle..&^@%!@

W tym momencie w zgodzie z niekt贸rymi teoriami Wszech艣wiat si臋 rozga艂臋zia i mog膮 wydarzy膰 si臋 co najmniej dwa scenariusze.

Scenariusz A

Nast臋puje chwila niezr臋cznej ciszy, podczas kt贸rej PO patrzy na napi臋te twarze zespo艂u, na kt贸rych mi臋dzy wielkimi, jak u Puszka Okruszka oczami, powi臋ksza si臋 nabieg艂y 艂zami znak zapytania.

Kto艣 powiedzia艂, 偶e najwi臋ksze boje w historii ludzko艣ci wydarzaj膮 si臋 w zakamarkach ludzkiej duszy. Nie inaczej jest teraz. Po d艂ugiej jak wieczno艣膰 chwili, na twarzy PO pojawia si臋 mi臋kki u艣miech.
- Ok - rzuca ciep艂o - powiedzmy, 偶e jest zrobione. Doko艅czycie w mi臋dzyczasie ("mi臋dzyczas" - niepotwierdzony 偶adn膮 powa偶n膮 teori膮 bufor czasowy, w kt贸rym da si臋 wykona膰 wi臋cej pracy, ni偶 w ca艂ym projekcie 艂膮cznie).

Wszyscy oddychaj膮 z ulg膮. Zn贸w jest mi艂o. Po zako艅czonym demo ludzie w po艣piechu wymykaj膮 si臋 z biura. Ju偶 weekend. Mo偶na odsapn膮膰 i zaj膮膰 si臋 czym艣 innym ni偶 to natr臋tne, ko艂acz膮ce na skraju 艣wiadomo艣ci odczucie wewn臋trznego "fuj".

Niestety historia lubi si臋 powtarza膰, wi臋c i ta si臋 powt贸rzy艂a. Po trzeciej podobnej repecie, id膮c na demo ludzie zaczynaj膮 w艂膮cza膰 autopilota itd., itd., itd.


Scenariusz A'


Nast膮pi艂a pe艂na napi臋cia cisza. Cisza. Przeci膮gaj膮ca si臋 cisza. PO wzi膮艂 g艂臋boki oddech i:
- Przykro mi, ale to jest DONE. Nie zgodnie z tym, co ustalili艣my jako DONE.
- Ale przecie偶 jest to tylko kwestia kosmetyki. Par臋 godzin i b臋dzie gotowe. A ta druga historyjka jest gotowa, tylko jeszcze nie wdro偶ona. Projekt nam si臋 za d艂ugo buduje.
PO popatrzy艂 na rozm贸wc臋 wzrokiem Johna Wayne'a i powiedzia艂:
- Gdyby艣 mia艂 za t臋 prac臋 zap艂aci膰 z w艂asnych pieni臋dzy, to zap艂aci艂by艣?

Niemal w tej samej chwili, Piotrek wybieg艂 z sali trzasn膮wszy drzwiami, a w reszcie grupy, wybuch艂a gor膮ca dyskusja, od czasu do czasu ocieraj膮ca si臋 o k艂贸tnie.
- Nie - powt贸rzy艂 twardo PO - Nie jest DONE. Nie odbieram.
Na tym dyskusja si臋 zako艅czy艂a.

Gdy py艂 opad艂, zesp贸艂 zasiad艂 do retrospekcji. Mieli nad czym dyskutowa膰, wi臋c ledwo zmie艣cili si臋 w za艂o偶onym czasie. Ustalono, 偶e: Pawe艂 z Marcinem rozpoznaj膮 temat serwera CI i one-click building, koncept zadania zawsze b臋dzie analizowany zespo艂owo, blokery b臋d膮 omawiane na forum i w razie potrzeby zesp贸艂 decyduje si臋 na swarming, historyjki z najbli偶szego sprintu zostan膮 ponownie przeszacowane, refaktoring b臋dzie robiony zawsze parami.

Ludzie wychodzili z biura w znakomitym nastroju. PO ich cholernie wkurzy艂, ale znale藕li rozwi膮zanie. Zawsze znajduj膮. Wprowadzili do swojej pracy niezb臋dne modyfikacje. To si臋 ju偶 nie powt贸rzy. Nie ma prawa si臋 powt贸rzy膰. Po weekendzie zaczyna si臋 nowy sprint. Ka偶dy z programist贸w ju偶 widzi najbli偶sze demo i PO 艣piewaj膮cego peany na ich cze艣膰.


Wniosek

Czasem, nie chc膮c sprawia膰 komu艣 przykro艣ci, robimy mu krzywd臋.

Friday, August 30, 2013

Dekomponowanie zada艅

Umiej臋tno艣膰 dekomponowania zada艅 uwa偶am za kluczow膮, je艣li chodzi o zarz膮dzanie czasem. W r贸偶nych momentach prowadzenia szkolenia z tego tematu, stara艂em si臋 formu艂owa膰 mniej lub bardziej zjadliwe procedury do przeprowadzania owej dekompozycji. W ko艅cu mnie o艣wieci艂o i wpad艂em na t臋, jak s膮dz臋, najprostsz膮, eleganck膮 i skuteczn膮:)

Definiuj zadania maksymalnie czterogodzinne

Wiem, 偶e brzmi to jak magiczna formu艂ka na wszystkie problemy. Aczkolwiek to proste zdanie to tylko wierzcho艂ek czego艣 wi臋kszego. Zauwa偶y艂em, 偶e gdy wyodr臋bniaj膮c zadanie skupiamy si臋 na tym, aby zaj臋艂o cztery godziny, przebiegamy w my艣lach przez kilka procedur i kryteri贸w dekomponowania, kt贸re tak usilnie stara艂em si臋 wcze艣niej sformu艂owa膰.

Trik polega na tym, 偶e fiksuj膮c si臋 na owych czterech godzinach, musisz wykona膰 eksperyment my艣lowy i do艣膰 szczeg贸艂owo wyobrazi膰 sobie to, co ma by膰 efektem zadania i jak to wykonasz. Czyli w艂a艣nie to, czego nie robi膮 osoby maj膮ce k艂opot z dekomponowaniem, a w konsekwencji i z dotrzymywaniem szacowa艅.

Cztery godziny to do艣膰 kr贸tka perspektywa czasowa, kt贸r膮 w dodatku, jako homo sapiens, potrafisz do艣膰 dobrze percypowa膰 (@see Nie myj z臋b贸w, r贸b retrospekcje). 呕eby wi臋c to czterogodzinne zadanie wykona膰, musisz by膰 pewny, 偶e da si臋 je wykona膰 i formu艂ujesz je bardzo konkretnie (przechodzi Test Copy-Paste). I to jest druga zaniedbywana sprawa.

Cztery godziny to, rzecz jasna, warto艣膰 umowna. Chodzi o to, aby perspektywa czasowa, by艂a na tyle bliska, aby ze spokojem si臋 na niej skupi膰 i realnie o niej my艣le膰. Poeksperymentuj z godzin膮, dwoma, trzema - sprawd藕, co b臋dzie. Czy z wi臋kszymi liczbami te偶? Moim zdaniem - nie.

S膮dz臋, 偶e raczej nie jeste艣my w stanie wiarygodnie oszacowa膰 na np. 8 godzin. Wiarygodnie tzn. ze powtarzaln膮 trafno艣ci膮.No, mo偶e z wy艂膮czeniem zada艅 typu: przybij tysi膮c stempli na kopercie, napisz walidacj臋 not null dla pi臋膰dziesi臋ciu textfield贸w na stronie, gdzie obowi膮zuje proste mno偶enie.

Zach臋cam gor膮co do eksperymentowania i post臋powania wg w艂asnego uznania:)


UPDATE 30/08/13
Komentarz do posta u艣wiadomi艂 mi, 偶e powinienem jeszcze kilka s艂贸w doda膰:)

Moja teza nie brzmi "szacuj na max, 4h bo powy偶ej tego 藕le oszacujesz", lecz "je艣li wyodr臋bniasz zadanie z wystarczaj膮co kr贸tk膮 perspektyw膮 czasow膮, to zrobisz to konkretnie, gdy偶 wymusi to przemy艣lenie przedsi臋wzi臋cia i by膰 mo偶e utrzymasz szacowanie - lecz nie z powodu szacowania, a konkretno艣ci w艂a艣nie"

Tak jak napisa艂em, 4h przyj膮艂em arbitralnie. Co do trafienia w wi臋ksze oszacowanie, to r贸偶nie bywa (por. "Szacowanie oprogramowania", Steve McConnell). Jednak偶e zwr贸ci艂em uwag臋, 偶e gdy szacujemy, to zazwyczaj szacowania wygl膮daj膮 np. tak: 8, 8, 24, 16, 8, 12, 24.

Gdy po艂o偶y艂em przed sob膮 wiele takich szacowa艅, to zawa偶y艂em, 偶e niemal wszystkie to wielokrotno艣ci jakiej艣 bazowej liczby: cz臋sto 8 b膮d藕 6.

Wnioski by艂y dla mnie takie:
  • szacuj膮c operujemy jakimi艣 tam idealnymi interwa艂ami (osobodniami, efektywnymi dniami), za pomoc膮 kt贸rych pr贸bujemy odwzorowa膰 czasoch艂onno艣膰 zadania
  • raczej nie szacujemy czasu, lecz rozmiar zadania - jak du偶e ono jest

Gdyby chcie膰 podawa膰 rzeczywiste oszacowania, trzeba by zaprz臋gn膮膰 jaka艣 metod臋 analityczn膮 np. PERT.

Wg mnie sensowna metoda szacowania polega na retrospektywnej analizie zada艅. Najpierw musisz popracowa膰, zobaczy膰 z czym masz do czynienia, szacowa膰 na wyczucie. A potem zaprz臋gasz statystyk臋, analizujesz dane, wyodr臋bniasz klasy zada艅 i estymujesz przysz艂o艣膰 z za艂o偶onym prawdopodobie艅stwem.

Wtedy dopiero wychodzi, jak bardzo szacowanie wra偶liwe jest na zmiany kontekstu, 艣rodowiska. Innymi s艂owy, gdy nie mog臋 sobie zbudowa膰 jakiego艣 punktu odniesienia i wszystko absolutnie wszystko si臋 zmienia, to szacowanie jest tylko z艂udzeniem. Lubimy wierzy膰 w to z艂udzenie, bo to 艂atwiejsze, ni偶 przyznanie, 偶e jednak przysz艂o艣膰 nie b臋dzie wygl膮da膰 tak, jakby艣my chcieli.

Thursday, August 29, 2013

Niejednorodny zesp贸艂

Scrum recognizes no titles for Development Team members other than Developer, regardless of the work being performed by the person; there are no exceptions to this rule - napisali niegdy艣 m膮drzy ludzie i zesp贸艂 w tej postaci jest super. Jednak偶e robi膮c przegl膮d inwentarza, mo偶esz doj艣膰 do wniosku, 偶e stan rzeczy rzeczy w Twoim zespole oraz zasoby, kt贸rymi dysponujesz, odbiegaj膮 od tego docelowego obrazka. Co wtedy?

Co jest?

Mo偶e si臋 dla przyk艂adu okaza膰, 偶e "dosta艂e艣" pi臋ciu programist贸w, trzech tester贸w, analityka oraz Scrum Mastera z nadania, kt贸ry ostatnimi czasy po艣wi臋ca艂 si臋 wy艂膮cznie zarz膮dzaniu.

W takiej konstelacji mo偶esz si臋 spodziewa膰 nast臋puj膮cych objaw贸w:
  • Polaryzacja mi臋dzy testerami a programistami; nie pisz臋 "wrogo艣膰", lecz w艂a艣nie polaryzacja my-wy: wy zrobili艣cie b艂膮d, wy skopali艣cie testy, my co艣 zaimplementowali艣my, itp.
  • Programi艣ci maj膮 chroniczny op贸r przed testowaniem
  • Testerzy bior膮 znikomy udzia艂 w planowaniu
  • Analityk nie za bardzo mo偶e znale藕膰 swoje miejsce w zespole
  • Pojawia si臋 zastanawiaj膮co du偶o spad贸w z poprzednich sprint贸w

Mo偶e si臋 okaza膰, 偶e po przeprowadzeniu ma艂ego 艣ledztwa, ma miejsce nast臋puj膮cy zwi膮zek przyczyn i skutk贸w:


Jak mog艂oby by膰?

D艂ugoterminowym celem mog艂oby by膰 oczywi艣cie doprowadzenie do sytuacji, w kt贸rej ka偶dy jest wspomnianym "developerem", ale o tym na pocz膮tku lepiej nie m贸wi膰 g艂o艣no:)

Co pomi臋dzy?

S膮dz臋, 偶e w takiej sytuacji kluczowe jest, nie tyle m臋czy膰 ludzi, aby byli idealnym zespo艂em, co wydoby膰 tu i teraz to, co najlepsze. Bardzo dobrym pocz膮tkiem b臋dzie przeorganizowanie sposobu planowania. Ot贸偶:
  • Planujcie podgrupami dzielonymi wzgl臋dem tester贸w, np. tester+2*programista
  • Ka偶da grupa otrzymuje swoje US, kt贸re dzieli na zadania
  • Analityk chodzi i doradza :)
  • Wyodr臋bniajcie zadania: programistyczne, testerskie, analityczne
  • Po zako艅czeniu dekomponowania grupa przedstawia swoje US, a reszta zadaje pytania kontrolne Czy uwzgl臋dnili艣cie to, a to? i je艣li nie, to dodajemy kolejne zadania (uwaga celowo jest tu odwr贸cenie: grupa nie przedstawia swoich zada艅, lecz odpowiada na pytania kontrolne zespo艂u, gdy偶 w przeciwnym razie zam臋czycie si臋 i zanudzicie

Pytania retrospekcyjne po wprowadzeniu w/w zmiany (po jednej b膮d藕 dw贸ch iteracjach):
  • Jak oceniam wsp贸艂prac臋 mi臋dzy testerami a programistami?
  • Czy wci膮偶 m贸wimy o sobie my-wy?
  • Czy b臋dziemy mieli spady w najbli偶szej iteracji?
  • Jak du偶o zada艅 dosz艂o w trakcie iteracji? Jakiego rodzaju by艂y to zadania?

Kilka s艂贸w o roli analityka
Analityk bywa w Scrumie czasem zagubiony. W jak膮 rol臋 ma si臋 wcieli膰 Proxy Product Owner, Scrum Master, Product Owner? Jedn膮 z powtarzanych przyczyn zmieszania analityka s膮 te cholerne straty w projekcie. No bo je艣li jedyna warto艣ci膮 jest "dzia艂aj膮ce oprogramowanie", reszta to strata, a jemu kazali pisa膰 dokumentacj臋, to ma poczucie, 偶e wykonuje bezsensown膮 i bezwarto艣ciow膮 prac臋.

My艣l臋, 偶e te "straty" wymagaj膮 ma艂ego komentarza. Analityku, je艣li w za艂o偶eniach projektu stoi napisane, 偶e ma by膰 dokumentacja analityczna w projekcie, bo tak wymaga klient, ustawa czy ktokolwiek inny, to dokumentacja r贸wnie偶 jest warto艣ci膮 w projekcie i r贸wnie偶 dodaje punty do business value.

Przyk艂adowe zadania, w kt贸rych analityk mo偶e wspiera膰 zesp贸艂:
  • wsp贸艂praca i mediacje:) z PO
  • backlog grooming
  • prowadzenie Product Canvas; ciekawe linki: tutaj, tutaj i tutaj.

Friday, August 23, 2013

Conversation Patterns: S艂owa s膮 wa偶ne w User Stories

This article is part of my work on Conversation Patterns for Software Professionals


Wprowadzenie, kt贸rego nie trzeba czyta膰 :)

Min膮艂 prawie rok od chwili wydania Oprogramowania szytego na miar臋.... Prowadzi艂em sporo warsztat贸w w oparciu o t臋 ksi膮偶k臋 i mailowa艂em z czytelnikami. Z zadawanych pyta艅 wnioskuj臋, 偶e nie jest do ko艅ca jasne, w jaki spos贸b stosowa膰 techniki zadawania pyta艅 w szczeg贸艂owych kontekstach. Opisane sposoby prowadzenia rozmowy z klientem s膮 cz臋sto widziane w izolacji od "reszty 艣wiata".

Rozmawiamy sobie, zadajemy pytania, konkretyzujemy, ale co dalej? My przecie偶 pos艂ugujemy si臋: user stories, taskami, use cases, bounded contexts, architektur膮 itd. Jak to sklei膰 z technikami zadawania pyta艅? Przecie偶 w tych wszystkich wymienionych obszarach zadawanie pyta艅, konkretyzowanie, definiowanie problemu ma swoje zastosowanie. Albo inaczej: user stories, taski, use cases, bounded contexts, architektur膮 s膮 efektem zadawania pyta艅. A zatem pytanie brzmi: jak zadawa膰 pytania, aby otrzyma膰: USs, UCs, tasks, BCs, zdekomponowan膮 architektur臋?

T臋 umiej臋tno艣膰 zadawania pyta艅 prowadz膮cych do w/w artefakt贸w nazywam conversation patterns. Termin ten ukuli艣my podczas iDDD Tour w Krakowie, kiedy Vaughn Vernon da艂 nam par臋 minut na przedstawienie paru spostrze偶e艅 nt. wyodr臋bniania modelu dziedzinowego podczas rozmowy z ekspertem. Tak powsta艂a kr贸tka prezentacja Conversation Patters for Ubiquitous Language (je艣li nie by艂o Ci臋 na iDDD Tour, musisz u偶y膰 wyobra藕ni, aby z艂apa膰 o co chodzi:)).

Tyle tytu艂em wst臋pu. Zacznijmy od User Stories.

Literalne stosowanie szablonu

Kr贸tki przegl膮d przez histori臋 rozwoju US mo偶esz przeczyta膰 na stronie Scotta Amblera. W ka偶dym razie popularn膮 obecnie ich form膮 jest As a...I want...so that....
Ten bardzo sprytny schemat formu艂owania US u艂atwia ekspertowi formu艂owanie my艣li i oczekiwa艅. Jest bardzo prosty, lecz pod t膮 prostot膮 kryje si臋 mn贸stwo niuans贸w, bez zrozumienia kt贸rych, powstaj膮 karykatury US. Zobaczmy do czego mo偶e doprowadzi膰 literalne stosowanie tego szablonu:
  1. Jako U偶ytkownik chc臋 si臋 zalogowa膰, aby si臋 zalogowa膰 :)
  2. Jako U偶ytkownik chc臋 si臋 zalogowa膰, aby skorzysta膰 z systemu
  3. Jako U偶ytkownik chc臋 klikn膮膰 prawym przyciskiem myszy i zobaczy膰 menu kontekstowe po to, aby wybra膰 interesuj膮c膮 mnie opcj臋
  4. Jako Likwidator chc臋 zwi臋kszy膰 rezerw臋 szkodow膮, aby post臋powa膰 zgodnie z wewn臋trzn膮 procedur膮 T-1000
  5. Jako PO chc臋 doda膰 pracownika do bazy, aby mie膰 go w systemie
Kilka s艂贸w komentarza. (1,2) s艂abuj膮 je艣li chodzi o precyzyjne sformu艂owanie korzy艣ci (frazy po so that...). Czy korzy艣ci膮 dla u偶ytkownika jest to, 偶e si臋 zaloguje? W膮tpliwe. 呕e skorzysta z sytemu? By膰 mo偶e, ale mo偶liwe, 偶e u偶ytkownikowi chodzi o to, aby dosta膰 si臋 do swojego konta?

Je艣li chodzi o (3) r贸wnie偶 jest k艂opot z korzy艣ci膮. Jasne, 偶e wybranie interesuj膮cej opcji ma sens, je艣li m贸wimy o tworzeniu menad偶era okien, albo biblioteki GUI, lecz a aplikacji biznesowej wybranie interesuj膮cej opcji nie jest korzy艣ci膮 lecz specyfikacj膮 interfejsu u偶ytkownika.

W (4) jest lepiej. Czy post臋powanie zgodnie z procedur膮 T-1000 sprawi, 偶e dzi臋ki oprogramowaniu b臋dziemy mogli odnosi膰 wi臋cej korzy艣ci? pozyska膰 wi臋cej klient贸w? zarabia膰 wi臋cej pieni臋dzy? Bez szerszego kontekstu trudno jednoznacznie stwierdzi膰. Brzmi dobrze.

Nieco inaczej jest w (5). To, 偶e PO wypowiada US, nie oznacza, 偶e to on chce danej funkcjonalno艣ci, i 偶e on odniesie z niej korzy艣膰. Oczywi艣cie warto u偶ywa膰 US do opisywania potrzeb interesariuszy (brzydkie s艂owo:)) -@see Stakeholder Stories, lecz w tym przypadku rola nie zosta艂a w艂a艣ciwie dopasowana do potrzeby i korzy艣ci. PO mo偶e chcie膰 np. 艂adniejszy layout, popraw臋 bezpiecze艅stwa. Funkcjonalno艣ci raczej rzadko.

S艂owa s膮 wa偶ne w US [@see rozdzia艂: Co to znaczy my艣le膰 biznesowo?]
Tak naprawd臋 US nie jest niczym innym ni偶 parafraz膮 [@see Technika parafrazy] tego, co ekspert powiedzia艂, spisan膮 w ustandaryzowany spos贸b. Pos艂uguj膮c si臋 struktur膮 rozmowy [@see rozdzia艂 Sztuka zadawania pyta艅], formu艂ujesz pojedyncze wypowiedzi rozm贸wcy w jak najbardziej konkretny spos贸b.
Tak jak sugeruje tytu艂 posta i akapitu, s艂owa kt贸rych u偶ywasz w spisywaniu US maj膮 znaczenie. Zerknij na rysunek. To, co m贸wi Tw贸j ekspert mo偶esz zapisa膰 co najmniej z u偶yciem s艂ownictwa trojakiego rodzaju:

Biznesowego - s艂owa pochodz膮 z dziedziny biznesowej np.: Jako Klient chc臋 obejrze膰 mo偶liwe do za艂o偶enia lokaty, aby wybra膰 najodpowiedniejsz膮 do moich potrzeb
Rozwi膮za艅 - s艂owa dotycz膮 konkretnych rozwi膮za艅 i sugeruj膮 j a k co艣 ma dzia艂a膰, np.:Jako Klient, chc臋 wej艣膰 na zak艂adk臋 mo偶liwych do z艂o偶enia lokat, aby zaznaczy膰 najodpowiedniejsz膮 do moich potrzeb.
Technikali贸w - s艂owa pochodz膮 z 偶argonu technicznego np.: Jako Klient, chc臋 wy艣wietli膰 listbox ofert, aby najlepsz膮 doda膰 do mojego rachunku.

Oczywi艣cie to tylko typologia. Wi臋c Twoje parafrazy tego, co m贸wi rozm贸wca, mog膮 miksowa膰 s艂ownictwo r贸偶nego rodzaju. W tym miejscu chc臋 Ci zasugerowa膰, aby艣 u偶ywa艂 przede wszystkim s艂ownictwa bizensowego. Dlaczego?

Pow贸d 1. Tak jak na rysunku mi臋dzy tymi grupami s艂贸w wyst臋puje relacja podrz臋dno艣ci. Najwy偶ej umieszczony jest biznes, najni偶ej technikalia. Zmiany r贸wnie偶 przebiegaj膮 z g贸ry na d贸艂. Dan膮 potrzeb臋 biznesow膮 mo偶na zrealizowa膰 na kilka sposob贸w, kt贸re mog膮 si臋 zmienia膰. Je艣li wi臋c klient stwierdzi, 偶e woli nowe strony zamiast zak艂adek, to spowoduje to du偶o zmian w wymaganiach. Je艣li b臋dziesz trzyma膰 si臋 s艂ownictwa biznesowego, to zmiany w konkretnych rozwi膮zaniach nie b臋d膮 a偶 tak bolesne.

Pow贸d 2. To zesp贸艂 jest odpowiedzialny za proponowanie klientowi rozwi膮za艅 i za znalezienie najlepszego. Klient jest odpowiedzialny za swoje potrzeby. Pami臋taj: User Stories s膮 efektem konwersacji.

Pow贸d 3. U偶ywaj膮c 偶argonu technicznego kastrujesz domen臋. Gubisz wa偶ne poj臋cia biznesowe, regu艂y za nimi stoj膮ce. Jest du偶a szansa, 偶e stworzysz architektur臋 nieadekwatn膮 do wymaga艅 (@see Jak zniszczy膰 sw贸j kod?).

Zatem celem jest to, aby wej艣膰 na poziom biznesu, z jego perspektywy sformu艂owa膰 US i u偶ywaj膮c swojego do艣wiadczenia technicznego, zaproponowa膰 konkretne rozwi膮zania.

膯wiczenie dla zespo艂u

Retrospekcje do艣膰 cz臋sto opieraj膮 si臋 na wra偶eniach. Dyskutujemy o naszych spostrze偶eniach i o zmianach. Wra偶enia daj膮 wiele informacji, lecz dla r贸wnowagi chcia艂bym zaproponowa膰 Twojemu zespo艂owi retrospekcj臋 opart膮 na liczbach.

W najbli偶szej iteracji podejmijcie jedn膮 praktyk臋: ilekro膰 karteczka trafi do kolumny IN PROGRESS, oznacz dat臋 umieszczenia w tej kolumnie oraz dat臋 umieszczenia w kolumnie DONE.
Podczas retrospekcji wybierzcie zadania, kt贸re przebywa艂y w IN PROGRESS maksymalnie jeden dzie艅 (typ A) oraz te, kt贸re przebywa艂y tam trzy dni i wi臋cej (typ Z), i odpowiedzcie na nast臋puj膮ce pytania:

  • Ile by艂o zada艅 typu A? Ile by艂o zada艅 typu Z?
  • Na ile pocz膮tkowo by艂y szacowane zadania typu A oraz Z?
  • Dla kt贸rych zada艅, A czy Z, b艂膮d oszacowania jest mniejszy?
  • Czy zadania typu A s膮 sformu艂owane inaczej ni偶 zadania typu Z? Na czym konkretnie polega r贸偶nica?
  • Kt贸re z zada艅 s膮 formu艂owane pe艂nym zdaniem? (z czasownikiem i rzeczownikiem)
  • Czy kt贸re艣 z zada艅 sformu艂owane jest w trybie rozkazuj膮cym?
  • Kt贸re z zada艅 przechodz膮 Test Copy-Paste?*

I na koniec wnioski: w jaki spos贸b nast臋pnym razem nale偶y formu艂owa膰 zadania.


*) Test Copy Paste - to do艣膰 dobry spos贸b weryfikowania konkretno艣ci zadania. Je艣li przeniesiesz swoje zdanie do innego kontekstu i wci膮偶 ma ono sens, to prawdopodobnie jest ma艂o konkretne. Na przyk艂ad zadania: Napisz test, Przygotuj dokumentacj臋, Zaimplementuj serwis wyszukuj膮cy pasuj膮 wsz臋dzie. Niewa偶ne czy pracujesz nad CRM, portalem e-bankowo艣ci, czy sterownikiem klapy od sedesu - te zadania maj膮 sens, w ka偶dym z wymienionych kontekst贸w. A偶 si臋 prosi o ich zdekomponowanie.

Lecz zadania: Napisz test do por贸wnywania dochod贸w klienta na wniosku z danymi biura nieruchomo艣ci, Zaimplementuj podgl膮d wniosku windykacyjnego zdefiniowanego w BAF po przeniesieniu do innej przestrzeni problemu trac膮 sw贸j sens. Trac膮 go poniewa偶 ich sformu艂owanie jest na tyle zwi膮zane z tym konkretnym kontekstem, 偶e bez niego trudno jest zadania zrozumie膰. Takie zadania maj膮 bardzo wysokie actionability, s膮 na tyle konkretne, 偶e 艂atwo je wykona膰 OD RAZU. Oczywi艣cie Test Copy-Paste nie jest zero-jedynkowy, lecz wyznacza pewne continuum konkretno艣ci i actionabilitno艣ci :) zada艅.

Friday, August 2, 2013

Bug-Driven Development

- Ale tego nie by艂o w specyfikacji.
- Ok, ale to przecie偶 oczywiste, 偶e powinni艣cie to zrobi膰.
- Jak to oczywiste?
- No, kurcze...


Niezliczon膮 ilo艣膰 razy z pewno艣ci膮 s艂ysza艂e艣 powy偶szy dialog.
Chyba wci膮偶 chodzi o to samo - o niedostateczne sprecyzowanie wymaga艅, a potem o zepchni臋cie odpowiedzialno艣ci. Przyczyny wspomnianego stanu rzeczy s膮 znane i maglowane wci膮偶 na nowo: trudno艣ci komunikacyjne, brak czasu, brak zaanga偶owania klienta itd, itp. Pewnie chodzi o to, 偶e z wymienionych powod贸w wymagania nie zosta艂y dobitnie i jednoznacznie sformu艂owane.

A je艣liby tak ustawi膰 spos贸b wsp贸艂pracy, 偶e brutforsowo wymusi jednoznaczne formu艂owanie wymaga艅? kt贸ry nie b臋dzie polega艂 na dobrej woli i ch臋ci zaanga偶owania, ale po prostu uniemo偶liwi sformu艂owanie niejednoznacznych wymaga艅? I tu jest w艂a艣nie miejsce dla Bug-Driven Development :)

No, wyobra藕 sobie nast臋puj膮c膮 scen臋:

Zaczyna si臋 rozmowa z PO na temat nowego sprintu
- Sko艅czyli艣my! - krzyczy uradowany Zesp贸艂
- Jak to? Poka偶cie!

Zesp贸艂 z namaszczeniem odpala przegl膮dark臋, na kt贸rej wida膰...bia艂膮 przestrze艅.
Zmieszany PO j膮ka - Ale tu nic nie ma...
- Jak to nie ma? - odpowiada pewny jak McGyver siebie Zesp贸艂.
- No, nie mog臋 si臋 zalogowa膰.
- Ok, mamy pierwszy bug - zesp贸艂 skrupulatnie notuje co艣 na kartce.
- Czekaj, wr贸cimy za dziesi臋膰 minut.
- ?? - odpowiada PO.

Po chili grupa programist贸w wpada do sali spotka艅.
- Ju偶 mamy! - wrzeszcz膮 uradowani.
- Czyli co?
- Jak to co? Soft dla Ciebie! Co z tob膮, 艁osiu?

Odpalaj膮 przegl膮dark臋 z pi臋knym ekranem logowania. PO z nadziej膮 w oczach loguje si臋 do systemu i....
- Aaaa! $^!@#&(!
- Czy co艣 nie tak? - pytaj膮 z zaciekawieniem programi艣ci.
- A gdzie panel u偶ytkownika, do cholery!!

Na to szcz臋艣liwy jak nigdy dot膮d SM:
- Ok, ch艂opaki mamy drugiego buga!, spadamy.
Po czym rzuca przez rami臋, do oniemia艂ego PO.
- P贸艂 godzinki i jeste艣my, bu藕ka!

i tak przez najbli偶sze cztery tygodnie.


To tak, p贸艂 偶artem, p贸艂 serio, ale czuj臋, 偶e co艣 w tym jest :)

Tuesday, July 9, 2013

13/2 = 8 + 8 [ setny post:) ]

Jaki艣 czas temu zaproponowa艂em w trakcie planowania z pewnym zespo艂em, aby historyjk臋 podzieli膰 na dwie mniejsze. Na to szybko zaoponowa艂 Product Owner - O, nie nie. Jak ostatnio podzielili 13SP na dwie historyjki, to wysz艂o im dwa razy po 8. Niech lepiej nie dziel膮.

Ale to w艂a艣nie o to chodzi! Ta z艂o偶ono艣膰 tam jest, tylko 偶e ukryta. Je艣li nie wyjdzie podczas szacowania jako dodatkowe SP, to pojawi si臋 na wykresie jako spuchni臋cie zakresu albo na koniec sprintu jako item, kt贸ry nie jest "Done".

Na zako艅czenie rozmowa mi臋dzy, PO a programist膮 nt. kryterium akceptacji:

PO: No, co ty nie da si臋 wygenerowa膰 umowy z bez danych w deklaracji.
Programista: Da si臋, bo mog臋 zahakowa膰.
PO: M贸w do mnie po polsku.
Programista: No, mog臋 Ci臋 oszuka膰...


To jest setny post na tym blogu. Przez 62 miesi膮ce pisania, daje to ok 1.61 posta na miesi膮c. Kurcze, pisanie to 偶mudna robota.

Wra偶enia po Confiturze 2013

Rodzinna atmosfera jest dla mnie tym, co bardzo w Confiturze lubi臋. I w tym roku, to r贸wnie偶 wisia艂o w powietrzu. Pierwszy raz by艂em obecny na zako艅czeniu i musz臋 przyzna膰, 偶e by艂o 艣wietne. Zabawne, na luzie i z pomys艂em. Oficjalnie uznaj臋 Bartka za mistrza konferansjerki. Stary, rzu膰 programowanie, zajmij si臋 prowadzeniem imprez masowych :). Acha, no i klima super:)

Kr贸tko o prezentacjach, na kt贸rych by艂em.
Masz ju偶 do艣膰 bycia szambonurkiem? Czyli o tym, co robi膰, aby praca w projekcie "utrzymaniowym" dawa艂a satysfakcj臋 Zaintrygowa艂 mnie ten "szambonurek" w tytule, wi臋c poszed艂em. Dla mnie ta prezentacja by艂a nowo艣ci膮 na konferencji. Do tej pory z katedry s艂ysza艂em: u nas jest super, jeste艣my liderami na rynku, r贸bcie tak jak my, itd.. Niby takie prezentacje s膮 ok, ale zwykle dziwi mnie 艣wiat, w kt贸rym ka偶da firma jest liderem w swojej bran偶y, a ka偶dy sklep jest "centrum". My艣l臋, 偶e wychodz膮c z teorii ci膮g贸w liczbowych, stereometrii i s艂owotw贸rstwa, mo偶na by dowie艣膰, 偶e lider mo偶e by膰 tylko jeden i centrum mo偶e by膰 tylko jedno. No nic...odp艂ywam od tematu:).

Ta prezentacja by艂a inna. Przedstawia艂a succes story wychodz膮c od kompletnej pora偶ki na pocz膮tku. Us艂ysza艂em histori臋 o b艂臋dach, uczeniu si臋 na nich i o sukcesie. Us艂ysza艂em histori臋 RZECZYWISTO艢CI. Dzi臋kuj臋 Prelegentce, za to, 偶e nie uraczy艂a mnie kolejnym malowaniem trawy na zielono, a kraw臋偶nik贸w na bia艂o, tylko prosto i ciekawie opowiedzia艂a trudn膮 histori臋 pewnego projektu.

Potem mia艂em w planach: Emancypacja pracownik贸w. Dlaczego spalili艣my karty zak艂adowe? oraz W jaki spos贸b zatrzyma膰 najlepszych ? Kluczowe aspekty motywacji zespo艂贸w deweloperskich. No, ale najpierw zagadn膮艂 mnie Pan Kamerzysta i zwierza艂em si臋 kamerze ze swoich konferencyjnych wra偶e艅. Potem zagadn臋艂a mnie Pani z karieraplus.pl z pro艣b膮 o wywiad. W 偶yciu nie udziela艂em wywiadu i ch臋tnie si臋 zgodzi艂em. A poniewa偶 wypytywa艂a mnie r贸wnie偶 o BNS IT, to natchniony pierwsz膮 prezentacj膮, opowiedzia艂em ca艂膮 nasz膮 histori臋, nie pomijaj膮c niczego. Rozgada艂em si臋, wi臋c je艣li ten wywiad si臋 uka偶e bez skracania, to chyba zajmie z p贸艂 magazynu:).

Droga po wiedz臋 – jak zbudowa膰 Continuous Learning Culture. Aaa, bardzo fajne. Najciekawsze by艂y przyk艂ady stosowanych rozwi膮za艅. Mam jedno mocne zastrze偶enie. Prowadz膮c ten blog, zdarzy艂o mi si臋 par臋 razy czepia膰 si臋 prelekcji i wydaje mi si臋, 偶e jednak lepiej czepia膰 si臋 w 4oczy. Wi臋c je艣li Autor jest zainteresowany to zapraszam na priv.

Java Developer Career Unplugged. Statystyki pokazywane przez Wojtka na pocz膮tku prezentacji, jasno dowodz膮, 偶e jego wyst膮pienia mo偶na uwielbia膰 albo ich nie znosi膰, nie mo偶na za to pozostawa膰 oboj臋tnym:) Mnie si臋 akurat bardzo podobaj膮, chyba dlatego, 偶e s膮 one, jak i sam Autor, bardzo wyraziste. Mo偶na si臋 zgadza膰, mo偶na nie, ale wiadomo jakie Prelegent ma stanowisko i czego mo偶na si臋 po nim spodziewa膰. By膰 mo偶e wspomniana polaryzacja wynika st膮d, 偶e Wojtek m贸wi to, o czym wielu my艣li, ale nie ma odwagi powiedzie膰 na g艂os?

Test Driven Traps
Gdybym mia艂 jednak wybra膰 najlepsz膮, to stawiam na t臋. Pow贸d jest prosty: samo mi臋so. Slajd po slajdzie, Jakub przedstawi艂, bardzo konkretne porady, przemy艣lenia i pu艂apki zwi膮zane z TDD. Niestety musia艂em wyj艣膰 pod koniec, aby z艂apa膰 par臋 oddech贸w przed swoim wyst膮pieniem.

Ma艂y tip dla prawie wszystkich prelegent贸w: koledzy, zmie艅cie zdj臋cia, postarzeli艣cie si臋;P i ju偶 nieco inaczej wygl膮dacie ;)

Za艂膮czam swoj膮 prezentacj臋. Poniewa偶 preferuj臋 has艂a na prezentacji, wi臋c je艣li nie by艂o Ci臋 na konferencji, chyba b臋dziesz musia艂 poczeka膰 na filmy.



Dla uzupe艂nienia wrzucam jeszcze ostatnie dwie konferencyjne prezentacje. Z reszt膮 naszych wyst膮pie艅 mo偶ecie zapozna膰 si臋 tutaj.