Learning how not to use “AND” or “OR” condition while you are breaking down the tasks
_), Suddenly this topic came out, i think it is one of the important
issues to keep sprint task simple and easy to accomplish and
estimate.
i was about to write this sprint backlog task for my pet project
(http://welltreat.us)
“Email notification should include review content Or comment content”
so while i was writing it down, suddenly this thing poped up!, how
about if i break it down and accomplish part by part, since
technically it states two tasks in one sentence. also more preciously
i can’t work on the different tasks at the same time.
so, if you break it down you might see the following tasks -
1. Review notification email should have user’s review content
2. Comment notification email should have user’s comment content
Now it came up with more implementable units.
from my personal observation, i found breaking down task to very small
implementable units make it very easy to discuss, implement as well as
test.
moreover usually very small unit of task is easy to implement a day,
which gives developer better satisfaction. because you have completed
some tasks.
psychologically it helps to build confidence and GUT on the their
ownself, which is very important to keep their motivation level high
to bring coolness and WOWness with in the team.
already posted in agile bangladesh group
best wishes,
see you guys in ruby on rails seminar on 13th (10 am) at basis
conference room
_)
OpenAgile and related stuffs!
Posted in agile bangladesh group
Guys!
can anyone enlighten me here? i’ve read an article yesterday on OpenAgile,
which actually drew my attention, you can read it here
it seems to me a combination of lean and scrum, they kept nearly synonymous terms adhered from scrum world.
so far i can understand, they want to keep it open and collaborative. where scrum is religiously maintaining all related practices & terms otherwise inferior complexion is created through ScrumBut.
here is a peek from the blog -
….Another major difference between OpenAgile and Scrum is how the community operates. OpenAgile is an open-source method that has a specific structure for community involvement that allows for continuous improvement of the system. Scrum is closed. It is closely managed by it’s founders and this has led to challenges with the method becoming dogmatic. OpenAgile is meant to constantly evolve and grow…..
so it seems like OpenAgile will be an openly accepted ScrumBut. Sounds to me cool! again,
i wish they will keep it as thin and more adaptive like lean (3 processes) & scrum (8/9 processes)
from my understanding, prescriptive process is always rigid and provides less option to adapt companies own branded culture thus it might fail or irritate everyone. or it might ended up with cloning the same formal attitude.
probable this is the reason why most of the creative companies create their own way to ensure everyone get’s chance to be creative.
on the other side, less prescribed process such as lean can motivate you to learn how to do better in what situation. gradually it helps you to come up with your own process.
but one problem might happen, people used to pretend they understood the principles very well, in reality, they actually didn’t get it. thus they miss use it. hence it becomes burden and becomes unstable.
it seems me, like writing all logic in View rather not understanding why MVC (model view controller) and why those separations are needed. MVC got very few principles (only 3 infact) but you got bunch of other practices adhered from community, design patterns and technical prophets (mentors
_)
best wishes,
Ruby process & ActiveRecord data set executing in multi cores
You know what! in one of our (tekSymmetry LLC) projects, we have so many background calculations,
which usually takes so many hours to get fully completed. ever since we have introduced those processes,
we were having problem with it’s execution time. sometimes it get’s in nerve
as you know a single ruby process can use a single processor’s core at a time.
this is probable one of the reasons why muli processes based deployment
strategy is picked by ruby on rails community.
anyway, these days our servers got more than one core! more precisely,
in our case each of our production server got 8 cores based intel xeon processor.
so you see the question rose if we could run those long running expensive process in multicores
our system could have better chance to get faster!.
well this blog post is intended for showing you the technique how we have done it in ruby on rails.
for better understanding, let me give you some hints so you can get the context -
- we have big database table rows!
- processing a single row doesn’t require anything from the same database table.
- we are using linux (in our case debian lenny)
so here is the way we have done it -
- we took the max rows count for the main query
- and divided by the number of cores we have
- then we forked child process with each subset of the rows
- and executed the logic and related stuffs!
- on the parent process we initiated a loop where it was checking the newly forked process status
- if all the pid files (which are generated by the newly forked children) are removed,
parent process will flag it as successful execution thus it will end the loop.
so you see, it is damn! simple
_) and it is working for us
_),
it has improved our execution time 8x faster, because of getting 8 cores in new server.
here is the code in ruby how we did it. (we created a helper “multicore_execution_helper.rb“ and included in model, thus execute_in_multicores became usable)
1 module MulticoreExecutionHelper 2 3 def execute_in_multicores( 4 p_cores, p_total_rows, p_model, p_conditions = {}, &block) 5 6 p_cores == 2 if p_cores.to_i == 0 7 total_items_per_core = p_total_rows / p_cores 8 logger.info "[BATCH-PROCESS-LOG] Total processes - #{p_cores}, " + 9 "total rows - #{p_total_rows} [#{total_items_per_core} / 1 core]" 10 11 # Create job id for each process 12 job_ids = p_cores.times.collect{|i| rand.to_s } 13 14 # Fork process for each core and execute the block 15 p_cores.times do |offset| 16 Process.fork do 17 logger.info "[BATCH-PROCESS-LOG] Starting thread - #{offset} " + 18 "assigned # #{job_ids[offset]}" 19 20 # Keep job track through the created process pid file. 21 pid_file = File.join(RAILS_ROOT, 'tmp/pids/', "#{job_ids[offset]}.pid") 22 File.open(pid_file, 'w') {|f| f.puts Process.pid.to_s} 23 24 # Since fork process is created from the sample of the parent 25 # process's memory so we need to reconnect all live connections. 26 begin 27 ActiveRecord::Base.connection.reconnect! 28 29 # Retrieve data from the specific row through the defined 30 # offset and limit 31 teams = p_model.find( 32 :all, { 33ffset => (offset * total_items_per_core), 34 :limit => total_items_per_core}.merge(p_conditions)) 35 36 block.call(teams) 37 rescue => $e 38 logger.error "[BATCH-PROCESS-LOG] Exception raised during " + 39 "execution - #{$e.inspect}" 40 end 41 42 # Remove pid since we are done here! 43 FileUtils.rm(pid_file) 44 end 45 end 46 47 # monitor whether the process is completed or still in progress 48 # don't return this method unless all the forked processes have 49 # completed their job 50 sleep(2) 51 52 while 1 do 53 fully_completed = true 54 for job_id in job_ids 55 pid_file = File.join(RAILS_ROOT, 'tmp/pids/', "#{job_id}.pid") 56 if fully_completed && File.exists?(pid_file) 57 fully_completed = false 58 break 59 end 60 end 61 62 break if fully_completed 63 sleep(2) 64 logger.debug '[BATCH-PROCESS-LOG] again...' 65 end 66 end 67 68 end 69
here is the usages code -
143 execute_in_multicores(p_total_cores, SomeStuff.count, SomeStuff) do |some_stuffs| 144 # Do.. whatever you wanna do with the stuff here! these are gonna run on multicores! 151 end see it is really simple!_) if you like it let me know! how much you like it
_) here you can find the code on github best wishes!
In response to motivation beyond career kick start (on agile bangladesh)
Nice post indeed! really loved the topic!. thanks for the post!
I liked riasul bhai’s comment, it explains a lot.
in 2003 i kicked started my IT career doing part time web development job in a company,
i did my secondary and higher secondary school in commerce faculty as my dad wanted me to study further on commerce.
after completing my higher secondary school, i was suppose to choose my business college to complete my under grad.
at that time i took the risk i invested myself. ate my own fear and kicked myself to ignite.
though everything happened without my own concern (because i was really loving the way it was moving on),
i started studying in IT college later i hated and dropped out. as i was getting an impression
that i’m studying to let someone certify me. as i don’t wanna be certified by other as i will be certified by my own creation.
lastly, i told my dad “i’m not chasing your dream i’m chasing mine”. since then i felt like i am “working for fun”.
money or financial improvement is byproduct. money was never my motivational factor where it does for my parents
since they are not from IT background and they can’t measure how i’m progressing.
i guess this is very common challenge thus most of the people can’t control their temptation, so they move company for better salary or financial benefit.
i again ditto raisul bhai’s opinion, many people think money is the factor but it’s not exactly the reason to leave a company,
as long as company environment has enough fun and challenge to live with.
i saw many talents want to settle early in the life and they dream the same thing as zillions of the other people do on earth. (i.e.. getting married, having kid, own apartment, car and bla bla)
i think this should be changed, guys should have more passion on learning and patience for climbing up to the peak of the intellectually hill.
guys!, just chase your own dream, just wake up be what you dreamed and dared to be
_) just have fun! be your own idol be the icon for others.
money can buy so many stuffs, but it can’t buy what you have dreamed about.
we need more passionate coder (architect coder), passionate product owner (who just love to interact with client and team to build the better software), passionate scrum master (who just love to facilitate people)
i think company needs to care about few responsibilities -
1. company should grow up
2. Be trustworthy, honest and earn your respect (as a company, brand, manager whatever)
3. they should treat developers (programmer, tester, designer) as human not machine
4. they should pay them the fair amount of salary so they don’t have to be concerned about it.
5. they should facilitate them placing themselves on their side.
6. they should build relation rather not employee and boss culture
7. they should help to create an environment where everyone (even the newly joined one) can speak out loud enough to be heard.
so everyone knows where is the frustration hides.
8. they should help to create an environment where people never backstab rather they speak face to face and help the colleagues to be better human, better team member.
9. management should be the first team who demonstrates their accountability then expect everyone to do the same.
best wishes,
btw, this is my birthday writeup
_)
On Dec 20, 10:17 pm, Mostofa wrote:
> Well ..
>
> When you started off your career in IT what motivated you to choose a
> company ?
>
> Was it the salary or something else ?
>
> I had some negative experience on this recently and would like to know
> what others think .
>
> regards,
> Mostofa
Original thread on agile bangladesh group
Maintenance sprint and visualizing progress over Whiteboard
It’s quite a long time, i haven’t shared anything over my blog. after thinking a while, i decided to share about our maintenance sprint.
since we have been (tekSymmetry) moving from traditional project management to agile project management. as usual we are struggling and learning through our faults and adjusting, adapting and correcting accordingly to accommodate agile in our family.
agile project management seems very simple in theory and easy to transform but in reality it has so many mental and understanding related conflicts which we are stucking and discovering. yes we should have followed this and that.
for those who just started and don’t like to get in argument. you just start with scrum first, & follow all prescribed processes (learn through adapting approach.)
after working on our project for last 7 months and completing more than 20 full and short (in our case, full = 2 weeks, short = 1 week) length sprints. we reached to a point where we are feeling much confident with our process adaptation. here i will demonstrate how we are managing our maintenance sprint. definitely our way of managing sprint won’t be the best solution for every contexts.
what is maintenance sprint?
before i proceed, i should explain what is meant by maintenance sprint.
here in the picture, you could notice few greenish circles, which we call maintenance sprint. maintenance sprints are planned for supporting a release with related bug fixing. as you know most of the software releases don’t come up with 100% bug free, it comes up with lot of known and unknown issues. to protect our visitors we keep maintenance sprints to provide continuous updates and hot fixes (;)).
how are we doing the maintenance sprint ?
Usually we are doing the following tasks during a maintenance sprint -
- Product owner prioritize the issues and provides us the list
- Sprint planning meeting with client
- Team select implementable issues
- Product owner can reshuffle and prioritize issues before sprint kick starts
- After everyone agrees (team and product owner) team tags all issues (in issue tracker) with the target release version (ie. 0.12.2)
- Daily team stand up meeting
- Team provides feedback on client’s reported issues during the day time.
- Daily reporting (we call it end of the day report)
So, how are we utilizing the white board ?
well, first let me show you our white board -
Global TODOs:
During the sprint day, this portion of the board is synchronized and maintained. we usually enlist the following topics -
- Major issue
- Task which requires feedback
- Impediment
- Any events which requires our (team) attention
- Any collaboration requirement (ie. need feedback ASAP on issue #2034)
- Any issue which we need to remember. (ie. Send report, deploy before leave the office)
- When tester finds problem during testing, they write it down on the board with red pen
- Every day during stand up meeting we write down all events/tasks/todos on the board.
Status BOARD:
This portion of the board is similar to scrum task board, instead of putting sticky paper we use marker to write down the issue number.
when we make progress we move issue from WIP (work in progress) to WFF (waiting for feedback) or WFT (Waiting for test). later our tester moves them to DONE. actually, rather moving physical sticky paper we wipe out the previously written text and write it again on the new column.
this board is maintained through the whole day. whenever we take new task we add it on WIP and when our task is completed, we move it on Waiting for test queue.
we follow the following rules -
- per person only one WIP (work in progress) item can be selected. (taken from kanban)
- whenever we make progress it will be reflecting the board (developer wipe out from WIP and move to next status)
- tester keeps his eyes on “test” column of the board, they eagerly wait for the change on this column
- if tester finds some problem with the issue, the write it down on “global todos” portion of the board in red pen.
- developer can retake any issue (if tester reported not resolved over “global todos”)
- during stand up meeting development team can discuss which issues need to be resolved first.
Daily report:
At the end of the sprint day, we generate a report from the board and send them to every stakeholders, clients & management. we keep this report very simple we add the 3 parts in the daily reporting -
- what we have resolved
- what we working on
- what we have tested
all of these resolved issues are deployed in test server so our client can review them.
we found this is very collaborative and simple. more over it has less overhead to manage. it is so visual that daily (end of the day) reporting is not restricted to any specific person. anyone can do it.
best wishes,
(agilebd) how are we adopting agile in our companies?
Hi,
thanks for initiating this thread, i will write about my experience on adopting agile.
this is my second company where we are in a transition from waterfall project management to agile based project management.
as you guys can pretend we have so many things to put together to make it easy to understand to those who none believers.
i am very very happy because of the positive and more agile attitude from management bench.
more over management has realized we have to be more picky while choosing client.
fortunately tekSymmetry (our company) is working with those clients who really love us seeing our open collaboration, more friendly attitude and honesty.
our belief is, “we don’t think client as our client we rather think them as our partner” we assist them to get smile on their face at the same time they are helping us to be happy being with them.
to help or accelerate adopting agile we had to do the following stuffs
- after stand up meeting we submitted daily (when sprint is running) “sprint burndown chart” and “sprint backlogs” to the management (management got more curiosity seeing more communication and transparent activities with in the development)
- simplified deployment process, (didn’t setup CI because we wanted more controlled environment, specially i wanted to understand the team and team attitude first)
- initially i had to prepare product backlog to demonstrate how to use it.
- joined with the development team and involved myself in coding
- understanding the development team and management team very closely to figure out how you can be part of their achievement. (thanks to management because they rather helped me a lot and made so many things easier for us)
- my personal preference is “no give up policy, all human beings are similar possibilities”, i have been working closely and motivating each and every team members.
- helping them to understand they are not away from the standard and smartness.
- initiated “after sprint technical session”, (our talents prepare their presentation and present them to everyone, perhaps someday we will invite audience form many of your companies)
- ran 6 sprints being scrum master, showed them how to manage sprint backlog, how to keep it up to date, available time commitment and daily stand up
- built new scrum master who is now facilitating the core division of the team (we separate the team in two major divisions, core team, new feature team)
- helping him to realize scrum master is not someone who command, rather who “listen and suggest” with soft voice. more preciously he has to eradicate all those blocking issues which interrupting the team.
usually we keep the following stuffs on our scrum
- generally (8 development days, 1 sprint planning and 1 sprint review meeting) = 10 days
- bug fixing sprints are usually 1 week span (4 days work + 2 meeting) = 6 days
- retrospective meeting is organized after sprint review meeting, we used to go for lunch with the team to discuss about “what wasn’t good, could be improved”
- scrum team consists of developers + testers/qa + (soon we will add up designer too)
- test cases are prepared and delivered before any developer take commitment on any feature (though sometimes we can’t get everything before we kick starts coding)
- developer don’t practice test driven development rather they practice “validation driven development” (VDD
_))
- i have practiced feature driven release on my previous company
- here we are practicing timely and feature driven release on new company (not yet released anything)
challenge i have faced
- motivating and showing team members their own career path
- helping team to understand the agile way instead of liner way
- making continuous productivity and hyperactivity understandable
- cutting the last moment hero rather making the team as a whole as hero
advantages i have found
- both of the companies where i have introduced agile, (somewhere in… and tekSymmetry) from management perspective view they had agile mindset
- management values human over process
- management is picky about choosing the right client with similar mindset.
btw, feeling constant headache, perhaps that is the reason beyond this
big email
_)
best wishes,
this email was sent and published under agilebd (bangladesh agile) group
Scrum: How to understand stand up and burn down is effective ?
Scrum burn down chart and daily stand up meeting are the most important part of the scrum process to keep the team on focus. Scrum is good on bring transparency in development process. With utilizing better engineering practice like test driven development, continuous integration we could keep our productivity and fun on the same line.
If you are one of those people who are wondering
What is called “stand up”?
I have a brief for you.
On the picture you could see, there are few people who are standing up and discussing about the following 3 topics -
- What i have done yesterday!
- What i will do today!
- Where i have been stucking!
This is a required daily meeting where 10 minutes are spent together with all team members, this meeting is used to adjust the tasks among the team members also to monitor the current status.
Later this meeting is followed by a burn down chart which is attach on the wall or send through email to everyone or upload on some place which is visible to everyone.
What is burn down chart ?
Burn down chart is a graph which is used to visualize how much hours work is left in an iteration (sprint). on the illustration you’d see a white line which is visualizing average burning hours per day. If we have planned for 180 hours tasks for whole iteration. Average burning hours should be minimum 180 / 8 days (if you have 8 days span sprint) = 22.5 hours to keep us on target.
The green line is visualizing the real team progress, you see this is not always up to the base line. It is moving up and down thus we are determining how the team is performing. If this green line is too upwards from the base line it means we are behind the schedule if that goes far below from the base line that reflects bad planning.
How to understand your team is understanding them?
I found the following symptoms to understand that our team members are understanding the importance -
- Everyone attending daily stand up on time.
- Everyone feeling responsible and notifying before they get late in office.
- Everyone eagerly reporting their status and taking commitment for today
- Team members are feeling guilty if some of them didn’t complete the commitment
- Everyone eagerly waiting to see the change in burn down chart
- If burn down shows some upward progress everyone get concerns and work hard
- Everyone feeling proud of the progress which shows in burn down.
- Everyone working every day not waiting for last moments push.
- Everyone keeping their daily commitments
- When burn down curve is not moving too upward or not falling too downwards.
Most important change in scrum is your team doesn’t need to work over night or over weekend to keep progress around the base line. (i will later discuss about how iterative and incremental planning can help). Fortunately we have discovered these changes on our current team.
The most important thing is feeling the “team way” which we are missing in most of our teams, I guess utilizing the tools and process like scrum that can be improved a lot.
best wishes,
How do you manage your url in php application ? (for CodeIgnitor guys)
Recently i had a post in phpexperts group where i wanted to emphasis on managed url. hard coding url is not a good practice besides it ended up with lot of changes on tested code.
Hi,
It has been long while since i last post here in phpexperts group, well i was
away from php for pretty long, being more java and ruby on rails guy when i got
chance to help few php projects, i borrowed few more neat and nifty design
concept from rails to php.well let me tell you about the story of stories, i ain’t treat myself as php
expert anymore since being detached or keeping my ass out of it. i’d prefer to
call myself as the expert of “work for fun”.before digging into the details let me explain what was wrong and what could be
wrong with your current way of using URL through out the php application (web
site)-> Karim, he is given a task to develop a beautiful WOW WOW application in php,
-> He is very WOW WOW developer, develops everything on the fly, produces
(TR/Z/B)*illion of bugs on the fly as well.-> Very promonient developer, he knows how to write php along html, after
hearing several good advices he started giving CodeIgnitor a shot.-> So he used to write the following kinda code in everywhere -
<a href=”<?= site_url(“user/profile/10″) ?>”>My profile</a>
Now if you get a chance to look into his view or controller codes, you might see
in everywhere he hard coded the url pattern.what the hell is the URL Pattern?
well, you see “site_url(“user/profile/10″)” this code is expanded to
“http://abc.com/user/profile/10” while you execute your code in php. this
“user/profile/:number” is called url pattern.everywhere in his code base he kept such hard coded url pattern.
let’s imagine his client or boss or team lead ask him to change the url pattern
“user/profile/:number” to something similar “profile/:number/”.now tell me what would YOU DO? if you were placed in such situation?
well you know if that guy was me, i’d run a string replace command through out
the whole project. so wherever i wrote “user/profile/:number” url pattern that
would be converted to “profile/:number”something like this – /site_url\(“user\/profile\/(\d+)”\)/ replace to
site_url(“profile/$1″)well i guess many of you already have such problem with similar solution
frankly speaking we had similar problem thus we came up with some solution where
we can change URL pattern without modifying existing view or controller code.here is the evidence -
<a href=”<?= $this->url->profile(array(“username” => $user_profile->username))
?>”>
<img src=”<?= $this->url->avatar(array(“username” => $user_profile->username))
?>” />
</a>you see, we ain’t hard coding any url anymore, rather we are calling a function
which are automatically generating from the following kinda configuration -
$urls["profile"] = “http://:username.:host/community“;
$urls["avatar"] = “http://avatar.somewherein.net/avatar/:username/for/aawaj“;
$urls["logout"] = “logout”;i am pretty sure you guys are smart enough to figure out how we did that, let me
know if you need any help about how we did that.well first you try yourself and tell me how we did
![]()
read the rest of the thread here
you can find out solution here
best wishes,
work for fun!
i always got that attitude
I have very bad attitude, i always love to add idea on whatever i touch. so when i have found this excellent wordpress template, i thought i should make it through my way. today i gave it a new look, i wish this won’t be bad on your eyes. thanks to rashid bhai for my face design and hasin bhai for hosting.
best wishes,










