Finally someone has recognized this agile adoption anti-pattern. The agile community has gone from being risk takers who influence and embrace change to [INSERT_EXPLETIVE_HERE]
http://www.ibm.com/developerworks/blogs/page/ambler?entry=adoption_antipattern_we_re_special
I am a technologist who became test infected in 2004 and I have been trying to spread it ever since. This blog was formally titled "XP in Anger"
Friday, October 31, 2008
Wednesday, October 22, 2008
Dependency Injection Sucks
It depends. If you write terrible code it does.
http://googletesting.blogspot.com/2008/10/dependency-injection-myth-reference.html
http://googletesting.blogspot.com/2008/10/dependency-injection-myth-reference.html
Saturday, October 18, 2008
Calculating Capacity
If you have ever seen the film Office Space, you are familiar with the scene where the Bob's are interviewing Peter trying to find out how he contributes at work. In that scene he says, "I'd probably, say, in a given week, I probably do about fifteen minutes of real, actual work."
Did you laugh when he said that? I know I did, but it begged the question, how much work do I actually do in a day? If I do not know how long it took me to do something then am I really providing honest estimates?
Our team uses a simple formula to determine how much work we could do in a week:
one_week_capacity = (total_number_of_developers/2) * total_days * hours_per_day
total_number_of_developers/2? We practice pair programming. If your team doesn't then there is not one there to prevent you from slacking. You really are 50% productive.
total_days? Normally you have about 5 days in a week but you should not assume you will have 100% of your time available for working on production code or that your estimates where accurate. Calculate capacity using 70% of your work week (3.5 days instead of 5), that will allow plenty of room for incorrect estimates.
hours_per_day? Paring is usually maxes out at about 6 hours a day. The other 2 hours should be allotted to take breaks, respond to e-mails, attend meetings, etc...
Compare your estimates to your actual completed work every iteration. Once you are able to determine how much work you are doing, what you can do is easier to calculate. This computation has been pretty accurate for me over the past few years. Give this a try and let me know how it works for you!
Did you laugh when he said that? I know I did, but it begged the question, how much work do I actually do in a day? If I do not know how long it took me to do something then am I really providing honest estimates?
Our team uses a simple formula to determine how much work we could do in a week:
one_week_capacity = (total_number_of_developers/2) * total_days * hours_per_day
total_number_of_developers/2? We practice pair programming. If your team doesn't then there is not one there to prevent you from slacking. You really are 50% productive.
total_days? Normally you have about 5 days in a week but you should not assume you will have 100% of your time available for working on production code or that your estimates where accurate. Calculate capacity using 70% of your work week (3.5 days instead of 5), that will allow plenty of room for incorrect estimates.
hours_per_day? Paring is usually maxes out at about 6 hours a day. The other 2 hours should be allotted to take breaks, respond to e-mails, attend meetings, etc...
Compare your estimates to your actual completed work every iteration. Once you are able to determine how much work you are doing, what you can do is easier to calculate. This computation has been pretty accurate for me over the past few years. Give this a try and let me know how it works for you!
Thursday, October 16, 2008
Timeout::TimeoutError
This was annoying
def test_timeout_error
Timeout.expects(:timeout).with(any_parameters).raises(Timeout::Error.new)
assert_raise(Timeout::Error) {
some_crazy_code()
}
end
1) Error:
test_timeout_error(TimerTest):
ArgumentError: wrong number of arguments (0 for 1)
Here is the fix!
def test_timeout_error
Timeout.expects(:timeout).with(any_parameters).raises(Timeout::Error)
assert_raise(Timeout::Error) {
some_crazy_code()
}
end
UPDATE: WARNING WARNING WARNING
Do not use Timeout::timeout in Ruby 1.8! IT DOES NOT WORK RIGHT!
http://blog.headius.com/2008/02/rubys-threadraise-threadkill-timeoutrb.html
http://ph7spot.com/articles/system_timer
http://www.mikeperham.com/2009/03/15/socket-timeouts-in-ruby/
def test_timeout_error
Timeout.expects(:timeout).with(any_parameters).raises(Timeout::Error.new)
assert_raise(Timeout::Error) {
some_crazy_code()
}
end
1) Error:
test_timeout_error(TimerTest):
ArgumentError: wrong number of arguments (0 for 1)
Here is the fix!
def test_timeout_error
Timeout.expects(:timeout).with(any_parameters).raises(Timeout::Error)
assert_raise(Timeout::Error) {
some_crazy_code()
}
end
UPDATE: WARNING WARNING WARNING
Do not use Timeout::timeout in Ruby 1.8! IT DOES NOT WORK RIGHT!
http://blog.headius.com/2008/02/rubys-threadraise-threadkill-timeoutrb.html
http://ph7spot.com/articles/system_timer
http://www.mikeperham.com/2009/03/15/socket-timeouts-in-ruby/
Wednesday, October 15, 2008
Sorry folks!
I have canceled my VPS and am in the process of transferring all of my hosting to Google applications. I will miss you Rimuhosting however one day I will come around to slicehost.
Monday, October 6, 2008
Java is not Object Oriented.
Dave Thomas has made some interesting statements about Java being a class-oriented programming programming language but here are a few interested blog posts about it being "Library-Oriented":
Neal Ford on http://memeagora.blogspot.com/2008/10/library-oriented-programming.html
Eric's blog http://www.lispcast.com/drupal/node/55http://www.lispcast.com/drupal/node/55
Neal Ford on http://memeagora.blogspot.com/2008/10/library-oriented-programming.html
Eric's blog http://www.lispcast.com/drupal/node/55http://www.lispcast.com/drupal/node/55
Saturday, October 4, 2008
Subscribe to:
Posts (Atom)