Archive : January 2009

The Not So Fine Art Of Estimation

What have I been doing this week? Estimating things.

Estimating potential jobs is critically important to a consulting firm. Estimate too high, and you don't get the job, estimate too low, and you're setting yourself up for client disappointment.

Complicating matters, the job is never specified in enough detail, and you really don't want to spend too much time putting the estimate together, because that's time spent not coding.

Even if you aren't estimating potential work, being a good estimator is a very useful skill within the ordinary work of an agile development team. Being able to specify how long your next task will take makes it easier to plan iterations and determine the status of the project as a whole.

So, in the grand tradition of a blogger writing things down in order to force himself into some more systematic thinking, here are some ideas about estimating.
Continue reading »

Topics:

How much Excel can we get in Flex?

...and why would we go around doing that when there are perfectly good solutions out there for online spreadsheets? For instance Google Docs in which I still haven't found a bug or a feature I'm missing.

Spreadsheets are necessary because people use them because they know how to use them. It is a straight forward interface that can yield good in high complexity situations.

Now most people want to use them online. And luckily there are plenty to go around.

Continue reading »

Chicago JavaScript Meetup Group draws a big audience with varied skill levels

Chicago JavaScript Meetup Group

The Chicago JavaScript Meetup Group spurred more than 50 of its members to brave harsh weather Thursday night for the group's fourth free get-together since its founding last October.

Organizer Vlad Didenko led the charge with an in-depth look at Firebug, while assistant organizer Justin Meyer contributed a discussion of Ajax fundamentals.

Continue reading »

deprec is good, but needs taming.

I recently had to work on some deployment tasks and used deprec gem to check out how it can help. deprec is one of the most admired gem outside of pure rails application deployment arena. It is one of the most successful attempts at demonstrating how capistrano can be used as a more generic deployment tool and not just for deploying rails apps.

However, there are a few design choices that I think warrants more thought if I were to continue to use it successfully for all my deployment needs.
Continue reading »

Further Beyond Zebra

Previously on Agile Ajax: I wrote about a complicated problem that went beyond ActiveRecord. I resolved to add a database column with pre-generated results to make the search logic easier. Commenters questioned my reluctance to use SQL directly.

I wanted to come back to this topic and talk about the process of creating and maintaining the pre-generated data. To reiterate the problem, I needed a report that would display:

  • All individual times for all swimmers within search criteria
  • The most recent relay time for a swimmer in each event, but only if the most recent relay matches the critera, otherwise don't show any relay times

The solution being pursued is to add a "most_recent_relay" field to the database and use that in a two-phase database search to display the report.

Continue reading »

Topics:

Scrum defined in under 10 minutes

Hamid Shojaee from www.axosoft.com put together a great video to introduce the core concepts of scrum and Agile practices called "Scrum in under 10 minutes"

Get Adobe Flash player

I really like what he said particularly the focus on the importance and simplicity of the burndown chart which helps to :

  • Visually show the hours remaining, and help anyone see "are we there yet?"
  • Allows decision-makers to make adjustments if needed

A simple burndown chart quickly shows the impact of some of the most common efficiency killers or blockers

  1.    late-breaking requirements changes
  2.    waiting for business decision
  3.    waiting for tech. partner (ssl keys, ops. vendor, etc)

He mentioned the standup, but didn't cover the 3 questions (What did you do?, What are you going to do? What do you Need in order to accomplish it?), or the idea that only people that have work can speak (Chickens vs. pigs)

I also liked his take on bugs, that you should plan a sprint to tackle them, and any bugs that come up during a sprint should be tackled immediately.

That's actually something that a lot of teams struggle with, "How do you plan for and estimate the time necessary to fix bugs?"

I always say Bugs Can't be estimated. While you may be able to plan how much time you will allocate to working on bugs, you can't really estimate how long it will take to fix bugs unless you have already looked at them, and have figured out the problem. From my point of view its the "looking at it and figuring out what's wrong", that takes the longest, and is the part that needs to be accounted for.

How do you plan for bugs?
Do you let bugs accumulate and then have a final sprint before a Release where you tackle all of the bugs? (How would you know that you can fix all the bugs in time for the release?)

Do you tackle all High-Priority bugs as soon as they come up, and leave the medium and small priority bugs for later?

Do you have a 'zero-bug' policy, where you fix any bugs that are opened?

UPDATE: I've expanded on this discussion a little more in a new post Bugs Can't be estimated, and after having some discussions around how best to plan for bugs, I was asked to do a last minute Security Analysis, and I wrote a post about How to avoid the last minute security review, and I think that the planning part can actually apply to how you manage a big list of bugs as well.

handling CRLF in git

If you use git on windows or cygwin, I am sure you've encountered this.

$ git add dir/newfile
fatal: LF would be replaced by CRLF in dir/newfile

While there is much confusion/discussion around how to handle this using core.autocrlf and core.safecrlf config attributes, I have lately settled with this recommendation:
Continue reading »

Topics: , ,

getting user.home in ruby

If File.open("~/etc/my_config_file") doesn't work for you, try File.open(File.expand_path("~/etc/my_config_file"))

Not sure, why File.open() does not handle this internally?

Topics: ,

ActionMailer Callbacks: In the Spirit of ActionController Filters

One of the most useful features of ActionController is the ability to add filters before, after, or around actions.  This tool is made even more powerful by the ability to chain filters together.  Allowing an AOP approach is indispensable for addressing cross cutting concerns (or simply separating concerns), and is one of the things which makes a framework valuable to a developer (Spring is an excellent example of this).

A while back, I had a requirement to persist a record of which email addresses were sent an email through the system.  I expected to find callback support for ActionMailer, but was surprised to find that it didn't exist.

I had three options: put the logic inline in each ActionMailer method which is not DRY and muddles concerns, put the logic in the ActionContoller as filters which break encapsulation in terrible ways (and is at the wrong layer), or extend ActionMailler to allow callback methods.

I choose the latter...

Continue reading »

A New President, A New Whitehouse.gov

Change has come to America, and so, too has it come to whitehouse.gov, the official website of the President of the United States.

One minute into the 44th Presidency, the website sports a radically new look (I'd love to hear how that was handled), and all the neccesary updates as a new administration moves in have already been made.   But the changes promise to be much more than cosmetic.  According to a statement on the White House Blog, Macon Phillips, the Director of New Media for the White House, "Millions of Americans have powered President Obama's journey to the White House, many taking advantage of the internet to play a role in shaping our country's future. WhiteHouse.gov is just the beginning of the new administration's efforts to expand and deepen this online engagement."

Efforts will be made so that whitehouse.gov "puts citizens first" through three main priorities.  Again, from the same statement:

"Communication -- Americans are eager for information about the state of the economy, national security and a host of other issues. This site will feature timely and in-depth content meant to keep everyone up-to-date and educated. Check out the briefing room, keep tabs on the blog (RSS feed) and take a moment to sign up for e-mail updates from the President and his administration so you can be sure to know about major announcements and decisions.

Transparency -- President Obama has committed to making his administration the most open and transparent in history, and WhiteHouse.gov will play a major role in delivering on that promise. The President's executive orders and proclamations will be published for everyone to review, and that’s just the beginning of our efforts to provide a window for all Americans into the business of the government. You can also learn about some of the senior leadership in the new administration and about the President’s policy priorities.

Participation -- President Obama started his career as a community organizer on the South Side of Chicago, where he saw firsthand what people can do when they come together for a common cause. Citizen participation will be a priority for the Administration, and the internet will play an important role in that. One significant addition to WhiteHouse.gov reflects a campaign promise from the President: we will publish all non-emergency legislation to the website for five days, and allow the public to review and comment before the President signs it."
Read the full statement

I may have visited whitehouse.gov three or four times in my life, but I'll be back quite a bit after reading this, excited and hopeful about the ways that the new administration will use technology to connect to the people.

Escaping the Iterative Development Trap

Mandelbrot Set

While designing software it's easy to fall into the trap of iterative development. Iterative development allows us to work quickly, exchanging rigorous requirements-gathering for rapid design and development -- and as good developers, it is our responsibility to make sure that the code we create now works well with future iterations of our program. However, I find that code created as part of this process can frequently be too complicated, too generalized, or both. When creating agile software we must keep in mind the requirements of the future, but design strictly for the requirements of the present. If we are snared by the trap of iterative development, we risk wasting time, money, and people on code that may not be useful in the future -- or, even worse, code that the client doesn't want and can't use.

Continue reading »

Topics: ,

OCMock: Handling Boolean Return Types with NSValue

iPhone in Dock

Testing your iPhone application, you may at some point in time need to stub a method call whose return type is a boolean (or some scalar value, or C based structure). The way to implement this (as described in a discussion on CocoaDev here) is to wrap the boolean in an NSValue using the OCMOCK_VALUE() macro defined in OCMockRecorder.h.

While this solution technically works, I find that doing this within the test class itself makes the test cases a little less readable along the way. Instead, I found it useful to extend OCMock to do this type of conversion for me, keeping my test code a bit cleaner as a result.

Let's take a look at an example by examining the set up for a simple test case..

Continue reading »

Book Review: Core Animation for Mac OS X and the iPhone


book cover

In Core Animation for Mac OS X and the iPhone, Bill Dudney gives a good introduction to the Core Animation framework and some of the slick ways that you can spice up a Cocoa app for Mac OSX or the iPhone. Its assumed that you know your way around Xcode, and that you know the basics of Cocoa programming. So if you are new to Cocoa you may want to have a copy of Cocoa Programming for Mac OS X handy, but you can get your hands on the code examples from Pragmatic Screencasts if you want to try and work your way through it.

The book gives a fair overview of the Core Animation framework, and helps to get you through some of the less intuitive parts. It quickly walks you through a few different examples of developing animation apps for the mac and then explains the differences and limitations of writing for the iPhone. I would also suggest reading through the apple docs which will help you understand some of the other tools available to you and also read more details on what you are working with.

Its a quick read, coming in at only 200 pages, and a lot of those pages are full-page images. Personally, I was hoping for a more thorough review and examples for the iPhone, and was dissapointed that there are only like 14 pages in the iPhone chapter, and 7 of them are a full page of a single image. (I think that might have something to do with the time the book was written and the state of the NDA for iPhone developers, but still I was disappointed).  You can get the pdf directly from the PragmaticProgrammers site, but you might want to check Amazon too.

Overall, I think the book gives a decent start to some animation concepts, and ways to improve your iPhone apps, but you might want to hold off on getting it now, and work your way through the existing docs and other sites first. I suspect the next generation of docs on this topic will have a much deeper review and will be worth the wait.

Now I’m looking for something that can give me a good overview of using OpenGL for the iPhone or something like Blender or Unity3d.

Related Services: iPhone Application Development, Custom Software Development

Launch: Pathfinder Newsletter

    Get a monthly update on best practices for delivering successful software.

    Subscribe via email


    Subscribe via RSS      RSS icon

Topics

Search

WordPress

Comments about this site: info@pathf.com