Epilogue: Mint.com Femgineer to Femtrepreneur

Almost one month ago I left Mint.com to strike it out on my own.  I remember leaving the building after saying goodbye to people that I had helped hire, and built a product with for over 3 years of my life.  The days leading up to my last day were filled with a bit of sadness, and apprehension.  I recalled all my fondest memories of team lunches, the burritos in the park, and the countless milestones and awards Mint had won.  But my last supper with the Minters was probably one of the best and most fulfilling experiences and evenings.  I shared my ideas for new startup with them, as we enjoyed our final feast together.  Despite knowing I was leaving a team of people that I cared about greatly behind, I got into my car and drove away feeling excitement for the next challenge and the next team and product I was going to help build.

Even though I was involved with Mint since the very beginning, which was over 4 years ago, I felt like I joined Mint, blinked, and it was over.  While it was a memorable experience I’ve been making an effort to enjoy more of the process and living every moment of it with my own startup.  As someone who has always been future focused living in the present is a challenge for me.  But I actually really love it!

How do I do it?  For starters, I have a slight advantage, getting in on the ground floor at Mint I witnessed first hand what its like to deal with scary concepts like the unknown,  constant change, the imperfect product, and endless set of problems that arise and need to be solved.  For example, a couple weeks ago I had a conversation with my partner about data quality.  She was really concerned that we wouldn’t have perfect data for our customers.  I listened to her concern and then a thought occurred to me, “Where I have seen this problem before?”  Oh thats right Mint never had perfect data!  And yet Mint user were willing to live with it, because the value we were providing to them as a service that provided a complete picture of their finance outweighed small data anomalies.  Drawing from that experience made me realize that I was in control of the situation, and could help to assuage my partner’s fears.

Every once in a while my old CEO calls me up to ask, “How the new business is going?”  And my usual cheery retort is, “Everything is great!”  How could everything be great, when I don’t have any users, revenue, or a prototype build yet?!?  Because I have a team that I have proudly built, it’s not big, but in my mind its still a team of more than just me.  And because everyday I make small strides, like signing up the first customer who will help me test my prototype and solving at least one product problem a day.  Before I go to bed I review the days activities like enjoying a meal or cup of coffee while conversing with a friend, reading a new book, writing some RoR code, giving a talk to other entrepreneurs, and thats enough for me to feel like I have a purpose, and want to go to bed so I can jump out of it the next day and do more!

Importance of an IDE

The first time I saw my VP of Engineering use Idea Intellij I feel in love with it!  All those shortcuts, a debugger, running a server, refactoring code, inserting exception handling, and the ability to do auto-complete!  I was coming from an Emacs, NEdit, VI background, which are all powerful in their own right.  I loved Emacs, because I could switch between files quickly and compile in a single window, which is great for C and C++ development.  NEdit is great for hardware languages like Verilog and VHDL where you make a lot of single line edits.  And VI, was my first love, because of all those shortcuts!  But they all paled in comparison to Idea Intellij.  I used Idea for 3 years during the course of my Java development.  And then the unthinkable happened, I upgraded to version 8.0, and it sucked!  My experience was so bad that I reverted to version 7, and refused to upgrade while everyone else on my team upgraded.  I vehemently opposed upgrading for months because of the performance issues I faced.  None of the optimization techniques worked, and I forever remained an Idea 7 fangirl, while the rest of my team upgraded to version 9.  Developers hate waiting for code to compile, so why would they even tolerate an IDE that takes minutes to load or start a server, and brings the rest of your computer to a grinding halt.

It’s been over a month since I’ve done Java development.  I’ve moved onto learning Rails.  While I have been happy with TextMate for the most part, my application is starting to get more complex, and I find myself constantly switching between files.  I’m also really lazy when it comes to typing and love shortcuts and autocomplete functionality.  Hence the quest to search for an IDE has begun again.  Currently, I’m playing with Aptana RadRails.  I decided to install the full application instead of an Eclipse plugin because I wanted to see it in its full glory.  I’m not a huge fan of Eclipse, but I know its probably the best free IDE out there with the most language plugins.  As my application becomes more complex and involves more languages I’ll switch over to Eclipse.  Or maybe just maybe I’ll give Idea 9 a shot…

A happy developer is a productive developer.  Sitting around and waiting for stuff to load or compile is time sunk.  An IDE makes or breaks a developers productivity.  A good IDE handles all development tasks and all stages of development: coding, debugging, refactoring, testing, and running the web app.  An awesome IDE provides the ability to integrate multiple languages like JavaScript, Java, and HTML, which is crucial for a developer like myself who deals with the whole stack (front and back-end).  But the most important factors are speed and ease-of-use.  An IDE should be blazing fast; I don’t want it to suck up memory, take minutes to load, and forever to synchronize changes.  Some nice to haves features are integration with code repositories and doing error checking (e.g. highlight unused references, static code analysis).

But the main reason I like IDEs is because I a like having single tool that slices and dices, and moves me seamlessly through each stage of development.

Quick video on installing RadRails: http://vimeo.com/channels/radrails#6450292

Ruby Tuesday: Debugging

When I was a freshman at Duke, coding away in Teer basement, I would often hear disgruntled engineers shout: “Damn, I’ve got 300 syntax errors, I left off the semicolon!  Why does everything have to be so exact?”  Those were the days of coding in C++, a language in which you had to actually compile, but hey it was faster than punchcards!

Nowadays we have dynamic typed languages like Ruby that don’t even require semicolons!  But that doesn’t mean we’re in the clear.  We still have to debug.  RoR has done a good job of building in a lot of debugging tools.

Here is my philosophy and methodology for debugging:

  1. Errors and Exceptions are the easiest: Load the web app, if there is an error or exception thrown in the webpage tackle that first.  If I don’t know what the exception means e.g. InvalidAuthenticityToken, I will look it up.  And read about it and usually that will lead me to a solution.
  2. I love logs! If the web app seems to load properly, but some functionality is broken I go look at the logs.  You can add log statements based on the level of logging you want to controllers in RoR with the following code: logger.debug “BUGGY” or logger.info “YO”
  3. Data Corruption: to the Database! If the data appears to be displayed incorrectly then I go straight to the database.
  4. Look & Feel: if something is off with the way the page is rendered then it is most likely something I did wrong in HTML or CSS.  I like using Firebug for CSS issues.
  5. Vijayashanker Code If something is off about the functionality, and I have a sense of where it is happening I will go through and read my code.
  6. Debugger Last: I’m not really a lazy person, but setting breakpoints and stepping through code can be tedious.  So I save this as a last resort if I can’t use any of the above techniques to find my bug.
  7. I hate “debug” statements! I’m a neat freak, I don’t like polluting my code with debug statement, and creating more work for myself in having to go and remove them later.  If I can’t get the debugger to do what I want then I will resort to using debug statements.

As I was debugging today I discovered a few good resources here are a few of them:

  • Debugging Rails Applications (walks you through common debugging techniques and also explains logging levels and configurations)
  • Logging Tips (Everything you ever wanted to know relating to logging in RoR)
  • RoR Google Group (I found solutions and insights into most of the problems I was experiencing today)

TalkShoe Podcast

I was interviewed this afternoon by Anne Swift.  She focused on my experience as one of the founding engineers at Mint.com, and how that has helped me start my own venture.  Enjoy the podcast!

For the New Kids on the Bay Area Block

I’ve been in the Bay Area for the past 5 years, and prior to that I moved here from India when I was two, so in sum I’ve lived here a little over 9 years (yes I’m counting childhood because I claim to be precocious).  I’m not too savvy when it comes to SF, because lets face it I love the warmth and sunshine of the peninsula, and I don’t plan to leave anytime soon.  Being dubbed as one of the most energetic and extroverted engineers you’ll meet I’ve managed to explore a lot in along the Bay.  Here are some “scenes” to check out for all your newbies:

Startup Scene

For gals who want to learn more about startups and tech: Women 2.0

For gal and guy coders who want a place to work: Hacker Dojo

If you want to be a 408/650 coder try these out: Ruby Meetup, SDForum, Google Tech Users Group

Entrepreneurs who can’t get enough caffeine:  Dana Street Roasting Company & Red Rock (Mountain View), Coupa Cafe (Palo Alto)

Entrepreneur networking: SVASE

Learn about Startups & Emerging Technology: Stanford VLAB

Yoga/Sports Scene

I love Bikram and this is my favorite studio in the Bay Area: Bikram Yoga San Jose

Competitive Skiing/Snowboarding: Snow Drifters

Food Scene

My favorite ItalianoGambardella’s

My favorite India – The Mynt

My favorite Mexican – Fiesta Del Mar Too

My favorite Sushi – Joy

Cafe Scene

My favorite espresso bar – Caffe del Doge

All around cafe –  Cafe Barrone

All around cafe – Los Gatos Roasting Company

Chocolate Scene

Chocolate tours and tasting - Charles Chocolates

Wine Scene

Wine & Jazz Bar – A Perfect Finish

Cozy Wine Bar – Wine Room

Beach Scene

Santa Cruz is fun, but Capitola is nicer.

Meeting Nice People Scene

Spanish Meetup

Coupa Cafe

Rose & Crown (Tuesday is trivia night)

Adventure Scene

If you want to fly: Trapezing

If you want to jump: Trampoline Dodgeball

Relaxation Scene

Watercourse Way

Day Spa

Music Scene

Music in the Park (summertime only)

Ruby Tuesday: Podcast

I find it hard to learn with just one medium like a classroom or a book.  I need multiple sources of information to drill home a subject (I could of course just be dense).  I started learning Ruby on Rails with tutorials, which are great if you want to learn a few things and do it quickly (and also to kill time while you are waiting on Amazon to deliver your Ruby book).  But tutorials aren’t enough to understand the depth of the subject they aren’t enough.   The next phase of my learning is focused on working through the chapters of Agile Web Development with Rails.  It does a good job of presenting the use cases for Ruby on Rails, giving you a project to work on throughout the course of the book, and also explaining what tools to use in development.

I also like learning and being outside.  So I’ve started a tradition of podcasts and power walks.    I really like listening to: Learning Rails.  The podcast is free and you can subscribe to it on iTunes.  If you visit the site you can also download the screen casts.  If you haven’t yet gone through book exercises I’d recommend looking at the screen casts while listening to the podcasts, it makes it easier to follow and understand what Michael and Christopher are talking about.

I’ll cover video tutorials in the next Ruby Tuesday.

Takeaways from Girls in Tech: Catalyst Conference

Today I attend the Girls in Tech: Catalyst Conference at the Common Wealth Club in San Francisco.  It was a great meeting ground for all girls in tech.  I was introduced to VCs, CEOs, and of course fellow femgineers!  My panel was: “Curious About Coding & Developing: Developing Creativity & Building a Business.”  Here is what I learned from the Q&A period and hallway conversations I had with other girls:

  1. Women want to code!
  2. Entrepreneurs want to understand where they can meet developers and how to interact and motivate them to join their startups (this is gender neutral).
  3. There is a growing gap between entrepreneurs and engineers (once again gender neutral).

Because the panel was brief some questions on each of these points went unaddressed.  I’m going to attempt to address some of them now.

1. Just do it!  Seriously, if women in their 20s can run companies, 30s can run marathons, 40s can give birth then they can certainly code!  Any new skill is daunting (believe me I’ve tried snowboarding on blues…)  But the key to learning a new skill is patience, practice, and perseverance.  Start by figuring out what you ultimately want to do e.g. designing websites (CSS, HTML, Illustrator/PhotoShop), creating software programs or web applications (Java, Ruby), or pulling data for business reports (mySQL).  Next evaluate what kind of learner you are: self or group?  If you are good at self-study then go do some tutorials.  Don’t do it all in one shot, pace yourself!  And if you like learning in groups then go attend a workshop or a class.  You can enhance your learning with podcasts on the subject (there are a ton on iTunes), and reading books on the topic.

2. Its no secret developers are a nose-to-the-grindstone bunch.  Good developers are especially hard to meet in the wild :)  Here are a few secret hide-outs: Hacker Dojo (Mountain View), Meetups (Ruby, Java, iPhone, Android) along the peninsula hosted monthly, and of course un-conferences like CodeCamp, She’s Geeky, and Chirp.

I hate to stereotype but I think there are two key motivating factors: building cool stuff, and solving tough problems.  By building cool stuff I mean developers who like to work in a fast paced environment, like a startup, and be a part of a product’s evolution.  By solving tough problems I mean developers who like to work in a stable environment and think about tough engineering problems like scaling a database or improving the performance of a site to load photos really fast.  Figure out which you want for your company or team.  Then motivate them, first and foremost with projects, and second with the autonomy to build or work on those projects and drive the direction of them.

3. This is mostly a communication issue.  I’ve noticed a growing trend in entrepreneurs understanding jargon, and even what technologies work best for front vs. back-end development.  But I have yet to see a movement in the developer community  to create a more articulate bunch of coders that can clearly explain tradeoffs in laymen’s terms e.g. more servers == more $$ or more code clean up == more developer time.  I think such initiatives needs to start at the university level, perhaps by incorporating a public speaking component to the curriculum.  And in companies managers should force their developers to explain projects and give presentations that are across departments.  I don’t think agile does a good job of emphasizing the need to be articulate, but I think it would help with the entire product development process.

Charming Los Gatos

Tired of the peninsula and SF startup scene and eager to meet new clients in other parts of the Bay Area, I left rainy Palo Alto, and high-tailed it down 85-S and then 17-S to work in Los Gatos, and was pleasantly greeted by blue skies.  Los Gatos downtown is a neighborhood that despite being in Silicon Valley isn’t too techie.  I wonder where all the wealth there comes from?  And wealthy indeed these people are  (I took pains to parallel parking my little Honda Civic between a Mercedes SUV and Maserati).

They’re techiness is mixed: I walked into my favorite coffee shop there Los Gatos Roasting Company, and the woman took my order down by checking off a box on a sheet of paper and then ringing me up on a cash register.  As I sat down to work though they had 5 free wifi networks just at LGRC, and I can’t even get one to work in downtown Palo Alto!

And for all the geeks out there is an Apple store, which is never too densely populated.

As I drove home after my meeting I realized Los Gatos had something unique: balance.  And of course all the elements fit for a foodie femgineer: boutiques, Michelin rated restaurants, and lots of free wifi!

Book Review: BakedIn

Marketing is essentially telling a story and conveying a message to customers and users about a product or a company.  But how do you tell a compelling enough story when there are 50,000+ products out there each competing for a slice of the market?  Perhaps it would be easier to get a slice of the pie if you’re marketing strategy was baked into your product.  The strategies for doing so are highlighted in my latest read: BakedIn. The authors discuss 28 rules that infuse every aspect of your product and business with a story.

While I’ve been called a marketing genius on stage by Aaron Forth, VP of Product at Mint.com, I hardly warrant such a title.  It takes a lot more than just a simple name to create a successful product and brand like Mint.

Here’s are a few highlights of what it does take:

Cultural Trends – understand where the consumer culture that your product is using is headed.

Design – think about ways to design each element and use them as touch points to interact with your customer and evoke an emotional response.

Find out what business you’re in – list all the service and the emotional benefits you create for customers.

Know the entire business category – use a competitors products to see what advantages and disadvantages it possesses.

Get your hive on & Knock down the walls – siloed organizations do not lead to innovation (another reason why great firms fail).  You need to foster a collaborative culture within your organization across departments, and make sure that information is flowing between the departments, instead of it being hogged or withheld by a few.  If need be jump across silos, but be aware that it might cost you your job.

Absolute – strive to be the superlative in a field (fastest, smallest, quickest)

Design to your weakness – confront the big hairy monster that is standing in the way of your organization’s success and find ways to design around it.

Good short read for anyone who wants to infuse life into a flailing product, create a new product, and most importantly tell a compelling and gripping story to keep customers engaged.

Ruby Tuesday: Test Driving Ruby on Rails

I’ve been getting feedback from my fellow femgineers that they enjoyed Ruby Bootcamp Basics, and they want more info on Ruby and Rails.  So I’m starting a series on my blog called Ruby Tuesday, I’ll spend anywhere from a couple hours to the entire day reading, writing, and researching Ruby and Rails and then blog about my findings.

I’ve also gotten some feedback from my girlfriends who are in tech, who aren’t formal femgineers (i.e. the don’t have an engineering degree or work in engineering deparments), but want to know how to program so that they can independently execute database queries, program emails, or setup simple web pages.  I’m looking out for you gals and I’ll think about doing a series of posts on that :)

I was hunting for a good book on Rails and a few people suggested: Agile Web Development with Rails by Sam Ruby, Dave Thomas, and David Heinemeier Hansson.  If you have done web development and don’t know Ruby I’d recommend reading the introduction and then turning to Appendix on page 667 and go through the Ruby language constructs.  Then continue on with the rest of the book, or if you’re an antsy developer like me go through the Appendix, and then skip to Ruby Bootcamp Basics.  In any event I would learn the language constructs first before reading or writing any code.

But lets back track to the topic at hand: Test Driving Ruby on Rails.  One question I ask all my interview candidates is: have you been responsible for evaluating technology?  This is a required skill in startups because you want to be up and running, and understand the trade-offs to using various forms of technology.  It’s not enough to say well all the cool kids are using it.  Its important to match the tool or language to the task at hand.  I learned Java in college, but when I really started seriously coding in it three years ago people were already onto Ruby on Rails.  It seemed to have a cult following at the time, and all the other startup kids mocked me for using Java (I’m used to being mocked by mengineers), but I stuck it out.  I discovered the Spring Framework, which I thought was really cool, but now I realize that it just adds additional configuration time (apparently Spring 3.0 has gotten rid of a lot of XML, but I haven’t evaluated it yet).  Regardless, I’ve been coding in Java because its reliable and scalable, which meet the requirements for a financial services application, and outweighed the costs of configuration.

But I was always curious about Ruby on Rails, and having finally gotten a web app up and running here are the immediate advantages I see:

  1. Ease of installation
  2. Quick database setup: no need for complex ORM mapping XML files like you need with Hibernate and Java.  Active Record is the ORM layer that comes with Ruby and handles mapping Ruby objects to MySQL tables.
  3. Quick MVC: in Java it would have take me at least an hour to configure in XML the model, view, and controller, write the code for each, and then of course add XMLC classes to support view layout.  In Ruby, I can generate each of the classes using a script or scaffolding, and use Embedded Ruby (ERb) to create a view.
  4. No compilation!  Just start the web app.

The  main reason I am going through the exercise of learning Ruby on Rails is because I want to create a prototype and rapidly iterate on it.  Ruby on Rails is good for getting a web app and running and showing it to customers within a short period of time.  Eventually, my product will have more complicated backend logic that I will probably use Java or another language for.