Showing posts with label thoughtworks. Show all posts
Showing posts with label thoughtworks. Show all posts

Wednesday, June 13, 2012

The Wolf

Recently, I hit a personal milestone: a piece of software I wrote went out on my office's mailing list. It has been downloaded 17 times.

I've been writing little utilities here and there for years now, but I've never actually gone to the length of releasing something. When you do, a couple questions go through your mind:

  • Is this thing any good?
  • Is it actually useful?

Luckily, the first person I showed it to pushed it out to more people for feedback.

Problem

Expense reports are an everyday part of life for traveling consultants. The confirmation that they've been paid is emailed to us every two weeks in a giant Excel file with 3 columns:

  • Employee ID
  • Date Paid
  • Report ID

Most of us can't remember our Employee ID, and having to look that up requires a 2-step login. The noise of everyone else's Report ID can also be difficult to look past.

Solution

I really wanted to do two things with this utility:

  1. Not have to look up my Employee ID
  2. Not have to open Excel
I think I succeeded on both accounts. If you tell The Wolf to save your employee id, it writes a simple file to your home directory, and you never have to mention it again. By default, it will output the most recent reports paid with their date. Optionally, you can tell it to show everything of yours in the spreadsheet.

Ultimately time will tell how useful The Wolf is. The early results are good though -- the first person I sent it to loved that it churned through 3 years of expense reports in a manner of seconds, and omitted all the noise. Others have mentioned setting it up and its ease of use. I'm finding myself more and more motivated to release small tools that may help someone out.


Interested in more?

Sunday, March 6, 2011

Introducing SG Hill's Tidbits of Development

Wow! It's already March!

In what seems like the blink of an eye, we've gone through:

  • two project extensions in Los Angeles
  • significant progress on another application for said project's client
  • a theme park
  • faux Christmas carols in Colorado's Breckenridge
  • a personal project transition to GitHub
  • 200,000 miles on United, and 50,000 on American
  • significant fitness-related changes
  • ...and more
All without a single [Adventures] blog post.
Yikes!

Problem

For quite a while now, I've been spending a large portion of time on purely technical tasks. In some ways, this makes it more difficult to blog — at least in part because those interested in the content of this blog (read: virtually everything but code) may not necessarily be interested in how I've helped improve my project's JavaScript with a healthy pragmatic refactoring, for example.

I've increased my technical immersion over the last few months. As we can see with this fun chart below, the result is fewer blog posts.

Time Spent Technically vs Blog Posts

I'm learning more than ever these days in very specific, technical categories. This is in no small part because I have the unbelievable privilege of working with some of the best software developers and consultants on the planet at ThoughtWorks. My coworkers are often willing to help, but their example alone is enough to really help push me toward continual improvement. I'm frequently finding myself in situations where the code I've written two months ago is flat out embarrassing — which is most certainly a wonderful thing. These learnings don't quite seem to fit with the majority of the 77 posts that have preceded this one, however. A trap I've fallen into is a half-written post that never ends up published because it doesn't fit the flow this blog has carved out.

Solution

A great idea that was proposed by Sumeet Moghe at the end of TWU XVIII is advice I'm finally ready to announce I'm following: split into two blogs.

  1. Adventures in [Agile] Development
  2. Tidbits of Development

So, What's The Difference?

Good news! I've taken the liberty of creating a mindmap that was timeboxed to 5 minutes whilst traveling on an airplane.

SG Hill's ThoughtStreams

Rationale

All of the above adds up to why I've started a second blog, or created a dev branch, if you will. My intent is to have a code-centric corner of the world where I can write about improvements I'm making and hopefully get feedback on where to go next and how to make things better. As a secondary benefit, I hope to simply have a log that documents the progress of a young developer, if for no other reason than I wish there was something similar I could read while in school.

Fun Fact Cronotrons may one day be the official unit of time estimation.

Wednesday, November 17, 2010

Hooray! TWU-Developed [Internal] Application Launches!

It feels like just last week I was headed to India for TWU XVIII. I remember being nervous for the flight and eager to start our internal project. The previous batch began development on our web application, which was built for chronicling the experiences of ThoughtWorkers all over the planet.

My batch took over in August and headed up another four weeks of development. The initial goal was to launch just before our departure. Ultimately the launch was pushed back and development work was handed off to the members of TWU XIX.

Today saw that application go live.

I'm extremely impressed with the work by the last batch. I'm extremely proud of these three new classes of ThoughtWorkers, and feel honored to have been a part of this project. To see something you've worked on go live is incredibly satisfying, to say the least.

Learnings

I learned more than I can count on this internal project. To be effective, we had to dive in deep to the following technologies.

My favorite technical accomplishment on this project was implementing flash scope (as in Rails) in the Spring MVC framework. Prior to this implementation, we were passing around query strings for absolutely everything; that simply didn't feel appropriate.

It took a lot of learning on my part along the way to flash scope -- including how to implement a listener, filter, and Java annotation. The end result was a far better solution for the application and one that was reused several times in places where query strings just didn't make sense. I'm so very happy to have had the opportunity to push my knowledge and contribute to a delivered product.

Thanks!

So many people are to thank for this moment of accomplishment. Sumeet Moghe has put together a truly world-class training program. The real-world experience has helped me in immeasurable ways on my current project and is a far more effective way of learning than solving small problems from textbooks. Our trainers were wonderful as well, bringing their global experience into the classroom and project setting. I had the opportunity to work with young developers like myself from Australia, China, India, and the US.

Fun Fact query strings are attached to the address of a webpage. If an error were to appear on this blog with a query string, it would be shown in the address bar. e.g. -

http://sghill.blogspot.com?error=CommentTooLong

Clarification The app is not public facing, which is why a link doesn't appear in the post.

Monday, October 4, 2010

Welcome, TWU XIX!

Less than two months after the start of my Indian adventures we're set to welcome a new batch to Bangalore. TWU XIX had it's first day today with four Chicagoans. The good news is at least two of them will keep the proud Chicago-blogger tradition alive.

If you'll recall the start of my adventure, I headed out on a flight halfway around the world on my second day. Fellow Metro-Detroiter Damon has topped me, I believe; he moved to Chicago just three days before hopping a plane to India. You can follow Damon at his blog Training in Bengaluru.

Nan was also scheduled to leave with Damon. There was a visa issue that delayed things a bit, which ended up being quite a lot of fun.

Welcome, Nan!

As we waited for the visa to arrive, we covered some awesome subjects like Java and Test-Driven Development. It probably goes without saying, but we also covered the ever-evolving topics of fashion and styling. There's great news here as well -- Nan made it to ThoughtWorks University XIX and her adventures can be followed at her blog.

All the best to the new undergrads. I simply can't wait to hear about their experiences.

Friday, September 24, 2010

Graduates

Today was the last day of ThoughtWorks University XVIII. The schedule was fairly light.

Futurespective

After each iteration in a project, we reflect with a retrospective. The task for this futurespective was to imagine we were six months in the future, managed to be let back into High Note, and had completed a successful project. We wanted to write down what did go well and what didn't go well.

It's a pretty cool technique for getting the fears and risks of a project directly out of the customer's mouth. It's also a useful technique for realizing the fears of new and confidences of new TWU graduates.

Our successes ranged from completing the University to learning new technologies and successfully deploying products. Our imagined failures had a much wider range. We thought of things as wild as QAs (Quality Analysts) being eaten by tigers. More mundane shortcomings were brought up as well, like spending too much time on trivial tasks.

Richard's Birthday

Friend of the blog, Richard, turned 22 today. If you'll recall the previous birthday posts, we have a few traditions here: kicking and caking. Richard was fortunate enough to avoid one of them. We'll head to the video to see which one.

Note This certainly isn't the last post of India. We at the blog have quite a few more things to say in the coming days.

Wednesday, September 8, 2010

A "Comfortable" Round Three of Pecha Kucha

Wednesday flew by as I spent the day pairing with a trainer for the first time. For those interested in slightly more detail, we worked on implementing flash scope in our web application. It's basically a nice way to handle things like error messages from forms. I also created my first ever Java Annotation.

Ted & IanPair programming example from a2gemma on Flickr.

As we came to night, it was time for another round of Pecha Kucha. These presentations just keep getting more and more fun. We had a full docket tonight of 10 speakers. A few even mentioned this blog!

  1. The Laws of Attraction by Rashmi
  2. Soul Theory by Shweta
  3. History of Hacking by Navneet
  4. Life Lessons from World of Warcraft by Sherry
  5. ThoughtWorks' Leadership Team
  6. TDD Applied to First Timers by Atreyee
  7. A Brief History of Nursery Rhymes by Namrita
  8. The Yellow Book by JK
  9. The World of Advertising [Video] by Sneha
  10. More than Words by Richard

For information on the title of this post, you'll have to check out "More than Words", which Richard asked me to record. Always ready for an opportunity to use my iPhone®, we now have video. I think it's fair to say this blog and trip would be far less interesting to hear about with this little wonder device.

Sunday, September 5, 2010

But What About the Actual University?

It's hard to believe, but we're already halfway done with our adventure to India, and through 27 updates I've yet to say much at all about what we're doing.

Note TWU is split between [roughly] 25 developers (devs), 10 quality analysts (QAs), and one business analyst (BA). Our trainers are from these backgrounds and more.

Week 1: All Together

We had a fairly normal 40-hour week to start things off. From 9-5 each day we had four sessions covering things that were common to all of our roles -- such as company history, diversity, software delivery model, and a micro-project with a simulated customer. Our customer needed an exotic animal built from LEGO®. It was one of several sessions designed to get the devs, QAs, and BAs working together in a project-like setting. My biased opinion is our team came up with a pretty great animal, baby, and gated-enclosure.
LEGO Animal, Baby, and Enclosure with Team

We do a thing with sessions here called Open Spaces. Open Spaces are basically a blank timeslot where the sessions are proposed and led by the participants. Any number of concurrent sessions can be going, and there are four guiding principles that most every event would be better off to adhere to.

  1. Whoever comes is the right people
  2. Whenever it starts is the right time
  3. Whatever happens is the only thing that could have
  4. When it's over, it's over

One of our assignments before arriving in Bangalore was to take an existing project and make it better. I was curious to see the variety in solutions, so I proposed a session on walking through how we solved it. We had four presenters, including myself, who had approaches varying from elegantly simple to enterprise-caliber extensibility.

Week 2: Split

For the second week we split the teams in half. The developers were off to learn things about coding, whilst the analysts presumably had sessions tailored to analysis.

There was much debate before we got here over which language to use: Java or the powerful, syntactically beautiful and lovable Ruby. Ruby really is great. I'd highly encourage everyone, especially non-programmers, to give it a try at tryruby.org.

Eventually the call was made for Java. We had sessions ranging from setting up IntelliJ, a development environment that makes working with Java easier, to pair programming and practicing test-driven development.

The Open Space session I proposed for this week had far less traffic. In fact, only one trainer and I were interested in the topic of Behavior-Driven Development (BDD). BDD is essentially a way to describe tests for programs in plain English. That's really the beauty of this flexible time -- everyone can find something they're interested in. We went over examples of the BDD tool Cucumber for about an hour. I've just begun introducing this style of testing in the project I'm doing for my last semester of school. Certainly more on that project in the future.

Example Cucumber Test

Feature: Manage Stores
  In order to associate receipts with stores
  As a user
  I want to create and manage stores

  Scenario: Register new store
    Given I am on the new store page
    When I fill in "Name" with "Chipotle"
    And I press "Create"
    Then I should see "Chipotle"
Poorly-hidden subtext: I miss Chipotle a little bit.

Week 3: Project Begins

The most exciting part of University has definitely begun: we're going to spend four weeks working on an actual internal project for the company!

This is where we get to code actual functionality into a system. We're also getting to familiarize ourselves with all the cool tools ThoughtWorks Studios has released in the past few years. We use Go for Continuous Integration and Mingle for Project Management. Both of these tools, and the concepts behind them, have evolved out of the pain points of the old way of engineering software.

Integrating code is always a pain, but it's an absolute nightmare if you wait until the end of a project to start integrating the pieces that every developer has been working on. With continuous integration, we integrate dozens of times a day and our automated tests ensure everything is working correctly. The end result is a better product with more consistent and predictable delivery.

Mingle is tailored for agile projects. In agile development, we break up functionality into stories. We estimate the stories for difficulty with points and use those estimations to plan how much we will get done in an iteration. In our case, an iteration is one week -- this is quite important; we're never planning too far in advance because requirements tend to change. The number of points we actually complete in an iteration is called our velocity. Mingle makes it super easy to track velocity, deal with ever-changing requirements, and support an agile team.

Most of this week has been familiarizing ourselves with the existing codebase, tools, and getting more and more experience pairing with our peers.

Pairing: Sush Sushmitha and I after pairing on the first day of the project.

bonus Word on the street is I'm a pretty fun pair.

Saturday, September 4, 2010

The Enchanting Tale of the 40-Minute Assessment

Gallup Press put out a book in 2007 titled Strengths Finder 2.0. The book contains an access code for a 177-question assessment online, which takes about 40 minutes to complete. In many ways, it's like a scaled-back Myers-Briggs Type Indicator personality test. The StrengthsFinder predictably only reveals 5 themes (strengths) and gives you a bit of background. We were lucky enough to get this as a part of our training at ThoughtWorks University, but if you're interested you can pick it up for about $12 on Amazon:

Assessment

The assessment is pretty easy to go through for the most part. One answers the questions by comparing the two options at opposite ends of a 5-point likert-esque scale and selecting the position he or she thinks best describes him. The options aren't always conflicting. Hypothetical example in glorious ASCII art:

   Strongly                                    Strongly
Agree Neutral Agree
|----------|----------|----------|----------|
I am a strong leader I like to listen

Results

The results are ready with a very nice customized report instantly.

My top 5 themes (with StrengthsFinder's descriptions!)

  1. Ideation
    People strong in the Ideation theme are fascinated by ideas. They are able to find connections between seemingly disparate phenomena.
  2. Learner
    People who are especially talented in the Learner theme have a great desire to learn and want to continuously improve. In particular, the process of learning, rather than the outcome, excites them.
  3. Responsibility
    People who are especially talented in the Responsibility theme take psychological ownership of what they say they will do. They are committed to stable values such as honesty and loyalty.
  4. Command
    People who are especially talented in the Command theme have presence. They can take control of a situation and make decisions.
  5. Futuristic
    People who are especially talented in the Futuristic theme are inspired by the future and what could be. They inspire others with their visions of the future.

In all, there are 34 StrengthsFinder Themes. Other information in the report includes quotes from people with your top themes and ways to apply your talents.

Note I've wanted to try out these affiliate links for ages now, but never really had an opportunity. In the interest of full disclosure, , if someone happens to buy this book through the link I'll try to not spend my $0.48 referral fee in one place.

Note Yes, I consider graphs works of art

Friday, September 3, 2010

Diamond District: The Slightly Deeper Piece

Capturing the essence of the Diamond District is far from an easy task. One of the more odd things about the place is you instantly start to feel the rickshaw drivers know who is foreign (and thus comparatively rich) by hearing you're staying in the Diamond District. We've already seen the view from my apartment, so we'll start with my favorite part: the signs.

Here we can see a typical sign in the complex. It's typical in style, but not at all common in the way that the information is presented. The wordiness on these signs is uncanny. To make matters even better, the information is always displayed in a different (random?) order. Note the speed limit.
Diamond District Sign

From there we have the view of the amazing tennis court from Mummy Kyle's apartment. He's on the top floor of "A Block", so he gets a tremendous view. Hilariously, we aren't allowed to use the tennis courts. Given the fact that several of our security guards salute us, we doubt it'd be much of a problem if we bought some rackets and balls.
Diamond District Tennis Courts

The apartments here are quite diverse (on the inside). The block formation makes things easy, but also a little less interesting. Again, here is the view from Kyle's balcony. The cookie-cutter housing style really stands out from the 7th floor.
Diamond District Blocks

I'd love to get a great picture of outside the district. Unfortunately it's positioned in such a way that many obstacles impede the view. When the view is not impeded, you're often thinking of how to survive crossing the street. Instead, we'll have to do with the following.
Diamond District from Airport Road

To get a better picture of why it is so difficult to think of taking a picture of the Diamond District from outside, I present you with an image of crossing the street during rush hour.
Crossing Airport Road

Needless to say, our minds are often on the task at hand as we attempt to make it to the other side.

Note The street-crossing issue is also discussed in the Highly Anticipated Indian Street Dog Exposé

Wednesday, September 1, 2010

Free as in Freedom: Funniest Pecha Kucha Talk Ever

Tonight was the second night of Pecha Kucha presentations for ThoughtWorks University XVIII. We had nine more wonderful speakers covering an extremely diverse set of topics (links point to slides):

  1. Smart Dust
  2. The Chinese Zodiac
  3. A Trip to Japan
  4. Facts About Google
  5. Web Designing
  6. Tour of Australia
  7. Wild Australia - How safe are you?
  8. Subliminal Messages
  9. What do you really see?

The incredible Sumeet Moghe was kind enough to mention my presentation from last week in his latest blog post -- Free as in Freedom: Funniest Pecha Kucha Talk Ever. He also generously tweeted and edited my slides into the presentation video.


How to get a 100 hits on your blog from Sumeet Moghe on Vimeo.

aside ThoughtWorks University has been an unbelievable experience. It feels like I've grown more in the past 2.5 weeks than the previous 5 years. The strength of our diversity shows itself every single day, and events like the Pecha Kucha are part of what sets this environment apart from any other. The magic here cannot be overstated.

Sunday, August 29, 2010

Mascal Camping: SG Hill Meets Nature (part 1)

TWU XVIII escaped for a camping adventure over the weekend to a place called Mascal.

In what seems to be the start of a tradition, we ThoughtWorkers mention three things in our posts about Mascal:

  1. Mascal is virtually impossible to find.
  2. It lies 40-45 km away from Bangalore's Diamond District.
  3. Search engines returning nothing -- nothing but ThoughtWorker blogs.

Background

Thanks to my awesome GPS-enabled phone, I've been able to put this place on the map. The journey was 2 hours and 47 minutes in a bus. Just when I think I can't possibly be surprised any more, I get into a bus that makes a habit of passing cars and driving 3 inches from the edge of a dirt road carved out of a hillside.

Our 49.4km route:

View Larger Map

The trip was arranged with Outback India, who employ some of the nicest people around.
outback_india_200

Both of our paid guides were going to school and doing this on weekends. We also had an amazingly nice volunteer who does this just to meet different people. An avid How I Met Your Mother watcher, we discussed the US-Candian relationship as told by the show. He's headed off to London for Audio Engineering next month.

Arriving

The last leg of the bus ride is a trip through an extremely small village. We step off the bus and are greeted with super skinny cows. Mascal Cows

It was clear from the beginning this was going to be far different from another day at the office, though you wouldn't know it to look at me. Who else could pull off bringing a camera, collared shirt, and water bottle camping?

The trek from the bus to the campsite was about 1km through fields and over rocks.
outback_india_015

Once there, we basked at the marvel that I call mini-stonehenge. It wasn't long until some of us had made our way out to the lake and conquered the microwonder.
Mini-Stonehenge Conquered

We didn't spend this day alone, either. A very friendly street dog had decided to spend the day with us.
outback_india_180

Luckily she was a very low-key and non-threatening dog, as she stayed well into the night.
Street Dog Stays Into the Night

Activities

Of course it didn't just end with getting to the campsite. We had a day full of activities...