Archive for the ‘Programming’ Category

Code Coverage vs Test Coverage

When organizations mandate “code coverage” numbers, like 95%, they’re barking up the wrong tree. Just because a line of code has been touched during testing, doesn’t mean it’s been tested; you’re only fooling yourself. Every time I tell someone the last product I created had 93% test coverage, they say “wow, that’s great!”. Then my follow up statement is “Yeah, it sounds great, but bugs still crept into covered areas”.

Read On…

I was wrong about tracking actual hours in agile

I once made a statement about closing out project management tickets that went something like “The actual hours a story / task took are the only metrics that matter”. At the time, we had a ton hoops to jump through to close a story out due to our tooling choices. We ignored most of them, but the actual hours field was something I told the team I valued. My thinking at the time was this would definitively show us if we’re coming up with accurate estimates and if we missed our estimates, where did we spend that time. This would give us solid data points to use across sprints and act as a spring board for future planning sessions. In reality it ends up being fruitless and does little to build a better team.

I generally follow Scrum when doing agile with teams, but I’m not prescriptive about it in any way. “Whatever works for the team” is another sound byte you’ll routinely hear me say and along those lines is where I had my epiphany. Just like the agile process itself is about enabling the team, estimation and time is all about the sprint. “How many stories can get done this sprint” is the real question around how long something will take. That’s it. It’s a scheduling exercise to maximize effective use of planned time. It’s just an estimate! Where that time went during the story / task completion is immaterial. Sure, it makes for a good conversation during the retrospective and leads to a fancy spreadsheet some dude in khakis can email around, but tracking actual hours in agile does little improve the estimation process of the team and certainly doesn’t increase the teams productivity. If neither of those things are happening as a result of tracking actuals, then I submit it is a pointless venture.

 

Which Ruby Iibrary for a Static Website

I’ve been toying with the idea of taking on side projects, specifically helping people bring their web application ideas to market in the form of a minimal viable product. I have become very efficient at taking white board concepts and turning them into working software in a short amount of time. Production quality at that, not just prototypes or throwaway code. I’ve talked to a lot of people with good ideas that have similar problems, “I could get this going if I could only code!” Well, I think I can make that happen. First stop is standing up a static website for marketing.

Read On…

Where to Find the Best Ruby Libraries

I’ve been looking to update my full Ruby development stack and see what all the cool kids are using. I love when Rails Rumble wraps up and they break down what everyone used, it’s one of those dog food moments for the community. While it’s a great yearly pulse, it’s not a full look into the community offering to figure out what the best ruby libraries are. Ruby Rumble is a 48 hour competition, a MVP race if you will. Chances are there are many facets of development that go untouched in an MVP so their associated libraries go unaccounted for. At this point, people are interested in the fastest development library, not necessarily the best long term decision. So where can you go to see what’s hot, popular, or the most active? I know of two such places. Read On…

Being agile or using Scrum does not mean sitting in the same room

I had a troubling conversation about Agile with project manager that is transitioning into a “Scrum master” role. I used the noun version of agile since I live in the corporate world and if we cannot fit it into a box, it’s not enterprise ready. What made me pause was his immediate reaction to impose his understanding and view of Agile on an existing and copasetic team.

Read On…

Capistrano, SSH Keys, and multiple Git repos

I hate monolithic software. It causes so many problems when trying to be fast and agile when refactoring or rolling out new features. Just like the single responsibility principle in SOLID,  I like clean separation of project concerns too. This leads me down a path of having multiple Git repositories, which in itself isn’t an issue, but it does tend to get a little tricky when using a service like GitHub or Bitbucket that requires SSH keys for deployment. So, how do I handle this? Read On…

This sums up my experience with desktop Linux

Somewhat predictably, I rely on a Macbook Pro for work and play. I did Linux-on-the-desktop for years and years, before I finally got bored of the constant round of customisation, kernel recompilation, drivers and things just-not-quite-working, and made the shift to OS X. I’ve never regretted it! Virtualisation takes care of the need to run Linux occasionally.

I like to see what other people are running so I subscribe to “The Setup” and pulled that quote from Paul Tweedy. It rings true even today as I just installed Ubuntu on an extra machine I had at work and after playing with it for a few hours, I realized I could use it as my daily machine, but do I really want to bother with all the baggage that comes along? The answer is still no. Ain’t no body got time for that.

Automate The Tedious

Today I had to update a Jira project and add some 300 new versions to a project. If anyone has done this before, you know it’s a mind numbing copy / paste / click grind. So being the script monkey I am, I decided this was a job for Selenium IDE.

I wrote a simple script that would go to the admin page, click the version section, enter a version, then save it. I then did some RegEx on my cut/paste version list to wrap each version in that script. Saved it, and let er rip. Worked like a charm.

I had some snippets here but they were murdered by the formatting. I’ll add them back in at some point.