Wednesday, August 11, 2010

Craftsmanship Swap with EdgeCase - Day Five

Here is my belated report on day five of the craftsmanship swap with EdgeCase.

I continued to pair with Mike, but on a different project. We decided to use Emacs that day.

One feature that we were developing needed to be refactored and simplified, but we made the conscious decision of finishing it with the current code design first, and then diving into the refactoring afterward. That paid off greatly because the refactoring took very long and we did not have time to finish it by the end of day, yet we had a tested and functional version of the feature.

Friday happened to be a day when employees wanted to grill hand-tossed Pizza outside. That was fun as it involved helping out in the process (think team building) as well as having interesting non-programming conversations.

The day was ended in the music jamming area where Mark, Kevin, and I attempted playing metal, rock, and pop music.

I would say the swap was very good overall since I got to experience tools I was not used to such as Rails.VIM and Emacs, new processes such as relying on Cucumber fully for integration testing without writing controller tests, and new cultural habits such as playing music and grilling pizza at work. :)

In the future, if anyone is interested in doing a craftsmaship swap with Obtiva, visit our website to get the contact info (and mention this blog post).

Thanks to EdgeCase for their hospitality and good luck to everyone on their craftsmanship journey.

Friday, August 06, 2010

Craftsmanship Swap with EdgeCase - Day Four

Here is a report of day four of the craftsmanship swap with EdgeCase.

I continued pairing with Mike till we finished the story we were working on and another one we picked up in the morning. I got to learn plenty more VIM shortcuts in the process.

Also, I talked about the importance of presenting alternative UI designs to stakeholders when unsure about what to build instead of asking them to tell us what the design would be. Otherwise, you may find yourself committing to a suboptimal design by a non-designer.

Lunch was catered by Qdoba and Matt Yoho gave a talk on his Rails plugin BasicAssumption. It tries to improve on DecentExposure's syntax and features. Both plugins help developers avoid abusing before filters in controllers to load models as their reliance on instance variables often leads to fragmented code that is difficult to trace. BasicAssumption provides a DSL for defining action-needed models, handling the memoization and definition of model retrieval helpers automatically.

After lunch, Mike and I moved to a different project and decided to use Emacs for a change. Had some interesting learning on jQuery, credit card processing with Braintree, and credit card security concerns.

Also, discussed issues with overuse of branches in source code control instead of the Agile practice of continuous integration on the main branch (as with the famous SVN Unstable Trunk strategy used with most open source projects). And, I emphasized the importance of having Staging be deployed off of the same branch from which Production is cut to perfectly simulate production instead of having Staging live in its own branch, thereby defeating its purpose.

After hours, I went to the music jamming area with Mark Peabody and we got to play some songs with him on guitar and me on drums. Mostly 90's classics like In Bloom by Nirvana, and When I Come Around / Welcome To Paradise by Green Day. It was a blast.

Stay tuned for day five, the last day of the craftsmanship swap.

Wednesday, August 04, 2010

Craftsmanship Swap with EdgeCase - Day Three

Today was day three of the craftsmanship swap with EdgeCase.

I got assigned to a new social networking Rails project where I would be pair programming with a new guy called Mike.

The first difference was that Mike's tool of choice was VIM, supercharged with the "Rails.VIM" plugin. Using it was quite a pleasurable experience compared to using a plain VIM as it provides a lot of IDE-like features that I get from RubyMine and Aptana, such as autocomplete, quick lookup of classes, and most importantly class/method instant navigation with support for going backward/forward like using a browser.

Also, I got to write tests in a more recent version of Cucumber with support for navigation in JavaScript driven UIs.

In addition to resolving a big, and performing a nice cleanup refactoring, we finished the first part of a new feature test-first, which we will continue tomorrow.

At the end of the day, we went to the music jamming area. My pair grabbed a guitar and I sat on the drums and we jammed briefly before Matt showed up and we all left to an evening outing at a nice bar/restaurant called Bodego near downtown Columbus, Ohio. We got joined by a couple of people from Relevance and had interesting conversations on software development, processes related to source code control strategies like SVN's famous Unstable Trunk, and the demise of Google Wave and older chat technologies like ICQ.

That's it for today. Stay tuned for day four of the swap tomorrow.

Tuesday, August 03, 2010

Craftsmanship Swap with EdgeCase - Day Two

Today was day two in the craftsmanship swap with EdgeCase.

The day was kicked off with a typical Agile stand-up meeting attended by local EdgeCase employees, employees in Scotland, and Ruby luminary Jim Weirich from Cincinnati.

Afterward, I got to pair with John on a new feature related to payment processing, which we finished by the end of the day.

Highlights of my learning while pair-programming with John were:
  • Learned how to use let(:method_name) {value} in RSpec tests to write more expressive tests without relying on @ instance variables initialized in before :each blocks
  • Learned about the Emacs Yasnippet plugin that allows building expression expanding macros (e.g. typing do and then hitting tab expands it to a do end block with the cursor placed in between) Since I appreciated this feature quite a bit in Eclipse, it was nice to have it while pairing with John, and we even built our own snippet at one point
  • Learned how to use the Braintree payment processing library in Ruby, which makes it easy to accept credit card information securely


And, at the end of the day, I got to play on the drums in the music jamming area.

Stay tuned for day three tomorrow.

Monday, August 02, 2010

Craftsmanship Swap with EdgeCase - Day One

Today was the first day of my craftsmanship swap with EdgeCase.

The first thing I noticed when I got there was that their building is in an extremely green and tree surrounded location that makes it feel like you are programming in the forests. Beautiful scenery.

The second thing I noticed when I walked in is they have a room with music jamming equipment consisting of a few guitars and a drum kit. Since I have been recently wondering about the idea of a company having a jamming room for employees to release stress in, it was a pleasant surprise to see that implemented.

Now, regarding the work environment, it was a basic agile setup with big screens and dual keyboards to facilitate pair programming.

I started today by pairing with John on a Rails app that is deployed on Heroku, uses Amazon EC2 to run some background workers and scale automatically, and relies on RSpec, Haml, and other popular Rails libraries.

John prefers using Emacs, so I finally got a taste of using it practically on a Rails project, and I enjoyed learning new shortcuts and reaching some level of comfort with it by the end of the day.

John and I got to resolve an issue and make progress on a feature on Day One.

I am looking forward to more pairing at EdgeCase tomorrow, so stay tuned for my next blog post on the craftsmanship swap.

Sunday, August 01, 2010

Craftsmanship Swap with EdgeCase

Tomorrow will be the first day of my Obtiva Craftsmanship Swap with EdgeCase in Columbus, Ohio.

The swap will last till the end of the week, and I will be blogging every day about my experiences over at EdgeCase. My posts will cover technologies, practices, and culture.

In the meantime, Adam McCrea from EdgeCase will be hanging out at Obtiva for a week too as part of the week long swap.

I look forward to the knowledge exchange between Obtiva and EdgeCase.

Stay tuned for the upcoming blog posts this week.

Update:
Day One posted.
Day Two posted.
Day Three posted.
Day Four posted.
Day Five posted.