Timeline: Mint.com – Summer 2007

The launch date for Mint still had not been set, and it had slipped first from March 2007 to tax time, and then again to the summer.  The slip was fortuitous.  Prior to launch Mint’s primary concern was security, handling user’s financial data is a sensitive matter, the secondary concern was distribution.  Unlike social network startups Mint did not have the built in virality.  Spreading it by word of month was the best it could do given the size of the team and its budget.  Letting the launch date slip made Mint eligible to demo at TechCrunch 40, the first ever TechCrunch conference where 40 pre-launch startups would demo their product for a grand prize of $50,000.  Launching at TechCrunch would help spread the word at least first to the tech community.

July 2007 – At the beginning of the summer, once everyone has settled in Aaron starts to look for a VP of product to help with usability and grow the product team.  He’s introduced to Aaron Forth by one of his First Round Capital investors, Josh Kopelman.  Josh knows Aaron from half.com.   Aaron Forth, aka A4, joins the team and quickly starts cranking out formal specs.  He also focuses on the add flow of user accounts, because that is the initial user experience.

August 2007 – The engineering team, always resourceful, still felt shorthanded and started to look around for another seasoned engineer.  They came across Daryl Puryear.  The team knew he was one of the best candidates they had interviewed, but wanted to invite him back for dinner to see if he would be a culture fit at Mint.  They all went out to Pasta? on Castro.  A few people ordered chicken parmesan… then Daryl ordered salmon, then a few other engineers ordered chickern parmesan… then Jason Putorti showed up 30 minutes later and ordered chicken parmesan!  The team had found another individual who wasn’t afraid of the norm.

Aaron wanted a full fledged marketing campaign with lots of PR to start a buzz going around its private beta and prior to its launch at TechCrunch.  He hires Donna Wells, thats the right the CMO from Mint’s rival Intuit.  Donna joins and the whole team keeps her identity a secret until post launch.

September 2007 – Weeks before the launch the team is cranking full speed ahead.  On the day of the launch the team heads over to hotel it is being held at in SF, and watches the demo.  Everyone waits in anticipation as Aaron demo, he incorrectly types his password – gasp!  But, after that minor hiccup the demo is a huge success, and there is definitely a buzz floating around about Mint.

The night of September 18th TechCrunch announces that Mint has won TC40.  There are 10,817 RU’s the second biggest in Mint.com history.  While the team celebrates in the room next door Atish and David work late into the night rewriting the data provider to make it more scalable for the freshly minted users!

Post to Twitter Tweet This Post

When to Build and When to Buy

I have posted the presentation I gave today at Code Camp here.  Hope you enjoyed it, and please feel free to email me feedback!

Post to Twitter Tweet This Post

Presentation for Code Camp ‘09

This year at Code Camp, I will be presenting the topic “When to Build and When to Buy”, which will explore the trade-offs associated with either buying software as a service or building an internal tool to meet your business’ needs.  This is especially important for cash strapped startups that are trying to keep their burn rate down, or even for larger companies that are trying to cut costs during a recession.

Here are some of the key areas I will focus on:

1. Understand what business problem it is you are trying to solve and what your requirements are both from a feature standpoint and price, before getting sucked into a sales pitch that offers you very cool bells and whistles that you either don’t need or that are too sophisticated for the simple problem you are trying to solve.

2. The hidden costs associated with buying software as a service.

3. The hidden costs associated with building an internal tool and supporting it.

4. Some key questions to ask service providers before buying, and when and which services it makes sense to buy.

5.  When it makes sense to build and how to speed up development to reduce the hidden costs.

I’ll also spend a little time talking about bringing in consultants and how you can benefit from their expertise.

Post to Twitter Tweet This Post

Timeline: Mint.com – Spring 2007

2007 began slowly, but started to pick up as the year progressed.  Originally, Aaron Patzer wanted to launch Mint.com before tax time, because he envisioned that at the start of the year users are very keen on making New Years resolutions, especially those that deal with finances, ultimately leading up to tax time.  Although Mint was not going to compete with Turbo Tax product, Aaron still thought that the beginning of the year was the right time to launch.  He also started to foresee a recession looming, and thought it might impact a Series A round of funding, but help to attract users who wanted to manage their finances quickly and effortlessly.  However, the product met neither of these two criteria, and hence a launch in April seemed impossible.

January 2007 – Aaron had built up his engineering division well, and under the leadership of David Michaels it was growing.  But his todo list continued to be frought with demands for marketing and product ideas, items that he simply could not check off.  He first started to look for a designer, who could also play a heavy hand in defining the product and coming up with features.  Noah introduced Aaron to Jason Putorti, a designer based on Pittsburgh.  Aaron liked Jason’s sense of design and product and decided to first hire him on as a contractor, his first commission is to redesign the Mint logo.

After their alpha release impressed their investors, the Minters took time off to enjoy a meal together, and celebrate their success.

February & March 2007 – Aaron and David realize they need to grow the team faster if they want to meet an April deadline.  While the team of Matt and Poornima forge ahead, it was hard for the two of them to keep up with the product roadmap, and also solve a lot of important issues such as scalability and security.  Despite being in Silicon Valley David found it  surprisingly hard to recruit hungry, dedicated, and smart engineers.   Mint needed an architect and another back-end developer.  David started heavily recruiting for both positions, no resume or contact went unexplored.  Aaron’s, realizing that it was going to be hard to pay for more engineers, once again shifts his focus to fund-raising.  By this point he spent less time coding and all his time either fund raising or working on product development.

April 2007 – Mint receives a Series A term sheet from Shasta Ventures.  Finally the money they need to start building up the team and developing the product! The team starts to take over the ground floor in hopes to expand fully.  Tuan Le, an architect, and Atish Mehta, a back-end engineer both join the same day, and start contributing to the engineering culture at Mint.  Its time for some new blood!  Tuan gets to work on re-architecting the entire back-end.  Tiers are created out of the once modularized code base.  There is separation between the web tier, business logic, and data tier.

May 2007 – Geezeo the second competitor to Mint launches.  Still unthwarted by competitors Mint focuses on its own product features and mission.  By this point Aaron is hoping for a summer launch, but its very likely to be pushed out.  After serving as an advisor to Aaron for a little less than a year, Anton Commissaris comes on board as the VP of Business Development.  Anton focuses on lead generation, but his first task as an ex-lawyer is to help negotiate and acquire the website: www.mint.com, which the New York based hedge fund Height Capital is squatting on.   Up to this point Mint has been operating as www.myMint.com, a name that I cringed at every time I heard someone say I worked at myMint, and I abhorred the thought of launching without the url Mint.com!  The name was the basis for building the brand, and attracting users to simplicity of the product, which was supposed to be epitomized by its very short name and url.  Aaron now fully funded, went back to focusing on product development, and recruiting for more product and marketing positions, as well as figuring out when to launch!


Post to Twitter Tweet This Post

Timeline: Mint.com – 2006

2006 was a year of firsts for Mint.com aka myMint.com.  It was the year Mint Software Inc. was officially incorporated, it received its seed round of funding, and formed the initial members of the Mint family.  And it was the year I officially joined Mint as “#2″.

January 2006 – Aaron starts meeting with people who have VC contacts to discuss his business plan and see if they can connect him.  He hopes that he can get funded with a concept, but most likely he will need to build a prototype.

March 2006 – Aaron soon finds that pursuing Mint and his day job are too much.  He also realizes that if he wants to impress investors and prove that he has a vested interest in his company he should be pursuing it full time.  So he quits his day job, incorporates Mint Software Inc., and begins coding daily in his apartment.

April 2006 – By this point Aaron is in full speed with development, and focused on solving difficult engineering problems such as categorizing transactions and figuring out how to automate the account sign up process.

Summer 2006 – Aaron continues to talk to people about his business plan, and also to discuss the most challenging problems they have with their finances.

August 2006 – Aaron meets Matt Snider, a front engineer and JavaScript guru.   They  go hiking, and Aaron tries to pitch Mint to Matt.  Matt declines because he is currently working at startup.  A few weeks later, looking for a place to live, Matt moves in with Aaron.

Bowling 2.0 begins, a league that brings together startups to talk shop over beers and bowling.  Aaron signs up and invites Matt and Poornima to come along to mix and mingle with other startups.

Aaron starts aggressively fund raising.  He meets with Sequoia Capital, who suggests that he join YouTube and head the engineering division.  Aaron doesn’t bite.  Other VCs are impressed by Aaron and want to hire him to come on board instead of invest in his company.  Aaron kindly declines, and continues to pursue his own idea.

In a stroke of fate, Poornima gets laid off from Synopsys.  Unsure of her future, she contemplates working for Mint, but Aaron hesitates to hire her, because she has no web development, web services, database, or startup experience!

Matt is growing increasingly frustrated with his current startup.  He decides to take Aaron up on his offer.

September 2006 – Willing to give her a chance, Aaron hires Poornima as a contractor, and Matt joins Mint full time.  Working out of Aaron and Matt’s apartment the team Mint team grows.  At this point, Aaron is bootstrapping the startup, but realizes he needs funding to attract more employees.  He starts talking to several VC firms.

October 2006 – After a few weeks of fundraising, Mint closes its seed round of funding with First Round Capital.  The team goes out to dinner with their new VCs in Palo Alto.

Unable to spend time coding, developing the product, hiring, and formulating the business plan, Aaron starts to look for an engineering lead.  He meets David Michaels, who is referred to him by another Mint interview candidate Mike Mettler.  The Mint team interviews David and is pretty impressed.  He is quickly hired as their VP of Engineering, and the first adult of the Mint family :)

Much to Poornima and Matt’s dismay Aaron finds office space in downtown Mountain View.  The team moves out of Aaron and Matt’s apartment, and into the second floor of an old build one block off of Castro, only being able to afford the rent for 6 cubes.

By mid-October Poornima signs on as the third employee, but is affectionately called “#2″ because engineers start counting from 0.

November 2006 - One month before the Mint Alpha is scheduled to release a competitor Wesabe launches, which is coincidentally the date that David joins Mint.  Wesabe enters the market as the first Web 2.0 personal finance startup.  The team nervously all log in to see what Wesabe is all about.  Relieved that Wesabe’s product is more about socializing personal finance, they keep chugging along.

December 2006 - Mint releases its alpha version with about 100 users, mostly investors, friends, and family.  A successful launch, focused primarily on a user being able to add accounts successfully, and see their transaction history.

Post to Twitter Tweet This Post

Timeline: Mint.com – 2005

I was the second engineer, third employee at Mint.com, and lone femgineer.  Mint.com is  in the midst of being acquired by long time rival Intuit.  This was my first startup, and the past three years have been a very unique and fulfilling experience.  In the following posts I will chronicle the major events in the life of Mint.com that have led up to last Friday’s Intuit acquisition.

November 2005 – Aaron Patzer, turns 25 and starts thinking of his next big career move.  Throughout his life has been an entrepreneur, starting businesses from the precocious age of 16, but his ultimate dream is to start a company that solves problems, which improve life for everyone!  He starts looking for inspiration.  He researchs ideas and problems in the marketplace that he might try and solve; reading literature on neural and bayesian networks to create a learning machine, then skips to thinking about creating software for setting life goals called Carpe Vive.  On one fateful Sunday evening, after becoming increasingly frustrated when trying to balance his personal account with both Microsoft Money and Quicken, he things to himself, “there has got to be a better solution.”  There isnt…  And in that moment he has found his spark, he begins to think of ways he could make a similar product that saves people time and money.

December 2006 – Aaron and Poornima take a ski trip to Tahoe.  The trip is long and I-80 is jammed with snow and cars, they are stuck in the car for 8 hours!  In an effort to amuse themselves they start to think of names for Aaron’s company.  ”How about Money Intelligence?”  asks Aaron.  Poornima thinks out load, “Money Intelligence… no thats too long… Money Intelligence…Mintel… how about Mint?  Mint conveys money like making a Mint.”  ”Mint…I like it!” replies Aaron.  The conversation continues with how difficult it is going to be acquire a 4-letter domain name…

Aaron proceeds to spend his Christmas vacation creating an initial design for the website, and starting to research personal finance.

Post to Twitter Tweet This Post

A Femgineer’s Adventures in Italia: Part I – Trip Planning

I spent the last two weeks traveling to Italy, and when I got back there was a fervor amongst my friends and co-workers to know more about my trip, see pictures, and even start a travel blog!  I’ve decided to do a series of posts to satisfy every one’s curiosity :)

Over three years ago I had dream to travel to Italy, stroll through the warm Tuscan countryside, visit the grandiose monuments in Rome, eat copious amounts of pasta and Italian pastries, and learn about the culture.  Alas, my dream was put on hold for coding, and not until the beginning of this year did I revisit it.  In March I started playing with the idea of living in Italy for a week.  I wasn’t sure where I wanted to stay, but I knew that I wanted it to be close to the water.  After listening to Beyonce & Jay-Z’s song “Upgrade U” and watching Diane Lane’s movie “Under the Tuscan Sun” I had a stroke of inspiration, and decided that I wanted to rent a villa on the Amalfi Coast in the town of Positano.  

I sent out a mass emails to my closest friends, attaching breathtaking views of the coast line, and listing all the fun things to do there such as sailing, swimming in caves and taking Italian cooking classes.  I was hoping that someone would want to join me, but with the recession looming, housing prices sinking, and the Euro gaining in value against the dollar my friends were worried about taking a vacation.  Having no real financial obligations, and having a you only-live-once and its-easier-to travel-when-you’re-young philosophy, I scoffed at the recession, and even convinced my boyfriend, Jason, who hates long international coach-class flights, to come with me. 

The first phase of planning was to find a place to stay.  Booking a hotel was going to be too expensive, and we wanted to have a more authentic experience. I figured a villa would meet our needs, and starting looking for a reliable rental company.  I figured we would be spending most of our time exploring the area or on the beach, so I tried to look for medium priced places that were comfortable, but also located close to restaurants and within walking distance of the beach.  There were good reviews on the Summer in Italy site, but I couldn’t find any that I liked, I switched to using Ville in Italia.  The place we ended up booking was a small loft apartment that was underneath a larger house, and located right across the street from an Italian market called Casa Miulo.  Unfortunately, we didn’t bother to notice that there was no air conditioning, and unlike most Septembers in Positano this year’s was pretty hot.  But we figured worse case we’d cool off in the Tyrrhenian Sea!

As I was making my plans and talking to people about my travels, everyone was surprised that I was only going for one week, and only to the beach.  I started toying with the idea of spending another week in Rome and Florence.  One friend even went as far as saying that I would be missing out on the entire Italian experience if I did not see Florence!  I was still concerned about costs, hotels in Europe aren’t cheap, plus train fare to get to each of these cities.  Jason had stayed with a family in Florence 5 years ago, and after a couple quick Facebook messages, they were more than happy to host us for a few days, we’d only need a hotel in Rome.

The next step was figuring out what to do in each location, and how to get around.  First, I searched on TripAdvisor for how to get from Rome Fiumicino to Positano.  Some people suggested taking the train from Rome to Naples, and then renting a car, but others were opposed to it because of the narrow windy roads.  I figured we’d be sleep deprived, and wouldn’t do well on narrow windy roads.  I had also read that Positano was pretty walkable, so there was no point in renting a car for our entire trip.  Others suggested getting a car company to drive you from Naples to Positano; I looked up the rates and it was equivalent to my flight to Rome, nix that!  The only other options were to take another train to Sorrento, the Circumvenusia, and then the SITA bus to Positano or a hydrofoil from Naples to Positano but they were unreliable.  I picked the train and bus option; it would be more stops, but at least we could afford it.  However, Jason discovered that we could book a car with our villa rental agency for a reasonable amount, we ultimately went with that option thinking it would be more relaxing after an already long flight and train ride.

Jason took care of booking our flights and the villa.  Booking the villa took a little back and forth, but went pretty smoothly.  There were no good deals on flights to Rome that didn’t take forever to get there, so Jason cashed in some miles and booked us two coach tickets on US Airways, not the greatest carrier, but it would do.

I didn’t have a lot of time to plan activities day by day, and I knew Jason would want to be more spontaneous, so I picked up copy of Frommer’s Amalfi Coast guidebook, and read a few chapters in it to figure out the best places to eat, how to various islands, and what the main attractions on the coast were.  Wanting to make sure I didn’t get ripped off anywhere and to put together a budget ahead of time, I checked prices for boat rentals and sailing tours.  And being a foodie femgineer, I made a list of all the restaurants I wanted to try in the area, with price ranges, and the days what day of the week they would be open.

I also  wanted an Italian’s honest opinion so I contacted a friend of mine, who lives in Italy, and she gave me some great advice on things to do in Rome and Florence, and what to prepare for when traveling to Italy.  For example, she recommended taking comfortable sandals to Positano, because the town is built into the cliff and there stairs to climb everywhere.  And that Rome can be overwhelming, picking a few spots is the best option, and Romans enjoy summers al fresco. 

Jason signed up for the iPhone international calling plan to keep up with his family, but I decided to wing it.  Texting was only 50 cents; a quick and cheap way to communicate with friends back home.  I knew my parents would be happy with a one minute call, and a page long email about my travels.

I was adamant about us only taking carry-ons because I hate losing luggage, and schlepping large suitcases on trains.  I figured we could find a laundromat or hand wash our clothes.  We packed lightly, only the essentials such as my new Kindle 2, which would undoubtedly come in handy on our various train rides.  I had already read Eat, Pray, Love, and couldn’t find another Italian travel book so I settled for  Julia Child’s My Life in France (research for my next trip) and Clean Code by Robert C. Martin (just in case I starting to miss coding :) ).

Off to Roma, Firenze e Positano!

Post to Twitter Tweet This Post

The Importance of Readability

When I first started coding I believed it was good enough to get stuff working, and then move on to solving the next problem.  I’d spend a little time designing, but most of my time implementing and testing.  My primary concerns were correctness followed by efficiency.  I didn’t see the point in re-factoring code until it was time to add new functionality or modules became incompatible or worse incomprehensible!  However, once I started to work in a team that was growing linearly I realized that readability is very important for code maintainability because:

1.  Other people read your code either because they are learning the code base and need to extend it or because they are trying to figure out how their functionality can fit with yours.  If it isn’t immediately obvious what problem the code is trying to solve then they are going to turn to you for help, and if you are around to explain it to them, great.   But even then you might have forgotten when you wrote, which then causes them  to add new functionality that most likely duplicates your existing solution.  Now there are two pieces of code that solve the same problem, and need to be maintained!

2. Other people mimic your code.  Before adding new functionality most people read through existing code to see if it solves a similar problem.  Instinctually they will copy the pattern, or skeleton of the solution if it applies.  Now you have more unreadable code!

So what constitutes as unreadable code? 

1. Function names that are ambiguous or functions that perform multiple actions that aren’t reflected in the function name.

public void createBudget(User user, String name, Double amount) {

    if (user.getBudget(name) != null) {

       user.getBudget(name).setAmount(amount);

    }

    else {

        Budget budget = new Budget();

        budget.setName(name);

        budget.setAmount(amount);        

        user.addBudget(new Budget(name));    }  

    totalSpending(user.getBudget(name));

}

This function is doing more than just creating a budget.  It is checking to see if one exists first for the given name, if not then it creates one.  If it does exist it updates the amount.  Instead of forcing developers to read through the entire function to figure this out a better name would be: createOrUpdateBudget (assuming that eventually more than the amount will change).  The same principle exists for variable names as well.  In today’s world of coding using and IDE with the auto-complete function saves typing, so long and descriptive variable names are preferable to ambiguous ones like “String s” or “String temp”.

The call to totalSpending makes no sense in this function.  If the point is to total up spending for a budgeted category then it should be done outside of the function meant to create a budget.  Limiting functionality reduces the levels of redirection a developer has to read through and understand, and makes it easier for them to understand what is going on.  Otherwise they have to remember multiple interactions, and juggle them when adding new code.

2.  Lumping together function calls.

Looking at the previous example there are multiple function calls lumped together e.g. “user.getBudget(name).setAmount(amount);”.  This is done out of convenience, and while in this case the functions are small, and perform simple actions, it becomes much harder to read if the function names are longer and more descriptive.  Its best to go through the additional typing, and break them into two separate lines.

e.g. Budget budget = user.getBudget(name);

        budget.setAmount(amount);

3. Using private or inner classes.  

If a class cannot be reused then it might make sense to create it as an inner or private class.  However, the tradeoff is that it becomes harder to search for the class name in IDEs.  If you plan to reuse the class because it a basic structure that can be reused then it should be promoted to being a public class.

4. Overbearing parent classes.  

Naming is very important to describing the concept that a class is trying to convey. Highly general names should be reserved for parent classes e.g. “Account”.  But as you add to the class hierarchy the subclass names should be very specific e.g. “BankAccount” or “CreditAccount”.  This also gives developers an intuition of what each class might have as data members.  For example, the Account class might have general variable such as “String name”.  Whereas its subclasses will contains members that convey the concept of that class e.g. CreditAccount has a variable “Double interestRate” or BankAccount has a variable “Double atmFee”.  It also becomes easier to add data members to each of these classes because the classes are divided, and prevents developers from polluting the parent class with too data members that don’t pertain to multiple classes.

5. Function length

Length does matter!   Going back to point #1, you should strive to cut down on function length by removing calls to functions that are extraneous, or re-factoring sections into simple single level functions that can be called and re-used.

Post to Twitter Tweet This Post

Test more preach less

picture-7

For the past three years I’ve been trying to emphasize and build unit tests at Mint.com.  I’ve tried TDD and some other approaches but nothing has kept up pace with an agile-like speed of development.  The article  Is Unit Testing Doomed? talks about the issues that developers have today with all the different philosophies of unit testing, and why so many opt out of doing it.  Instead of forsaking unit testing because I couldn’t find the right methodology to suite my needs, I decided to come up with my own home grown version of it.

My approach is to design the entire project’s front and back-end’s set of interactions, then the data model to represent the back-end.  I then break the design apart into components that I plan on implementing.  After implementing each piece I write some unit tests for the apis I have developed.  I do this for each component or logical unit I am developing.  I use stubs to avoid class dependencies and focus on the class I am testing.

Since I’m operating in an agile-like environment the design is sure to change, in the event that it does I haven’t wasted a whole lot of time by writing test cases up front using TDD.  I can go in and quickly modify a few test cases that are impacted by the new design, and add additional test cases to handle the new design.  They key is that I’m not writing unit tests to fit my design or testing at the very end when I have very little to no time, and there is too much to test.  I’m writing test cases as I’m developing.  This has a couple benefits: first, its faster to spot bugs that new code might be causing in older code because I have test cases for my older code, hence I’m not breaking old functionality.  Second, when I unit test right after I’ve written a new component I’m forced to think about corner cases that might happen in the beginning of the development cycle rather than the end.  This also improves the overall design of my code and the feature.  If I have time prior to a release, I will add test cases as I fix bugs.  This is how I’ve incrementally built up a regressions suite.

I think developers should face the responsibility of unit testing their code, instead of offloading all testing to QA.  While you might not be able to think of 100% of the cases, flushing out simple error cases and thinking through a few corner cases at least handle some of the bugs that will come your way.  Unit testing is not a substitute for integration testing, but given the time for system setup and tear down unit testing at least keeps pace with daily development.  You can focus on integration testing once you’ve got the feature set completed, or also do it as part of your unit testing.  The point is to consider the philosophies of testing, and try to adapt them to meet your needs.  If writing test cases is the primary battle, focus more on meeting your teams developmental needs and less on being dogmatic about the current testing trends.

Post to Twitter Tweet This Post

Positional Dependency causes Bugs for Newbies

Fixing bugs is a good way to learn a new code base.  You often go through the procedure of understanding the high level software architecture, and are then given what appear to be fairly straightforward bugs, however, if the nuances of a system are not understood you will end up introducing more bugs than you fix.  More often than not it is the fault of the code’s former owner.  One of the most common issues that stack the cards against newbies is when positional dependencies have been built into the code.

If a  function is very long it is most likely doing too many things, and either doing them in a particular order.  Changing even a single line of code or re-factoring sections into separate functions can throw off the end result.  If the initial author of the function is available ask them if it makes sense to break up the function into logical units that only perform a single operation.  If you can’t, try understanding how each of the components interact with one another by stepping through a debugger and seeing what values are output and how they are re-used in each section of the function.

In try/catch/finally blocks developers usually place the section that should be “tried”  inside the try, and despite the try succeeding or failing the finally block will be executed.  However, it is possible that code can be ‘misplaced’.  Placing finallly logic inside the try block or vice versa can throw off the end result in exception handling.  When fixing bugs simulate exception conditions to verify that the exception is being handled properly with your fix.

Developers use “return” or “break” statements in the middle of functions to avoid executing the function once a condition fails.  Make sure you understand why the function should be abruptly ended.  ”continue” statements are another control block that throws people off.  Skipping an iteration if the rest of the loop perform costly operations is a good practice, but it is important to understand what should come before and after the continue block.

Understanding a new code base can be daunting, but when it doubt it helps to understand interactions and dependencies before putting in a fix.  Talking to each developer who has touched it is a great benefit.  But if they are not readily available then try stepping through test cases for the code you are fixing, it will help you understand how values and parameters are being processed, and expose any positional dependencies.  Or create a few tests of your own by setting up data conditions, and see how they are handled.

Post to Twitter Tweet This Post