Scrum is very simple framework to
develop complex software product in complex environment but hard to practice.
But why? I am not going in details of why but wanted to highlight one problem about
development team as per my understanding.
Development team means
cross-functional and self-organizing team of developers. But who is developer? Isn’t
it everyone who contribute to develop software? A coder, tester, dba, UI
designer, content writer or business analyst? Now look at your team. Is it cross-functional?
Yes you have because you have technician for all skills but are those technician
developers? May not be. There are just a coder, a tester, a dba, a ui designer
and waiting for their skill related task. They are not working as developers
with goal to develop software but they are just doing their task as per their
skills.
Some of the key things that will
help you to understand about development team. Think about L&D organizing few training is going to announce it.
1st announcement “we are planning to have
workshop for Scrum Developer so send your nomination”. You will find that only
coder has subscribed for this workshop.
Another announcement “we are
organizing Agile Testing workshop so send your nomination”. This time only
tester will subscribe.
What reflect above? Team is still
divided in coder and tester. Tester feels everything related to testing is
their domain and similarly coders feel all coding work is part of their work.
But reality is tester
has to write code in order to test production code and coder has to write test
to perform unit and integration test of code.
Another way of looking at it.
During sprint planning team
prepared sprint backlog. Below is sprint backlog and now what it reflects?
There are tasks but those tasks are skills based and not component. Isn’t it
bad way of creating task? No? Then look below situation.
Assume there are 2 people Alex
(coder) and Martha (tester) working on these 3 stories.
Alex done with coding part of
story 1 after 2 days and Martha has started testing so what Alex will do next?
Most likely Alex will start
working on coding part of story 2. Is it good? Why can’t Alex picks up other
work from same story? Or why Martha was waiting for Alex to complete coding in
order to start testing? Why can’t she pair with Alex to test in parallel or at
least started testing APIs?
Many people asked me what’s wrong
if Alex start working on coding part of story 2. Let’s see below situation.
Alex completed coding of 1st story and started coding 2nd story. Martha still testing 1st story found a
bug so what she has to do? She reached out to Alex and wanted to discuss about
bug but Alex is busy and asked her to come later on.
What do you think Martha will do
next? Most likely she will open a bug tracking tool and log newly found bug
over there. Is it good? No but why Not? I will write about bug logging challenges sometime later on but let's focus on other aspect of it for now.
After a day Alex is done with
coding of Story 2 and started looking into bugs those were logged by Martha. He
identified route cause of a bug that requires to change some framework level
code. But that will also impact 2nd Story code that he has just completed.
What Alex will do? It is good if
he go change whatever needed in order to fix at route but it will generate
rework and will delay delivery. Other option is shortcut to fix bug (patch
work) that will not have much impact on Story 2 code.
Majority of the time coder choose
2nd option because coders are very emotional about their code but
result of shortcut will be “Technical Debt”.
What can be done in order to
avoid such scenario? Yes. 1st don’t break story like above but try
to divide in component. Best is not to divide but still dividing then divide in
component. Work in pairing. Team should focus on finishing one that already in
progress rather than starting new story.