How Intuit Manages 10 Million Lines of Code
CowboyRobot writes "Intuit launched QuickBooks in 1992, and it has grown into the best-selling retail software for small-business accounting worldwide. QuickBooks is available on multiple platforms with different feature sets (Pro, Premier, Enterprise), in specialized editions (accounting, contracting, etc.), is available on CD or via subscription, and is offered in localized versions for the U.S., Canada, and the U.K. How they manage so many builds is a case-study for large scale programming. 'The Windows version is about 80,000 source files, 10+ million lines of C++ code plus a little C# for the .NET parts. Plus help files, tax tables, files defining local accounting rules, tax and other government reporting forms, upgrade offers — a lot of files. Every customer gets the full version. Specific feature sets are turned on and off with the license key.' And the lessons are not just technical. 'One surprising lesson is that small teams work, even for very large codebases — especially, Burt says, in sustaining an entrepreneurial, creative culture.'"
Real programmers keep their code on punch cards.
Or toggle patterns written on a napkin.
Sheesh, evil *and* a jerk. -- Jade
n early 1982, the Lisa software team was trying to buckle down for the big push to ship the software within the next six months. Some of the managers decided that it would be a good idea to track the progress of each individual engineer in terms of the amount of code that they wrote from week to week. They devised a form that each engineer was required to submit every Friday, which included a field for the number of lines of code that were written that week.
Bill Atkinson, the author of Quickdraw and the main user interface designer, who was by far the most important Lisa implementor, thought that lines of code was a silly measure of software productivity. He thought his goal was to write as small and fast a program as possible, and that the lines of code metric only encouraged writing sloppy, bloated, broken code.
He recently was working on optimizing Quickdraw's region calculation machinery, and had completely rewritten the region engine using a simpler, more general algorithm which, after some tweaking, made region operations almost six times faster. As a by-product, the rewrite also saved around 2,000 lines of code.
He was just putting the finishing touches on the optimization when it was time to fill out the management form for the first time. When he got to the lines of code part, he thought about it for a second, and then wrote in the number: -2000.
I'm not sure how the managers reacted to that, but I do know that after a couple more weeks, they stopped asking Bill to fill out the form, and he gladly complied.
http://folklore.org/StoryView.py?story=Negative_2000_Lines_Of_Code.txt
point is, just cause you can manage it, doesnt mean 10,000,000 lines of code is really something to brag about, especially for something that feels as cheap as quickbooks (though it does a ok job if your accountant cant use excel and must have things that visually represent checks)
It isn't Sarbanes-Oxley compliant. For example, you can delete transactions such that it looks like they never existed. Great software!
could have better done a research at how to keep a site alive with 10 mil+ ./-ers come knocking at the door.
Oh and as most anybody who uses QB often knows- it does suck quite mighty and gets slower even as PCs get faster. Piles of code isn't always a good thing, sometimes it just means you have a bloated heifer with lazy programming and no real improvements in half a decade or more.
I find it to be bug laden and amateur for the most part. Use both Quickbooks Accounting (Retail) and their Point-of-Sale. Quickbooks works for the most part I guess, Point-of-Sale is Busch League...
And, even they had some signficance sometime or somewhere, why should I care about how they manage lines of ancient code?
Time is what keeps everything from happening all at once.
That paying well to a small team, and treating them like a people, not commodity, is actually worth the money!!!!
Oh, noooo, no, what about all the HR screams that this is not a sound business???
If it takes 20 million lines of code to do ones taxes there is simply something very wrong with the process.
Got Code?
Story has too many words when one will suffice.
My last job involved many, many frustrating hours with QuickBooks - every week. It's a steaming pile of crap. There were so many basic things missing, like decent reporting, that it was a total joke. I could go on for many long rants about how much I hate the software. We wanted to integrate Fishbowl, so we could do some trick inventory manipulation, but it wasn't implemented before I quit. They are still working on it.
In my new job, I get the daily reports from our 5 stores. QB failures are mentioned daily. I am so happy to be in an entirely different department.
I really wish there was competition for QB. I think it's a fine platform if you are a very small business with a limited product line. Get complicated, and it fails.
and it shows. First of all, I have been using Intuit for last 6-7 years. Secondary, I do appreciate the fact that US tax law is horribly complicated. However it seems that over last 5 years quality of Intuit software is going down the drain. Go to Intuit support forums and you will see what I am talking about. So answer to the question "How Intuit Manages 10 Million Lines of Code" is - poorly.
Quickbooks is the one thing that keeps Windows on my machine, and is the only reason I ever boot into it.
I tried hard to beat WINE into running it, but alas no luck - at least the version I run.
I looked at what's out there in Linux accounting software, and either it was really obscure, apparently abandoned, or aimed at mega-corps, not small and home businesses. Plus none of it offered an easy way to handle Canadian tax frameworks.
And of course we wanted an accounting package that our accountant would accept at year end. That means one of Quickbooks or Simply Accounting.
Three Squirrels
As someone who tried to use their Quicktax (web) product earlier this year, and managed to break it to a point where it wouldn't continue, I wound up using a competitors product for this year.
I don't think Intuit is necessarily bad, but their attempts to limit a product artificially so they have several different SKU's seems, for me, is resulting in lost sales as the limitations are being turned on/off at the "each key entry" level instead of "at the purchase" level. This is not exactly a product that people are going to pirate since it has their identification tied to it legally.
Rather they should only turn off features that "print" those pages rather than trying to prevent entry of those pages. Like for example I tried to enter about 100 lines about stock trading, but this is only available to the most expensive tier, I okayed "upgrading" to this, but for some reason it was this action that killed the web version, and I was forced to go back to square one with a competitors product.
So IMO, if quicken and quickbooks are managed the same way, I think they're losing sales with trying to upsale at key entry instead of at print. It may make more sense to turn off the features at key entry to avoid wasting time, but you're actually making the user go "well if this product is so limited, let's see what limits are out there"
This is a good example of where an Open Source product could probably replace proprietary software, since the market leader's software is such a poor performing bloated pig.
Still, I don't think intuit's products are intentionally bad, but rather their licencing model is making it feel like their software is bloated at best and broken at worst. Software should be using "plugin" models where additional features in other licence levels can simply not be initialized instead of initializing the entire product and checking at every key entry to see if the licence allows that feature.
monolithic code bases are in the top 3 three killers organization productivity. don't confuse the success of the company with bad practices.
They don't mention Profile anywhere, which is even more horrible than Quickbooks. Last time I had to support it I remember downloading dozens of VB runtime files...
Quicken and Quickbooks is the only application I know of to have survived a full-on Microsoft assault on their business. Microsoft Money has folded. It's something to be proud of, I guess - for now.
Help stamp out iliturcy.
Quickbooks maybe the industry standard, but it's also a giant jumbled up mess. Our company's quickbooks were down all day due to corrupted files leading to unsequenced invoices. I've never meet someone really happy with Quickbooks...it's just accounting software is really hard to develop, so it doesn't have many strong competitors.
I've had some simply horrendous user experience problems with Quickbooks that have persisted release after release.. I imagine the real question is how do they manage feature requests from 100M customers.. Do they simply make it difficult for developers to fix obviously wonky UI?
I wonder if the language used influences code quality?
Speaking as an accountant, i.e. the poor fucker who has to use Quickbooks, Quickbooks is a goddamn mess. It's constantly crashing or messing up for some reason or another. Version upgrades are like pulling teeth and its interface is terribly organized. The worse part? It's the best of a truly bad breed.
The last time that I tried to contact Intuit about Quicken on Linux was a mess:
http://dotancohen.com/eng/quicken_on_linux.html
I certainly hope that they handle their code better than they handle their customers.
It is dangerous to be right when the government is wrong.
As a solo developer, working 800 hours, I was able to write ~400,000 lines of debugged and play tested code. So 10 million lines doesn't sound like a lot at all to me. The only thing I experienced in writing so many lines of code is that I found a problem with the Eclipse editor. Once a single file starts going over 30k lines of code, there is type lag. The more code, the more type lag until you can no longer use Eclipse to edit that file, you gotta use Notepad.exe or Scite.exe.
Link here in case you want to play the game I wrote
Just out of idle curiosity: I wonder how many lines some of the bigger projects out there have. For example, how many lines of code do some of the Linux OS Kernels have? I'm curious because is 10 million lines actually a really large code base, because it doesn't sound it.
God spoke to me
Particularly considering it's just a "simple" tax programme.
It sounds like, instead of implementing the logic in data (i.e. arrays, external text files, etc) and having a fairly small compiler targeted at the problem, they implemented everything in C. This is something even C advocates advise against.
Far easier to maintain a single properties file rather than millions of lines of code. Want to change the application then change the design and regenerate the whole application. Done this.
Intuit's software uses like it's been written by some undergrad CS students. They make among the most disorganized software I have ever seen and what would never pass a competent professor's eye just crops up in their software.
Needing to restart every day so you can update the timestamp? Really?
I will complement their NON-techies on convincing so many banks across the nation to go on board with their software. That is a very impressive feat. But their techies have my ire.
Maybe Intuit does feed their programmers well. Now if they would just hire some decent support people. We used to use a multi-currency version of QuickBooks, and the errors were simply astounding in their stupidity. As one, minor example: it was completely clear that some conversions were handled using floating point numbers, with the inevitable decimal rounding errors. At the end of the year, we had huge currency conversion errors - far beyond what even floating-point errors could explain - and essentially impossible to justify to the tax authorities.
There were lots of other problems as well. Trying to report errors was like talking to a black hole. The one time we really needed some real-time support, we spent ages on hold, or going around in circles with different people, and wound up getting no useful help at all. In the end, the only solution was to go back to a single-currency system, and deal with currency outside of QuickBooks.
Still, as bad as our experiences with QuickBooks have been, there's nothing better in the same price category.
Enjoy life! This is not a dress rehearsal.
when the Windows and Mac versions of Quicken use different file formats and the conversion process between the two platforms has been fraught with errors forever?
What do they do with the rest of their time? Test it?
http://michaelsmith.id.au
How many lines of code would it take them to implement Nyan Cat??
A monkey hitting keys at random on a keyboard for a finite amount of time will almost surely code a 10 Million LOC program, such as the complete works of Intuit.
* adaptation of the Infinite monkey theorem
is shit
So 10 million LOC? meh! seen that. INBD.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
And it still is a piece of shit.
They arent managing those 10 million lines very well. QB is the bane of my IT existence.
I don't know how many of those 10,000,000 lines are auto-generated. The project I'm working on now is in Java and I'm sure many hundred thousand lines came spewing out of the various toolkits with an "autogenerated - do not modify" comment at the top.
Of course if Intuit had used Python they still might have 500,000 LOC
The last time that I tried to contact Intuit about Quicken on Linux was a mess:
http://dotancohen.com/eng/quicken_on_linux.html
I certainly hope that they handle their code better than they handle their customers.
So you filled out a crappy web form that makes you log in and got a reply within 2 hours from a large corporation with the correct answer without any lies or bullshit? That seems like perfectly acceptable customer service. That they did not give you the answer you wanted is inconsequential to the quality of customer service. Granted I don't believe for a second they actually ever intend to make a Linux version of their software, but they came right right out and admitted they have no plans.
I'm a good cook. I'm a fantastic eater. - Steven Brust
10 million lines of code doesn't need to be any more complex or confusing that 4 million lines of code, or 2 million lines of code, or 500,000 lines of code, et cetera.
Good organization, regression testing/QA, and DRACONIAN check-in rules make it possible.
I've never worked in 10 million lines of code before, but I've worked in 4 million line products (SoftImage/Microsoft.)
Everything was organized nicely, well written (for the most part), and most importantly - we had a very very rigid process for checking in that worked really well. We had 80 people working in the codebase - the subsection you worked on (i.e. "mentalray dag traversal" or "render farming") would have maybe 4 or 5 people working in it at any one time so although the codebase was huge (including active work in the DS framework XSi was based on) the scope of conflict was usually relatively small.
In the years I worked there I never saw the build break except when someone did not follow the check-in procedure. They brought out a really big hammer for times like that and hung the developer up like a pinata...
Loading...
Ever read "Les Miserabes" or "War And Peace"? Ever notice that many 19th century novels are HUGE?
That is because they paid by word.
It would be interesting to see what would happen if a company experimented with metrics for and paying by:
- the fewest lines of code for a given task
- speed
- useful error messages
- ease of maintenance
- fewest memory leaks, least memory usage
10 million? For an accounting app? Seriously? Something seriously wrong here. Of course this is no surprise when you're asking why the Mac versions have no feature parity to the Windows versions. This is no surprise that the most obvious of features e.g. a real bill-of-materials feature for QB Manufacturing edition continues to elude us. Maybe they're writing the thing in native assembly language.
From what I've seen, you also have the issues where real CPAs prefer software to "speak their own language", while most small to medium size business owners just want a solution they can use every day without too much hassle, and can hand the data off to the accountant at tax time every year.
I work at a company who standardized on ACCPAC accounting software back when it was a DOS based program. These days, it's a huge, bloated, slow Windows-based part of a Sage ERP solution - but we still use it.
It's clearly far more powerful and flexible than Quickbooks, but at the same time, less user-friendly and a much bigger financial commitment to license properly.
After all these years, it seems accounting packages still wind up in one of two categories: easy to use, friendly packages with very limited expandability, and huge,complex packages that ONLY accounting majors really understand how to use properly.
In the more user-friendly, less costly, and easy for non-accountants to use category, you've got programs like MYOB and Quickbooks, but not a whole lot else....
It's a respectable size, of course, and one that requires a intelligent management, but in 2012 it isn't a large codebase.
Linux 3.5 comprises 10,389,941 lines of code (per sloccount), and that's just a kernel + drivers + architecture dependent files. I'm sure Windows is at least 50M LOC, and it wouldn't surprise me at all if it tops 100M. I work for Google, and while I'm not sure I can say how much code we have, it's far, far more than 10M lines. I used to do a lot of work with major financial institutions, and I'd estimate that most of them have on the order of 100M LOC.
I'm sure Intuit does some useful things that would be interesting to learn about, but I don't think I'd consider them a case study in how to manage a large codebase. They don't have a large codebase. I suppose they have a large codebase for a small to medium-sized software company, but many enterprises and large software companies manage much more code.
Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
Could you point me to those registry changes? I've been fighting with Sickbooks to get limited users (read: users, not super users or admins) to run Quickbooks. I used the settings that Intuit specified, but no go. Then I created a domain group "quickbooks users" and gave them full ownership of all the folders and registry keys that they should need. No joy. Now all "quickbooks users" are super users on their local machine.
Still won't allow them to do the update that it bugs the users about ever couple of weeks when they decide to push a new release that doesn't fix anything you need and breaks more stuff you do need. The installer fails citing that the user isn't an admin (why not check this before you nag them?). It doesn't check the permissions, it just fails when it does the GID check.
Quickbooks is the only software I've ever seen that makes you trash your box just to get it to mostly run. Bonus points for it insisting on installing an old version of Flash. I've been dealing with this stuff since the 2005 or 2003 version. It's maddening and I want to switch to XTuple Postbooks ( xtuple.com). It's open source and runs on Windows, Mac and Linux ( source forge page). Unfortunately, no one is going to want to make that switch since they know Quickbooks.
If I mod you up, it doesn't necessarily mean I agree with what you've said, sorry.
Up until 2010 they didn't even support Linux for their web-based "online" version of the software, you had to spoof the user agent.
sysadmins and parents of newborns get the same amount of sleep.
If the task really requires that much code, and you manage it successfully, it is something to brag about.
I'd be surprised if they add code just to add it. While I suspect there is bloat and code they are too scared to re-factor away, this is probably a very large sophisticated code base, and they apparently manage it.
When people stop using lines of code as any sort of useful quantification of application worthiness or personal skill level. When I hear someone mention how many lines of code their application is, my first thought is that there is a whole lot of fat that needs to be trimmed -- or that they are terrible, inefficient programmers. It's about having nothing left to take away, not adding more to the pile.
How many lines of code are in QuickBooks for customer shafting purposes? Every year there is a trivially different new version of the program with a completely different file format, so a file created in QBn cannot be read by QB.lt.n. Also, when QBn reads a file from QB.lt.n, it converts the file to the QBn format; thus any changes made using the new version of QB cannot be used by the older version. Nice. Another touch is that the payroll updates only work for 3 years, so a company using the payroll feature has to buy, install, test and train a new version of the program, with the related hassles, for no benefit except the incremental revenue to Intuit. If they would have their data files in a defined, consistent, published SQL format, they could cut the code dramatically. This would also allow for report-writing to be separated from the transaction processing instead of the current monolithic mess. These guys make Microsoft look nice.
What product other than their Enterprise server runs natively on Linux?
I don't consider WinXP, Vista, etc. to be "multiple platforms", just different version of the same platform.
Accounting software is like modes of transportation. Before the engine was invented, more horses were added to pull a heavier weight and it was the standard until engineers invented the engine. Intuit made old paper concepts electronic rather than understanding the true options provided by being able to change text on the screen... :)
Outside of bugs and unhappy software engineers whom I know personally that work 50 hours+, how can Intuit not grasp that most small businesses operate on a seasonal pattern?... If you are an executive or product owner from Intuit and reading this, you have 2-3 years to get the concept in there before I personally will make Quicken obsolete as a business concept.
So you filled out a crappy web form that makes you log in and got a reply within 2 hours from a large corporation with the correct answer without any lies or bullshit? That seems like perfectly acceptable customer service. That they did not give you the answer you wanted is inconsequential to the quality of customer service. Granted I don't believe for a second they actually ever intend to make a Linux version of their software, but they came right right out and admitted they have no plans.
I am not complaining about the answer, it is quite what I expected. I am complaining about the process that one must go through to contact a sales rep.
It is dangerous to be right when the government is wrong.
Up until 2010 they didn't even support Linux for their web-based "online" version of the software, you had to spoof the user agent.
If spoofing the UA worked, then they weren't "not supporting Linux" but rather "actively blocking Linux".
It is dangerous to be right when the government is wrong.