react-social-login

The easiest way to integrate Social Login in your React Apps ...Checkout NPM
Showing posts with label Agile. Show all posts
Showing posts with label Agile. Show all posts

Friday, October 11, 2013

Code For Me Dude - Breaking People's Dependencies in Agile Projects


If I consider product sprints as an evil, every agile team has Marvel superheroes (developers) who with their expertise, kill the evil and bring joy to the city (Stakeholders).  But what if Batman goes on a leave while a tension erupts in Gotham City and there is no one to save it? Call Super Man? Cool Idea! But what if Super man says “Unfortunately, I've no idea about how to help people in Gotham City!”. Sounds like you've heard this before?

“X is on sick leave today so we're blocked on a module”

“X would soon be going on a 10 days vacations, so do not plan tickets for next sprint”

“X has to leave early, but Y has a dependency on his task which would block Y”

Well, such phrases are common and become even more relevant when Product Manager/Team Lead start loving the quick  response time they get from a developer working on same sub product/module for a relatively longer period. But the negative consequences are
  • Immediately visible when he is not available 
  • Gradually visible to the developer when he feels technical and functional stagnancy
 However, we all still love to get back to the comfort zone   instead of BREAKING THE DEPENDENCY! However, there are many, who really wish to break this ice.

This article is about a technique called "Code for Me Dude" which is a team configuration approach such that there is more knowledge sharing and hence lesser dependencies. Before I jump to my "Code for Me Dude" approach, following are a few popular options available for breaking dependencies:

2 Common Approaches & Why I don't like them much ....

1. PAIR PROGRAMMING
Pair Programming
Wiki has an excellent definition for this, so I'm avoiding a few keystrokes.

"Pair programming is an agile software development technique in which two programmers work together at one workstation. One, the driver, writes code while the other, the observer or navigator,[1] reviews each line of code as it is typed in. The two programmers switch roles frequently."

 Well, sounds nice. Few advantages besides saving electricity are obvious:
·         Better brainstorming, realtime reviews and possibly better estimations
·         Two people gain technical/functional knowledge for same module

With aforesaid benefits, it is indeed pretty tempting to opt for Pair Programming. But watch for a few cons too:
·         Effort involved in a decent code review in general takes 10-50% of the time involved in development. This means, even in worse case, you may loose 50% of developer’s development productivity
·         Both developers work on same module. This means, they gain substantial knowledge for a module but they are still not capable of handling another module/product when there are multiple mini projects running in parallel.
·         There may be situations where developers are not at ease working together OR are in too much of a comfort zone. Either scenario would impact development.
·         Developers may get bored working on same module for long

2. SHUFFLING
Swapping

As the name suggest, swap developer X (working on ABC) with Y (working on PQR). Easy, isn’t it! I know you said “Yes”! Benefits:
·         You can break dependencies at a bigger level – module or even products.
·         Can help when developer are bored working on a module/product for long

But, it may not be that easy to implement as it sounds:
·         In a dynamic environment, the biggest question always is “When should we plan a swap”. I'm again talking about the comfort zone. Likely, you’d never do that.
·         Swapping developer means big effort/cost involved in deep Knowledge Transfer (KT)
·         Developers who had excellent response time, would all of sudden have a fall in response time (which is fine as long as Business understands that..ahm!ahm!)
·         Developers may lose the expertise they had for previous module being out of touch


     3. I SUGGEST “Code for Me Dude (CoMeD)” 

This is kind of Hybrid. It may already be followed somewhere, may have a different name, but it came as a original thought when a client wanted to break the dependency but had aforesaid concerns. 


WHEN TO USE IT?


  • different products under same group sharing a common team.
  • there are more-or-less technically equivalent people working on different modules/sub-products using common or specialized tools.


In this approach, for a particular project/module, one developer is assigned as a Primary resource while another is assigned as a secondary resource. While, Primary resource is an expert in that area, secondary resource is fairly new to the product (who is actually an expert in some other area). Thinking, what’s new in it? There's a big twist!

THE TWIST!



Primary developer do not spend more than 20% of his time in the module/project of his expertise while a Secondary developer accompanies him, who is fairly new to the system but spends 80% of his time in it.

WHY SO?

If you have primary developer for 80% on the same module, he’d always continue to work on complex & big tickets while secondary developer would get hand-on experience only for smaller & aesthetic tickets. So, one day, when primary developer is on leave, you’d find you didn't break the dependency ice well and actually you get back to square one.

Note - At the same time, Primary Developer would be a Secondary Developer for some other area which is still new to him while Secondary Developer would be acting as a Primary one for an area of his expertise. So, in a nutshell, a resource spends 80% time to leverage his area of expertise and rest 20% in guiding a new person in his area of expertise.

You don't need to be doing this all the time. But when you find a need for some dependency break, this can be effectively used to start with.


WHY THE NAME "CODE FOR ME DUDE?"


For effective utilization of CoMeD, it is highly recommended that ownership remains with the Primary Resource for the tickets which are implemented by Secondary resource. It is like Primary Resource asking Secondary Resource "Could you code for me Dude? This will bring up at par and help everyone in my absence".

Let’s see how Benefits of “Code for me dude” outshine the cons of aforesaid approaches.

BENEFITS
·         Nothing can be better than hands-on way of learning. Secondary developer will get at pace with primary developer much faster and with lesser formal theoretical KT
·         Productivity is much better than Pair Programming
·         Primary developer will retain the expertise of existing product. 
·         Having ownership lying with Primary Resource brings following advantages:
o    Primary developer will learn better interaction and communication as he needs to get his code done by secondary developer (That’s why “Code for me dude”) and also update business about status. This will groom leadership skills.
o    Better review as Primary developer would ensure code is written as per existing practice, being responsible
o    Business and Product Managers would continue to have a comfort zone as they’re still interacting with same developer.  Though in Standups, secondary developer should be providing status updates.
o    Once the secondary developer is at par with Primary developer,  he can take full responsibility as was initially held with Primary developer
·         Shuffling is somewhat easier this way and can be a continuous practice


However, this is challenging for developers (actually they might love it if they were always fascinated by work/tools their peer is doing/using). This satisfies the technical appetite of developers. At the same time, it breaks the ice of dependency bring peace of mind to product managers.

I hope you'd have found debatable  CoMeD approach useful. Do share your queries &  thoughts - Love/Hate, to make it better :)




Friday, March 29, 2013

Architecting scrum


Thoughts on Engineering Design and Analysis phase, specific to running sprints. Thoughts are based on assumption that PO is ready with sprint items.
I. Pre-requisites:
-     Understanding sprint requirements:
  • New User Stories
    • Story Specifications Walk through (PO, QA, Dev)
    • Understanding Acceptance Criteria
    • Wireframes walkthrough (where available)
  • Gathering performance and security requirements
  • Walk through of issues to be resolved in sprint and their priorities

II. Architecting Process
 -     Technical Impact Analysis (Very Important for running sprints) – Identifying impact on existing application against implementation thought for new stories/issues 
-       Planning implementation of any technical change in process/technology based on previous sprint review, retrospective meetings or any feedback from client
-       Decision Analysis & Resolution – Identifying the need for following based on sprint requirements and alternatives evaluation using a comparative matrix:
  • New Tools
  • New Libraries required – Paid/ Open-Source
  • Major Framework Level Changes
-     Planning Technical tasks
  • Breaking of user story into concrete technical tasks
  • Estimating tasks using Planning Poker or any other estimation tool
-      Preparing Support Documents – Level of documentation is subject to preferences as laid by client. (Personally, I rarely  see much documentation happening in running sprints)
  • High Level Design
    • Logical Entity diagrams
    • DFD/Flowcharts
    • Proof of concept where a new library/framework is applied
    • Test cases
  • LLD
    • Component level diagrams
    • Physical ER diagrams

Thursday, July 26, 2012

Distributed Team Planning Poker Tools

Planning Poker (PP) is among the most popular and effective estimation techniques available today.

But  a question here - "How can I play planning poker with teams that are geographically distributed"? There are likely many options to achieve this. Sharing a few common ones below:

Option-1: Chat Window (Tried, but leaves loop holes for biased points selection)
It is implied that communication mediums like GoTo or WebEx are used when teams are geographically distant. Once the requirements are clear, product owner can signal via an utter to give points and every member can use chat window of tools to put a number and hit enter.

Option-2: Webcam (I'm using this one in current project - Not great fun, But works!)
If communication medium used supports video conference with multiple people (Google+ video a free and popular one), one person takes responsibility of saying 1-2-3-Go and as soon as "Go" is said, teams can show up their cards on webcam. Since tools supporting multiple people video chat display them in a mosaic/tiles based views,  it is easy to grab figures at once.
A funny note: People tend to show up cards after watching other's. Ask every member to hold up their card facing backside on webcam. Once host asks to show, they'll flip it.

Option-3: Planning Poker.com (Good. But you can't change cards)
This website is from same organization which is pioneer in planning poker cards - Mountain goat software. It is free and allows moderator to create project, add stories and invite people (via emailing shared link) to participate in process. Any user who click on this link (needs no authorization) sees story and standard scrum cards. He can click on any scrum to post his thought on story complexity.

Option-4: Google Docs
Idea is simple: Create a spreadsheet in GoogleDoc and allow people to type their numbers.


Option-5: OneNote
This is pretty cool. Idea is similar to Google Docs but MS Office documents can be used for live synchronization and platform. Also usage is limited to desktop browser as people can post their opinions from smartphone too. If you're new to OneNote, probably http://www.youtube.com/watch?v=3dubGfyvrbI (he is funny) and http://www.youtube.com/watch?v=SP1OEx_i4Fg&feature=related should give an idea.


Option-6: JIRA plugin
If you're using JIRA for scrum management, it does has a plugin to integrate planning poker within JIRA UI.
You can find more details at http://www.jiraplanningpoker.com/

If you're using any other interesting creative option, please suggest!!!

Tuesday, July 10, 2012

Top 10 things to remember in scrum sprint


Compiling 10 things to remember in sprint cycle (from theory and experience), which anyone following scrum anywhere, should remember!!

1. Spirit of Scrum says work and think using “We” and not “I” (No blame game and be ready always to lend a help, if it helps in completing sprint successfully)

2. There is nothing called “The Sprint partially succeeded”. It fails or succeeds in full i.e. all tickets must be delivered well and in time (think of DB transactions as analogy )

3. Whenever you find yourself stuck on account of dependency, approach Scrum Master ASAP.

4. Following processes may sound boring. And following a new process may look a burden. But remember, it is We only who’ve defined process and should hence follow it for sprint betterment.

5. Keep standup short – What I did? What I’m doing next? Am I facing any issue or  has to discuss anything (after standup)?

6. Talk in numbers – Prefer JIRA (or whatever tool use) task numbers with a very small description for standup when talking of your status. For example, I've been working with Ticket3142 related to adding new values in user search  dropdown.

7. The more you talk to QA while user story is in progress, the more you can avoid them later (in context of bugs logged post release )

8. Don’t be shy to say NO to any external distraction which you believe would definitely affect sprint (e.g., interview, other bugs, unimportant meetings etc.) 

9. Sprint team follows no hierarchy and everyone is equal and equally accountable to get sprint done

10. Most Important - Don’t take pressure. Enjoy sprint and remain motivated.