views:

249

answers:

6

I am a trainee in development sector. My Boss says that i should be an agile programmer.

I went through through the net and found some interesting things about agile programming. Being a newbee how should I start with agile?
What should be my first step in Agile programming?

At present I am in pair programming. But it's not exactly pair programming as I am just watching what my co-developer is doing. I also wish to be an agile developer.
Can you suggest a way for me stepwise?

I wish to develop myself and also my programming skills.

+3  A: 

In my organization, all you have to do is declare yourself to be an Agile Programmer. Magically, the need for planning and documentation disappears.

Dave
@dave the need for planning and documentation disappears in the sense. i am confused. Please be specific for some more extent.
Code 'N' Weed
@Code 'N' Weed - Dave is complaining, sarcastically, that some programmers who call themselves 'Agile' don't require and/or don't create the planning and documentation which he would like them to.
ChrisW
@Dave and ChrisW - OMG i will Plan myself and document my plans in wiki doc hereafter. This answer is for all newbee's essential answer. thanks for warning me at the beginning itself.
Code 'N' Weed
@Code 'N' Weed - people have written about [agile documentation](http://www.google.com/search?q=agile+documentation) but/and perhaps you should ask your boss/coworkers/client what documentation (how much, what for, who for, and where) they would like from you.
ChrisW
-1 I understand the sarcasm and everything, but seriously, just complaining without proposing anything doesn't help anyone.
eglasius
+1  A: 
  1. Ask what needs to be done.
  2. Sort that list in order of priority.
  3. Code, test, and deliver the most important thing on the list; resist being interrupted while you're doing that: if someone tries to interrupt, explain that you're busy doing the most important thing, and that because you're concentrating on only doing that one thing it won't take long and they they'll be able ask you to do something else soon (this phase is called the "sprint").
  4. Once you've delivered, ask for the next most important thing to be done, and then do that, etc.
ChrisW
@chris nice thing you taught me. thanks. i will follow it.
Code 'N' Weed
+6  A: 

The keyword is Courage.

Courage to estimate and discuss your work

Courage to start work on small stories with insufficient detail

Courage to talk to customers to elaborate said stories

Courage to constructively critique team members code

Courage to review your mistakes (in public) and learn from them

Courage to release "unfinished but good and shippable" code when it already delivers value.

Courage to stick to the agreed team processes when management has a bright idea

Courage to amend agreed processes in team when a better way is found

Courage to deliver high quality code using test driven development and continuous integration.

...

Note: The unfinished part does not mean "low quality", it means satisfying the customer, cleanly implemented, tested, ship-ready. However falling short of the developers idea of perfection, i.e. spring configuration is a bit clunky, some refactoring can be made, some auto configuration, some speed improvement, some corner cases... I found that some developers take the "user story hostage" and keep it unshippable till it is perfect. If it is good, you should let go, better is for the next sprint.

Peter Tillemans
@Peter Thanks i will get the right courage hereafter.I have one doubt. I am trying to finish my work. But if i have not been able to finish my task in the time given. What should be my next step.I will continously work hard to finish it but how should be my mind set and what should i do in such cases where mistake is mine. i am not doing it wantedly. But it comes in my way.
Code 'N' Weed
You need the Courage to tell the customer/manager of your difficulties and discuss alternative solutions. Cut the task in functional pieces and deliver smaller BUT finished (as in release quality) pieces faster. Often the customer can deal temporary with a partial (but working) solution.
Peter Tillemans
@ Peter U opened my eyes. I will follow this definitely. At least a small piece of code should work in my given task in deliverable condition such that it will be useful for my customer. thanks a lot. I will be courage to speak. Thank u very much.
Code 'N' Weed
+1 I like this answer a lot :). Courage to deliver high quality code by using TDD and test automation as part of the development of each feature.
eglasius
Very nicely stated. I was just in disagreement on "Courage to release "unfinished" code when it already delivers value". Agile does not ever recommend you to release a potentially non shippable product. Unfinished sounds to me like non shippable. Maybe you are implying some other meaning by 'unfinished'. Please elaborate on what you mean by 'unfinished' so that it does not misguide people new to Agile. Thanks.
sjt
@sjt, I see your point and agree it was a poor choice of words. I mean the developer should have the courage when the story (or usable part) is ready,tested, shippable, not necessarily when the dev can no longer think of anything to do on the story. I added it.
Peter Tillemans
@eglasius thanks for pointing out the test part... you're right, this takes courage too. :)
Peter Tillemans
+1 @Peter Right on, was hoping you meant that :)
sjt
@sjt Thanks for the feedback and the opportunity to improve my answer.
Peter Tillemans
@Peter You bet.
sjt
+1  A: 

As per my understanding Agile development process can be put forward ( as already told by ChrisW & Peter :-) ), something like :

There should be agility/movement/progress in the work being delivered in the specified time.

You need to be :

1) Choose yourself/ get allocated by your boss, a task with an accepted period of time line.

2) Ready with a correct estimation of time for the bit of work to be handled and get an agreement on that

3) Every day have a discussion in the sprint/meeting(just for : 10-15 min.) with your boss/team and explain your goals/plans for that day.

4) It will be a best practice to not to get deviated from your bit of task until it is finished successfully otherwise it can disturb your time lines.

5) At the end-of-the-day, send a status across, of the state of work.

6) Once your task has completed, inform and get your next task pro-actively from your boss.

6) More important is, you try to accustom to the time-line based delivery without fail.

Siva Gopal
@siva nice explanations from you all. from my single question i learnt a lot and more.
Code 'N' Weed
Thank you and i too learned some tricks from other answers. :-)
Siva Gopal
@Siva Gopal: In other words, the same old crap.
Quandary
+3  A: 

What should be my first step in Agile programming?

Read the 12 principles of the Agile Manifesto over here. Understand and try to make sense out of each one and implement them as simply as they are stated.

  1. Although agile principles can be adopted individually, it should be adopted on an organisation level or at least project level IMO. Urge your Team and your project to use SDLC methodologies which are more agile like Scrum for e.g. If you adopt Scrum properly you will automatically be agile.

  2. As for Agile programming - Pair program, configure a Continuous Integration and Build system, use Test Driven Development, pay continuous attention to code quality and design best practices by doing Code Reviews, design discussions and have high unit testing code coverage.

sjt
+1  A: 

Doing this all by yourself is going to be very difficult. If you take the principles on the agilemanifesto site you'll see that at least 6 of the items deal with groups of people and teams. You're going to need some buy-in from your co-workers and boss.

I'd start with your pair partner. Ask for a turn occasionally. You could try something like so, "lets see if I undersdand this, can I try to add the next feature point."

That being said, there's a good Ghandi quote, "Be the change you want to see in the world." There are a lot of actions you can take by yourself to raise the level of your game. Writing tests, getting a continuous build working, set achievable goals that have some basis in past experience, refactoring.

There are also tons of books that will be very helpful to someone getting started. There's probably someone at your site who would like to mentor you. If you show you're interested in continuing to learn someone would likely be able to help you. Talk to your boss too. If he wants something from you he should be able to at least point you in the direction of someone who could help.

Paul Rubel