<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13502160</id><updated>2011-11-30T14:30:18.594-05:00</updated><category term='grammar'/><category term='yahoo'/><category term='finance'/><category term='coop'/><category term='xoogler'/><category term='adsense'/><category term='rant'/><category term='google'/><title type='text'>Software Rants &amp; Other Miscellany</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13502160.post-9023505814723771404</id><published>2011-07-10T15:53:00.003-04:00</published><updated>2011-07-10T16:14:28.011-04:00</updated><title type='text'>Not All Early Optimization is Premature</title><content type='html'>&lt;div&gt;&lt;a href="http://thegongshow.tumblr.com/post/6787330290/speed"&gt;Andrew Parker&lt;/a&gt; and &lt;a href="http://www.codinghorror.com/blog/2011/06/performance-is-a-feature.html"&gt;Jeff Atwood&lt;/a&gt; have both had great posts recently about performance as a feature, but I think they've each actually stopped short of a powerful point - improving a product experience by 10 or 20 percent through optimization is great, but there's incredible power when you unlock fundamentally different feature sets through radical optimization. This is an area that the code-first-then-optimize process misses entirely, because incremental improvements on the same basic design will never lead to order-of-magnitude performance improvements.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The power of such performance improvements is one of the most important lessons I learned at Google. A couple examples demonstrate the kind of optimization I'm thinking of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In 2004, when the standard storage for webmail was 2MB, Google was able to launch Gmail with 1GB of storage, because &lt;a href="http://en.wikipedia.org/wiki/Google_File_System"&gt;GFS&lt;/a&gt; provided a means for managing disk that was orders of magnitude cheaper than what the other providers were using. Rumor has it that Yahoo went out and gave NetApp millions of dollars to buy storage devices in order to come anywhere close to what Google was offering. Underlying this all is an optimization of storage and disk that was deeply more efficient that what others in industry were capable of at the time.&lt;/li&gt;&lt;li&gt;One of the coolest features of Google maps is the ability to see a route, then grab it with your mouse and drag it to change the route. That feature is possible because &lt;a href="http://googleblog.blogspot.com/2007/11/road-to-better-path-finding.html"&gt;Google developed a radically more efficient route-finding algorithm&lt;/a&gt;, years ahead of what anyone else in the market can offer. The difference between computing a route in 1 second and computing it in 10 milliseconds means you can suddenly offer users the ability to compute hundreds of times more routes.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;It's part of the modern software engineering zeitgeist that "premature optimization is the root of all evil," but as I researched this post, I found out that the full Knuth quote is a lot more illuminating than just that snippet; the full statement attributed to Knuth is actually, "&lt;a href="http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize"&gt;We should forget about &lt;b&gt;small&lt;/b&gt; efficiencies, say about 97% of the time: premature optimization is the root of all evil&lt;/a&gt;" (emphasis mine).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So yeah, we can all agree that "performance is a feature," but that fails to convey the power of high-performance systems. We can talk about caching database results or using a CDN for static content, and everyone should be doing those things, but let's not be afraid to go much, much deeper. Consider the core operations of your service, then imagine that you could speed them up by 100x - what radically new features would be enabled? With those radical new features in mind, start working backwards to figure out actually make those 100x improvements.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The big challenge is that these order-of-magnitude optimizations are design optimizations, not the kind of changes you can make after the fact. In design discussions, the engineer arguing for keeping the entire datastore in memory is immediately shouted down with the "premature optimization" line, but I think it's time we start fighting back on behalf of design-time optimization.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-9023505814723771404?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/9023505814723771404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=9023505814723771404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/9023505814723771404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/9023505814723771404'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2011/07/not-all-early-optimization-is-premature.html' title='Not All Early Optimization is Premature'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-514888366413180155</id><published>2011-05-23T16:27:00.003-04:00</published><updated>2011-05-23T16:39:07.455-04:00</updated><title type='text'>My hardest bug</title><content type='html'>&lt;div&gt;Lately I've been thinking a lot about the question "What is the hardest bug you've ever tackled?" It's an interesting index into the interests and style of different software engineers, and usually provides a jumping off point for a really great conversation. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With that in mind, I figured it was time to write up my hardest bug. This is a pretty old one, but I still enjoy it for just how head-slappingly bad the eventual resolution was.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Early in the year 2000, I was working on a cool cross-platform data warehousing product. One of the coolest things about it was that we had a vendor-independent SQL macro layer, so normal developers could write in one SQL dialect, and it would automatically translate to each of the underlying platforms (eg, SQLServer, Oracle).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My first project was to port the reporting engine to DB2; it was relatively straightforward, it just required figuring out some of the idiosyncracies of DB2, auditing the code to match those, and getting the regression tests to pass.  It was a fun project and shipped without much trouble. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A couple months later, though, our largest DB2 customer called in with major complaints about reporting performance. This was my responsibility, so I took a copy of their logs and started digging in. The weird thing was, the logs showed that all the database queries were running very quickly, and yet, periodically, there were these weird 30 second gaps in the logs, as though nothing were happening at all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I instrumented the code a bit more, shipped a patch to the customer, and asked them to send back new versions of the logs. Everywhere I had added log statements continued to show things running smoothly, and yet, there were still those odd gaps where nothing was happening.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In desperation, I asked the customer to send me a full copy of their datamart, which they did, and after taking a day to get the system up locally, I tried out the problem operations, and they ran perfectly fine - no performance issues, no weird gaps in the logs, nothing. Now I was really annoyed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I returned to instrumenting the log files, adding a log statement after nearly every line of code. When the customer sent me the output of this very detailed logging, I could identify the exact line of source code that corresponded to the gaps, but I looked at it and said “there’s no way this could be taking 30 seconds, all it’s doing is macro replacement from our SQL meta-language to DB2 - it’s a straight string substitution.”&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Still, I dug into it a little more, and that’s when my mind was blown. It turned out that the developer who had ported the macro language to DB2 had changed the string-replacement function to do a database query as part of the replacement step. The query had a performance profile that would grow as the square of the size of a certain internal log table, so the longer a system had been in production, the longer it would take to do string substitution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It hadn’t shown up in the local test I did because I had only replicated the warehouse data, not the operational data, and it didn’t show up in the logs in production because the developer had intentionally covered his tracks to route around our built-in query logging. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once we hit on this, it was a matter of minutes to refactor the n^2 query and ship a patch to the customer.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-514888366413180155?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/514888366413180155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=514888366413180155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/514888366413180155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/514888366413180155'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2011/05/my-hardest-bug.html' title='My hardest bug'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-1007532037535272503</id><published>2011-04-10T18:07:00.002-04:00</published><updated>2011-04-10T18:12:02.494-04:00</updated><title type='text'>Making Effective Use of Code Reviews</title><content type='html'>&lt;div&gt;I’ve been reading chunks of &lt;a href="http://www.amazon.com/gp/product/1430219483/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1430219483"&gt;Coders at Work&lt;/a&gt; this weekend, and the topic of code reviews has come up a few times.  Code reviews are clearly a very useful development technique, but it can be tricky to apply them in a way that improves code quality without slowing productivity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Poking around the web, I don’t see a lot of great writing about code reviews, so I wanted to share the guidelines we use at &lt;a href="http://www.yext.com"&gt;Yext&lt;/a&gt; for effective code reviews.  The guidelines below are captured from an email I sent to the the engineering team almost a year ago, and I’m proud to say that our code reviews do a lot to improve code quality while keeping the team operating at peak efficiency.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These guidelines are heavily biased by my experience at Google. There, I saw how code reviews could identify and eliminate many preventable bugs, including many that the original developer never would have found. I also saw innumerable cases of reviewers who lost perspective on the larger goals of the team and the company, and thus acted to prevent progress on important projects as a result of matters of personal preference or sheer obstinance.  My goal for Yext is that we capture the best aspects of code reviews while eliminating the worst.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With that in mind, my recommendation for code reviews is that they address the following points:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Correctness&lt;/b&gt;: Does the code do what it claims to do?  Is the code correct in both the nominal case and the boundary cases?  As a reviewer, this is your opportunity to point out edge conditions of which the original developer may not have been aware.  An important special circumstance is when you may be aware of legacy systems or features that interact with the modified code in some non-obvious way.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Complexity&lt;/b&gt;: Does the code accomplish its task in a reasonably straightforward way?  If you can point out simpler approaches that do not compromise the correctness or performance of the code, you should.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Consistency&lt;/b&gt;: Does the code achieve its basic goals in a way that is consistent with how similar code in the codebase achieves those goals?  Is it re-using the available libraries and utility classes?  Where possible, has code been refactored for re-use instead of just copying and pasting?&lt;/li&gt;&lt;li&gt;&lt;b&gt;Maintainability&lt;/b&gt;: Could the code be extended by another developer on the team with a reasonable amount of effort?  More than any item on the list, this is the karma investment you make by doing code reviews – the code you review today may be the code you have to update tomorrow, so taking the time to make sure it’s maintainable by others pays itself back to you.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Scalability&lt;/b&gt;: Will the code be performant at the expected volumes?  It is important that this question always be asked in the context of expected volumes.  When building a new product in an untested market, it is fine to write code that works for 100 users but not 10,000; if the product should be that successful, you can profile, optimize, and, when necessary, re-write the critical bits.  The corollary is that you should not spend time optimizing code when the market demand is unproven.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Style&lt;/b&gt;: Does the code match the team style guide?  This should rarely be controversial.  The obvious assumption here is that your team should have a style guide.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;There are some items I believe should only rarely be addressed during a code review:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Scope or mission feedback&lt;/b&gt;: “I don’t think you should be doing this project” is almost never a useful comment for a code review. If you think the team is embarking on projects that are not worthwhile, that is great feedback to share, but not in the context of a code review.  The exception here is if someone is introducing a new way of doing something that is already well-handled in some other way.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Design review&lt;/b&gt;: A code review is not the time to evaluate the overall design of a project.  For example, "I don't think you should be using the DB to store this data" is not useful.  It is incumbent upon the developer to have their designs reviewed before implementation, and there will be scenarios in which the fundamental design is questioned during the implementation, but for a project that has been through a design review, let the results of that design stand.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Personal preference&lt;/b&gt;: “I would rather you do it my way” is an invitation to an unproductive debate.  If you have a way that is demonstrably better, you should always argue for it.  The hardest part about this point is identifying when a review has deteriorated to matters of personal preference; the hallmark I spot most often is when people are trading hypothetical scenarios in which alternative solutions might be advantageous, with no way of determining the likelihood of said scenarios.  In these cases, the default is to use what the developer has already written.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;How can you, as the developer, write your code in such a way as to make a code review?  A few simple practices help.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Correctness&lt;/b&gt;: Comprehensive unit tests are the best demonstration that code functions as intended.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Complexity&lt;/b&gt;: Favoring small methods and cleanly-separated functional units makes it easy for your reviewer to see how everything fits together.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Consistency&lt;/b&gt;: When building new functionality, you can maximize the consistency of your code with existing work by taking the time to research how similar code solves similar problems.  If you suspect someone else has solved the same problem before, ask!&lt;/li&gt;&lt;li&gt;&lt;b&gt;Maintainability&lt;/b&gt;: Thorough commenting and the use of meaningful names throughout your code help ensure that others will be able to easily understand your code.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Scalability&lt;/b&gt;: My #1 recommendation in demonstrating the performance of new code is to just take 30 minutes and write a little driver to run your code through its paces.  This can be total throwaway code, but simply being able to tell your reviewer that you’ve done a performance test makes this topic less debatable.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Style&lt;/b&gt;: The most important thing you can do to maintain style consistency is to configure your editor to implement your style guide.  (As an aside, this also means that your team should adopt a style guide that is simple to automate in the editors used by the team.)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Even when everyone on the team follows these guidelines, there will frequently be strong debate during code reviews, and that’s a great thing - the point of these guidelines is to focus the debate on what matters.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All of this ignores some very tactical questions about code reviews like what code gets reviewed and what tools we use to aid that process.  If you’re interested in hearing more about that, leave a comment and I will follow up with another post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-1007532037535272503?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/1007532037535272503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=1007532037535272503' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/1007532037535272503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/1007532037535272503'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2011/04/making-effective-use-of-code-reviews.html' title='Making Effective Use of Code Reviews'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-4498398045834440677</id><published>2011-03-13T20:49:00.005-04:00</published><updated>2011-03-14T08:29:07.917-04:00</updated><title type='text'>The Dark Side of Passion</title><content type='html'>&lt;span class="Apple-style-span"  &gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; " id="internal-source-marker_0.7784135848287027"&gt;There  was a lot of great response to my post about the &lt;a href="http://blog.jayteebee.org/2011/03/foursquare-facebook-founders-and.html"&gt;Passion Gap&lt;/a&gt;,  but some people misunderstood it to mean that I fall in with the camp of career  counselors who tell you to “&lt;a href="http://www.amazon.com/gp/product/0440501601/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0440501601"&gt;do what you love and the money will follow&lt;/a&gt;”.   While I believe that doing something you love is important, I also  strongly believe that following your passion must be grounded in reality.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: transparent;"&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;This  first became clear to me when was in high school.  Sometime during  freshman year, they marched us all into the career center and made us  look up the key facts on our ideal jobs.  We had to find out good  college majors to prepare us for those careers, the demand for people  with those jobs, and the average pay we could expect.  I looked up the  job I’d be dreaming about since age 9, and I was  incredibly disappointed at the average salaries.  When my father was pushed into early retirement while I was a senior in high school, the cold hard reality of making a living was a key input in my eventual decision to study computer  science.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: transparent;"&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;To be completely clear, I’m  incredibly happy with what I do - I love going to work every day.  But I also love providing for my family.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: transparent;"&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;Moderating  your passion with realism is not at all inconsistent with having a deep  enduring passion for your startup.  Even Dennis Crowley, protagonist of  the Passion Gap post, is on the record saying that the one thing he  most wants to be good at is … &lt;a href="http://blog.onething.com/post/540962364/dennis-crowley-my-one-thing-is"&gt;karaoke&lt;/a&gt;.  But belting out Whitesnake just doesn't pay the bills.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: transparent;"&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;The  dark side of passion is blindly following a passion that won’t support  you.  &lt;a href="http://calnewport.com/blog/2010/10/16/the-passion-trap-how-the-search-for-your-lifes-work-is-making-your-working-life-miserable/"&gt;This post at Study Hacks&lt;/a&gt;  goes so far as to make the argument that the “follow  your passion” culture is responsible for the fact that self-reported job  satisfaction rates have fallen every year since measurement started in  1987 - the argument is that because people are so focused on the perfect job, the one they  can be most passionate about, they are ultimately disappointed by having  simply a great job.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: transparent;"&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;The  unrealistic view that it’s sufficient to simply be passionate about  something and not match that passion to reality is captured in &lt;a href="http://www.nytimes.com/2009/10/04/opinion/04williams.html"&gt;this  op-ed from the Times&lt;/a&gt; in 2009, in which the author describes a difficult search for work as an art instructor, despite qualifications including an MFA.  The author admits, “In my master’s program,  we … tried not to dwell on earthy, unpleasant topics like money, or how  to make it.”&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: transparent;"&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; "&gt;&lt;span class="Apple-style-span"  &gt;As  I said in my earlier post, I deeply believe that passion can be a  competitive advantage for startups, and I also think it’s crucial to  success in most everything else, but that passion must be channeled in a way that is connected to reality.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-4498398045834440677?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/4498398045834440677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=4498398045834440677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/4498398045834440677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/4498398045834440677'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2011/03/dark-side-of-passion.html' title='The Dark Side of Passion'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-2619723796305621085</id><published>2011-03-09T08:27:00.003-05:00</published><updated>2011-03-14T09:12:33.560-04:00</updated><title type='text'>Foursquare, Facebook, Founders, and Passion</title><content type='html'>&lt;div&gt;Late in the summer of 2009, I was talking to a very successful entrepreneur at a tech industry meet-and-greet when &lt;a href="http://twitter.com/dens"&gt;Dennis Crowley&lt;/a&gt;, co-founder of &lt;a href="http://www.foursquare.com/"&gt;Foursquare&lt;/a&gt;, came into the room, at which point the person I was talking to commented, “I first met Dennis at 3am on a street corner on the lower east side.  I have never met another founder who is a more direct physical embodiment of their startup.”&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That comment always comes back to me when I hear someone saying that a particular startup “is just a feature,” or, “has no defensible technology,” or, “could be replicated in a weekend.”  There are a lot of startups out there that are subject to this critique, and yet, they continue to do extremely well in the face of competition.  And I think, in many cases, it derives from the fact that these founders are the physical embodiment of their startups.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the case of Foursquare, we should expect by now that Facebook Places would have obliterated the use of Foursquare.  And yet, as SAI points out this morning, &lt;a href="http://www.businessinsider.com/chart-of-the-day-foursquare-users-2011-3"&gt;Foursquare’s user base has doubled since the launch of Facebook Places&lt;/a&gt;.  That’s pretty stellar growth in the light of competition that should be winning on every dimension.  And that’s before the release of the awesome goodness that is &lt;a href="http://blog.foursquare.com/2011/03/08/foursquare-3/"&gt;Foursquare 3&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Why does Foursquare just keep winning?  If I could tell you the specific features or user interactions that are lacking in Facebook Places, I’d be a rich man.  I’m in the Facebook mobile app 3 times a day, minimum, let alone being on Facebook over the web at least twice a day - I should be using Places all the time, and yet I just keep coming back to Foursquare.  Somehow Foursquare just hums.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This, to me, is the difference between a product built by someone who is deeply invested in the in the underlying product idea, as compared to a product built by someone who is just trying to check off a set of feature boxes.  This is what I think of as the Passion Gap.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you’ve ever heard Dennis talk about Foursquare, or mobile devices, or cities, you can’t help but see that everything you think of, he’s already thought of, turned over in his head eight times, and reached the conclusion that you would eventually come to if you spent eighteen months in deep thought about the topic.  Does Facebook have a Dennis Crowley?  Or do they have a product manager who just started thinking about location-based services eight months ago?  That PM may have 600 million users and every engineering resource they desire, but they haven’t spent the last ten years thinking about how to get people more engaged with their cities via their mobile devices.  The difference between Dennis Crowley and that Facebook PM is the Passion Gap.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Passion Gap is evident when you see a founder or product manager so deeply engaged in their product that they can’t help but think about it all the time, and, as a result, they see all the fine details that are required to make a product that exactly matches what the market needs.  This is true even when the market hasn’t yet realized the need.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another great demonstration of the impact of the Passion Gap is the difference between &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt; and &lt;a href="http://www.experts-exchange.com/"&gt;Experts Exchange&lt;/a&gt;.  StackOverflow is amazing, and we should all be thankful to Jeff Atwood for creating it.  But Experts Exchange is basically the same product idea, created years before, with an entrenched user base.  And yet, somehow the user experience at Experts Exchange is all friction, whereas StackExchange just hums.  If you’ve read any of &lt;a href="http://www.codinghorror.com/blog"&gt;Coding Horror&lt;/a&gt;, it makes perfect sense - Jeff Atwood has a deep passion for making every software engineer out there better at what they do.  Of course someone with that passion was going to be the one to make a tremendously useful knowledge-sharing site for software engineers!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I think of the Passion Gap whenever someone claims that a successful startup has “no defensible technology”.  For some of the most interesting companies out there right now, the key bits of technology are not in some single large algorithmic piece, but rather in dozens of fine-grained product choices that make a total experience.  The people who accuse those products of lacking defensible technology are taking a one-dimensional view of the product.  It’s like we’re all color-blind to the features that make the product hum, and yet these highly passionate founders see the colors we’re completely unaware of.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just to enumerate some other examples of where I see the Passion Gap at work:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Andrew Mason (&lt;a href="http://www.groupon.com/"&gt;Groupon&lt;/a&gt;) - Andrew’s startup prior to Groupon was &lt;a href="http://www.thepoint.com/"&gt;The Point&lt;/a&gt;; it was a startup for social causes where one person acting alone could not have an impact.  I would have to guess that Andrew Mason's passion isn’t about marketing local businesses, as much as it is about leveraging the power of groups of people acting together.  Certainly, we have to assume that his time spent thinking about the dynamics of group action while working on The Point provides a nice competitive advantage to Groupon.&lt;/li&gt;&lt;li&gt;Mark Zuckerberg - the &lt;a href="http://www.time.com/time/specials/packages/article/0,28804,2036683_2037183_2037185,00.html"&gt;Time Man of the Year profile of Zuckerberg&lt;/a&gt; does an excellent job of showing just how passionate Zuckerberg is for thinking about personal relationships and how to extend them with technology.  Remember for a moment that when Facebook first started to get big, many people thought it was just another wave in the Friendster/Myspace ebb and flow of social networking sites.  I see Zuckerberg's passion as key to how Facebook achieved and maintained dominance.&lt;/li&gt;&lt;li&gt;Steve Jobs - Steve is an interesting case, because his passion, by observation, seems to be more about beauty in technology rather than any particular product application.  And yet, Apple consistently puts out products where the beauty of the thing itself is a huge part of the sales appeal.  The Passion Gap is particularly well-demonstrated when competitors set out to copy and improve upon Apple’s category killers, for example, the Zune.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The most common way that people talk about the Passion Gap is when they advise you to “start a company that scratches your own itch”.  I posit that the underlying logic in that advice is that the best startup you can create is one where you will be constantly engaged in thinking about improving the product, maximizing the user experience, and planning for the future -where you have real passion for making it work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, the next time you see a startup with “no defensible technology”, take a look at the founder, analyze their passions, and consider whether their defense lies in the Passion Gap.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Addendum: &lt;/b&gt;Please check out the follow-up post to this one, &lt;a href="http://blog.jayteebee.org/2011/03/dark-side-of-passion.html"&gt;The Dark Side of Passion&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-2619723796305621085?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/2619723796305621085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=2619723796305621085' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2619723796305621085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2619723796305621085'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2011/03/foursquare-facebook-founders-and.html' title='Foursquare, Facebook, Founders, and Passion'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-8313155741082485489</id><published>2010-11-12T08:59:00.002-05:00</published><updated>2010-11-12T09:18:22.766-05:00</updated><title type='text'>I'm calling it now: The engineering talent bubble</title><content type='html'>My 6th grade composition teacher would dock me 10 points for throwing my thesis right up into the title, but I just want to go out there and call it now: we are in the middle of a bubble of valuations for individual software engineers.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What do I mean by bubble?  For my purposes, a bubble exists when prices of some commodity are increasing at a blistering pace that becomes disconnected from reality.  Most of the time we fail to recognize a bubble because we think "this time it's different."  This time is NOT different.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What are the signs of the bubble?  Two key things I see include:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Google paying outrageous retention bonuses to keep people from leaving for Facebook (see &lt;a href="http://techcrunch.com/2010/11/11/google-offers-staff-engineer-3-5-million-to-turn-down-facebook-offer/"&gt;here&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Startups, less than two years old, with very little user traction and no revenue, getting acquired simply for talent, at valuations that give even the front-line engineers a seven-figure outcome.  (I won't provide any links here because I don't want to point too many fingers)&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Maybe even more importantly, though, the key anecdotal indicator of a bubble is when it becomes "common sense" that prices will always go up or sustain the current market.  That is what I am seeing more and more every day now - software engineers saying they're sure they can start a "company", sit in their apartment for a year, and then get acquired by Facebook for $10 million.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The unfortunate thing about a bubble is that it always bursts.  You can argue that this bubble won't burst, because the number of software engineers is relatively fixed, and the demand is going up pretty drastically these days.  However, a few years ago, people argued for the real estate bubble by saying "they aren't making any more land".  That bubble didn't burst because supply expanded, it burst because demand collapsed as the ability to pay fell through the floor.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is going to end, and badly.  There are a lot of engineers who are going to make serious life choices based on current trends, and in a year or two, when this blows up, they will find themselves unemployed and without savings.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-8313155741082485489?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/8313155741082485489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=8313155741082485489' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/8313155741082485489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/8313155741082485489'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2010/11/im-calling-it-now-engineering-talent.html' title='I&apos;m calling it now: The engineering talent bubble'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-5826329030396300268</id><published>2009-09-15T08:08:00.005-04:00</published><updated>2011-03-14T08:32:06.019-04:00</updated><title type='text'>Please Drive Your Kids to School</title><content type='html'>&lt;span class="Apple-style-span"  &gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;The article in Sunday's Times about &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.nytimes.com/2009/09/13/fashion/13kids.html?_r=1"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;driving your kids to school&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt; has generated a lot of discussion.  I just posted a mini-rant in Reader about this, and figured it was worth re-posting here.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  &gt;As a parent and a computer scientist, to me this comes down to basic probability theory.  The idea of the "only 115 abductions a year" stat is to make it sound as though the chances are so low that it's not worth protecting against.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  &gt;As we all remember from discrete math, though, you don't care about the probability, you care about the &lt;a href="http://en.wikipedia.org/wiki/Expected_value"&gt;expected value&lt;/a&gt;.  As a parent, the cost of losing a child is, for all practical purposes, infinite.  So any "lose my child" event with non-zero probability becomes worth preventing against.  The cost of driving a kid to school each day is astonishingly low; there's no point in NOT doing it.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  &gt;The author is basically appealling to the sentiment of "why aren't things the same as when I was a I kid?"  To them I say: the world changes, get over yourself.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  &gt;This is not meant to be an argument for protecting kids against all possible dangers, but driving your kids to school is pretty much a no brainer.  It's right up there with "should I buy my kid a car seat or not?"    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;By the way, most states these days have much stricter car seat and seat belt laws for children than when we were kids.  My kids will never know the joy of bouncing around, unrestrained, in the way back of an '85 Oldsmobile wagon.  That's life.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-5826329030396300268?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/5826329030396300268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=5826329030396300268' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5826329030396300268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5826329030396300268'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2009/09/please-drive-your-kids-to-school.html' title='Please Drive Your Kids to School'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-2588408979650326379</id><published>2009-07-24T10:44:00.005-04:00</published><updated>2011-03-14T08:31:11.676-04:00</updated><title type='text'>Using Puzzles in Interviews</title><content type='html'>&lt;span class="Apple-style-span"  &gt;&lt;a href="http://www.unionsquareventures.com/bios/albert.html"&gt;&lt;span class="Apple-style-span"&gt;Albert Wenger&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt; has a great post up on &lt;/span&gt;&lt;a href="http://www.continuations.com/"&gt;&lt;span class="Apple-style-span"&gt;Continuations &lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;about &lt;/span&gt;&lt;a href="http://continuations.com/post/148229250/using-puzzles-in-interviews"&gt;&lt;span class="Apple-style-span"&gt;Using Puzzles in Interviews&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;.  He makes a number of good points, most importantly:&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="color: rgb(34, 34, 34); line-height: 24px; "  &gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"&gt;1. Puzzles should be just one of many different parts of the interview.&lt;br /&gt;&lt;br /&gt;2. Try to find a set of puzzles that works for you and use the same puzzles with many candidates to get better comparability.&lt;br /&gt;&lt;br /&gt;3. Focus primarily on approach and behavior and only secondarily on outcome.&lt;br /&gt;&lt;br /&gt;4. Unless the position specifically calls for ability to think under stress (e.g. certain ops positions), try to put the candidate at ease.  Being in an interview is stressful for many folks.&lt;br /&gt;&lt;br /&gt;5. Ask for a vocalization or visualization of the thought process.&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span"&gt;I agree with most of this approach, but I still feel that everyone needs to be very cautious about using puzzles that are basically brain-teasers.  In the first comment on Albert's post, one of the readers made part of my point for me - they posted a potential puzzle, and it was immediately pointed out that is well known amongst the brain-teaser set.  I posted a fairly lengthy response on Albert's blog, but I figured I might as well cross-post it here.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color:#222222;"&gt;&lt;span class="Apple-style-span" style="line-height: 24px;"&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color:#222222;"&gt;&lt;span class="Apple-style-span" style="line-height: 24px;"  &gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;At the core, the most important distinction is between coding/algorithm puzzles and brain-teaser puzzles.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;E.g., one of the best interview questions I've ever been asked basically boiled down to performing bipartite graph matching - it required deep understanding of algorithms and how to match them to real-world problems, and then being able to implement the code behind them - pure awesome.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;On the other hand, some of the worst interview questions I've encountered are the form of "N pirates have to divide X gold among themselves" or "You're blindfolded in a room wearing a hat..."&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Brain-teaser questions tend to have the drawback that they are very uneven - for people who love brain-teasers, many brain-teasers are well-known or simple variations on existing problems, but for people who don't, they're starting without the benefit of any of the background.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;In addition, in my time at Google I saw heavy anecdotal evidence that brain-teaser aptitude correlates negatively with overall effectiveness as a developer.  Sometimes the developer who searches too hard for clever solutions winds up missing the simple solutions.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-2588408979650326379?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/2588408979650326379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=2588408979650326379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2588408979650326379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2588408979650326379'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2009/07/using-puzzles-in-interviews.html' title='Using Puzzles in Interviews'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-3791008250238169593</id><published>2009-07-09T16:48:00.004-04:00</published><updated>2011-03-14T08:33:18.133-04:00</updated><title type='text'>ImportError: No module named django.core (fun with Windows)</title><content type='html'>&lt;span class="Apple-style-span"  &gt;I just spent 45 minutes tracking this down, hopefully if I post a trace here, others will be able to resolve the issue more quickly in the future.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;span class="Apple-style-span"&gt;So I am building a little &lt;/span&gt;&lt;a href="http://www.djangoproject.com/"&gt;&lt;span class="Apple-style-span"&gt;django&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt; app at work, but my latest installed version of django is pre-1.0, so why not upgrade, right?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;After getting everything downloaded and running setup.py, I did the standard thing to start a new project:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;C:\Users\jtb\Documents\Clickable\src&gt;django-admin.py startproject myproject&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;div&gt;Traceback (most recent call last):&lt;/div&gt;&lt;div&gt;  File "C:\Python25\Scripts\django-admin.py", line 2, in &lt;module&gt;&lt;/module&gt;&lt;/div&gt;&lt;div&gt;    from django.core import management&lt;/div&gt;&lt;div&gt;ImportError: No module named django.core&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;All the &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.google.com/search?rlz=1C1GGLS_enUS291US306&amp;amp;aq=f&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=ImportError:+No+module+named+django.core"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;search results&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt; on that error pointed to issues with my PYTHONPATH, but no amount of tinkering with it would make django actually run.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;The real problem was that, due to a recent installation of Python 2.6, my PATH and my PYTHONPATH had fallen out of sync.  My PATH was pointing to the Python 2.5 directories, while my PYTHONPATH was pointing to the 2.6 directories.  It seems the Python installer I used knows how to update PYTHONPATH but not PATH.  Which makes sense.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;If you found this post through a web search and it helped you debug a similar issue, please post a comment.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-3791008250238169593?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/3791008250238169593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=3791008250238169593' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3791008250238169593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3791008250238169593'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2009/07/importerror-no-module-named-djangocore.html' title='ImportError: No module named django.core (fun with Windows)'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-6407181233466051460</id><published>2008-09-19T09:57:00.004-04:00</published><updated>2008-09-19T10:03:43.590-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xoogler'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Xoogler Tip: What happens to your email after you leave?</title><content type='html'>For all you Xooglers out there, here's a little tip to smooth the transition outside of the 'plex.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When you leave Google, your existing mail account becomes a black hole - all mail sent to the address silently goes away.  There's no bouncing or auto-responder.  No big deal, right?  Anyone at Google can probably get your new address off go/epitaph.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;BUT: If, like me, you worked with anyone outside of Google (for example, patent attorneys), they might not know about your departure, and they can haplessly send email into the black hole for months without discovering that you're not there any more.  I found this out recently when a lawyer who had been trying to reach me all summer finally found out that I had left the company.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Simple fix: before you leave, you can file a ticket to have an auto-responder set up.  If you've already left, your HR Business Partner can help you out.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-6407181233466051460?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/6407181233466051460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=6407181233466051460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/6407181233466051460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/6407181233466051460'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/09/xoogler-tip-what-happens-to-your-email.html' title='Xoogler Tip: What happens to your email after you leave?'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-764042159935862773</id><published>2008-05-30T10:22:00.000-04:00</published><updated>2008-05-30T10:24:03.823-04:00</updated><title type='text'>Happy Anniversary to Me!</title><content type='html'>I've been awfully silent for the past little while, and for no good reason, really.  But today is my 1-month anniversary at my new company, &lt;a href="http://www.clickable.com"&gt;Clickable&lt;/a&gt;, and I thought I'd take this chance to share a little about this transition.&lt;br /&gt;&lt;br /&gt;Clickable is an exciting place; we are building a software-as-a-service offering for people who want to manage their online advertising in a single, simple interface.  So if you are advertising with Google, Yahoo, and MSN, you can learn all of those products and spend time in all three of them managing and optimizing your accounts, or you can just log in to Clickable and do all your work in one spot.  The team at Clickable is immensely talented, and the product has real customers who find our product to be a big advantage over the services offered from the ad networks.&lt;br /&gt;&lt;br /&gt;I'm proud to say I have definitely found what I was looking for by leaving Google for a startup: tons of responsibility, the opportunity to have a major impact on a company, and the chance to learn a lot of new skills.  It's given me an enthusiasm for my work that was sorely lacking towards the end of my time at Google.&lt;br /&gt;&lt;br /&gt;I'm working as a semi-specialized engineering jack-of-all-trades.  My main focus is our optimization engine, which tells customers how to tweak their accounts for the best advertising results.  But I'm also working on a broad swath of other tasks, such as setting product direction, production firefighting, integration testing, customer analytics, and even a dash of business development.  Most importantly of all, &lt;span style="font-weight: bold;"&gt;I am hiring for talented engineers&lt;/span&gt;.  If you think the startup life is worth a try, leave a comment or shoot me an email.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-764042159935862773?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/764042159935862773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=764042159935862773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/764042159935862773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/764042159935862773'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/05/happy-anniversary-to-me.html' title='Happy Anniversary to Me!'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-5273755339859143580</id><published>2008-05-02T09:14:00.008-04:00</published><updated>2008-05-02T09:30:22.620-04:00</updated><title type='text'>What am I doing wrong with Reader off-line mode?</title><content type='html'>I'm temporarily commuting with a laptop that has no WLAN device, so I've been using Google Reader's off-line mode for the last couple days, and I've noticed the following oddness.&lt;br /&gt;&lt;br /&gt;I start out with a giant backlog of unread feeds, a la:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-MqB0jpB9Gs/SBsWyjHNQ3I/AAAAAAAABgU/dvny77ulxmA/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 529px; height: 359px;" src="http://1.bp.blogspot.com/_-MqB0jpB9Gs/SBsWyjHNQ3I/AAAAAAAABgU/dvny77ulxmA/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5195771652776739698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(Sorry for the quality of the screenshots in this post; if you click through to the original image on any of these, you should be able to see the folder counts clearly).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I synchronize to go off-line:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-MqB0jpB9Gs/SBsVLzHNQ0I/AAAAAAAABf8/zcZ71AGozIU/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 509px; height: 346px;" src="http://2.bp.blogspot.com/_-MqB0jpB9Gs/SBsVLzHNQ0I/AAAAAAAABf8/zcZ71AGozIU/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5195769887545180994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once that's complete, all my folders show fewer unread items than before, such that my total unread drops from "1000+" to 580:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-MqB0jpB9Gs/SBsVeDHNQ1I/AAAAAAAABgE/T0iN5yGo7VU/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 493px; height: 335px;" src="http://3.bp.blogspot.com/_-MqB0jpB9Gs/SBsVeDHNQ1I/AAAAAAAABgE/T0iN5yGo7VU/s400/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5195770201077793618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Such rapid progress!  Until I go back on-line again:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-MqB0jpB9Gs/SBsWMDHNQ2I/AAAAAAAABgM/2iCX7Ae1MEg/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 476px; height: 323px;" src="http://3.bp.blogspot.com/_-MqB0jpB9Gs/SBsWMDHNQ2I/AAAAAAAABgM/2iCX7Ae1MEg/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5195770991351776098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And now I'm back to "1000+". &lt;br /&gt;&lt;br /&gt;Anyone on the Reader team care to comment on this one?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-5273755339859143580?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/5273755339859143580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=5273755339859143580' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5273755339859143580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5273755339859143580'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/05/what-am-i-doing-wrong-with-reader-off.html' title='What am I doing wrong with Reader off-line mode?'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-MqB0jpB9Gs/SBsWyjHNQ3I/AAAAAAAABgU/dvny77ulxmA/s72-c/Picture+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-2907527414892265532</id><published>2008-04-11T07:09:00.002-04:00</published><updated>2008-04-11T07:16:03.670-04:00</updated><title type='text'>Today is my last day at Google</title><content type='html'>After nearly five years at Google, I am leaving the company, effective at the end of the day today.  My time at Google afforded a tremendous number of opportunities; I was able to take part in growing the company's &lt;a href="http://googleblog.blogspot.com/2005/04/its-wonderful-town.html"&gt;first remote engineering office&lt;/a&gt; from 5 engineers in 2003 to nearly 450 today, I was able to conduct blue-sky exploration of applying Google's data and computing infrastructure to web information extraction, and, more recently, I was able to help build an all-star team that just shipped &lt;A HREF="https://www.google.com/admanager"&gt;Google Ad Manager&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;Contrary to what glowing articles in &lt;a href="http://money.cnn.com/galleries/2008/fortune/0801/gallery.bestcos_top50.fortune/index.html"&gt;Fortune&lt;/a&gt; or &lt;a href="http://www.fastcompany.com/magazine/123/google.html"&gt;Fast Company&lt;/a&gt; might tell you, the best part of working at Google has nothing to do with the free meals, subsidized massages, or even the stock options.  The best part of working at Google has been the chance to collaborate, to innovate, and to explore with the most talented collection of people I could ever imagine.  Missing those people every day is the hardest part of leaving this company.&lt;br /&gt;&lt;br /&gt;I don't know yet what my next challenge will be, but I hope to go somewhere very small and take part in building a company from the ground up.  Wish me luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-2907527414892265532?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/2907527414892265532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=2907527414892265532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2907527414892265532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2907527414892265532'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/04/today-is-my-last-day-at-google.html' title='Today is my last day at Google'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-4121615322566632601</id><published>2008-03-17T20:06:00.002-04:00</published><updated>2008-03-17T20:10:07.463-04:00</updated><title type='text'>Followup: which skills to list on your first resume</title><content type='html'>Over at &lt;a href="http://www.techinterviews.in/"&gt;techinterviews.in&lt;/a&gt;, they've picked up on my recent series about writing your &lt;a href="http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your.html"&gt;first resume&lt;/a&gt; and posted some good &lt;a href="http://www.techinterviews.in/resume-of-a-fresh-computer-science-graduate/76"&gt;comments&lt;/a&gt;, including:&lt;br /&gt;&lt;blockquote&gt;There’s nothing like picking a language or operating system or database management system that a candidate listed towards the end of his resume, and having an interviewer, who’s the expert in the field (”Ah! So you did Nintendo DS assembly programming, too! Let’s discuss this in detail!”) then discover that the knowledge of this listed tech is, to say the least, limited. It makes the whole resume look like a creative writing projects, the aim of which is to specify as many buzzwords as possible.&lt;br /&gt;&lt;/blockquote&gt;I do advise undergrads to be a little liberal in listing technical skills, and I want to take the time to explain that a more clearly. &lt;br /&gt;&lt;br /&gt;Here's an example from my own experience.  One of my undergraduate research jobs was with a research group studying &lt;a href="http://act-r.psy.cmu.edu"&gt;human cognition&lt;/a&gt;, primarily via a cognitive modeling system built in LISP.  I joined the group in my sophomore year and stayed on through graduation, during which time I wrote several hundred lines of LISP glue code to manipulate my models and experiments.  By the time I was interviewing for jobs, I was very comfortable writing complex LISP code and tackling problems with a functional approach.  However, I knew very little about the overall design of the language or some of the important big concepts like &lt;a href="http://en.wikipedia.org/wiki/Common_Lisp_Object_System"&gt;CLOS&lt;/a&gt;.  But I still listed LISP on my resume.&lt;br /&gt;&lt;br /&gt;I recently had cause to write some LISP code for the first time in 10 years, and I was still able to work effectively in the language.  But I wouldn't even consider listing LISP on my resume these days, because it's far outside the core of my expertise.&lt;br /&gt;&lt;br /&gt;On the other hand, my first research job in college involved writing a mix of Fortran and C code for a parallel supercomputing group.  In the year or so I worked with that team, I probably wrote a few hundred lines of Fortran code, and it was ugly.  In my senior year, I left Fortran off my resume - if someone had asked me to write even a line of Fortran code, I would have been helpless.   In any event, I knew I didn't want to work for a company that would be excited by my experience with Fortran.&lt;br /&gt;&lt;br /&gt;In brief, when someone fresh out of school lists a particular technical skill, my expectation is that it conveys less expertise than when someone 10 years out lists the same skill.&lt;br /&gt;&lt;br /&gt;If you really want to be precise in listing technical skills, the best approach is to quantify your level of experience.  Some people take the straightforward approach of listing the number of years they've worked with a technology.  I find it more useful to communicate a self-assessment of your skill level, using phrases such as "expertise in ..." and "familiar with ..."&lt;br /&gt;&lt;br /&gt;But if you're just coming out of your undergraduate program, list anything where you think you can speak intelligently about the technology.  If an interviewer asks a question that goes beyond your expertise, admit it, and offer a quick description of how you've used that technology and what areas you're best suited to answer questions about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-4121615322566632601?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/4121615322566632601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=4121615322566632601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/4121615322566632601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/4121615322566632601'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/03/followup-which-skills-to-list-on-your.html' title='Followup: which skills to list on your first resume'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-4699014738947098723</id><published>2008-03-12T08:50:00.002-04:00</published><updated>2008-03-12T09:06:00.263-04:00</updated><title type='text'>The CS undergrads' guide to writing your first resume, part 3</title><content type='html'>Hopefully my first two posts in this series have given you a good idea about how to&lt;a href="http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your.html"&gt; start your resume&lt;/a&gt;, and &lt;a href="http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your_11.html"&gt;what to emphasize and downplay&lt;/a&gt;.  By now you've got a good draft, and you've had it reviewed by a number of friends.  What's next?  Take a pass over this list and make sure you're not committing any cardinal sins.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Some resume mistakes are so bad that you must never commit them.  Please.&lt;b&gt;  &lt;/b&gt;The ones that always set me off are:&lt;b&gt;&lt;br /&gt;&lt;/b&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;Multiple pages.&lt;/b&gt;  I've have reviewed hundreds, if not thousands, of resumes, and in all those examples I have seen only one multi-page resume come with a strong candidate behind it.  All the other ones, the ones where people list every class project, or every club they've been in, or the names of all their teachers in high school?  Worthless.  Take the time to distill your education and experience into the points that can be expressed in a single page of text.  If you can't get it down that far, hand a draft to one of your editors and ask them what's least interesting.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Spelling mistakes.&lt;/b&gt;  See my earlier comments about having several other people read your resume before you share it with any companies you're interested in.  When I see a really egregious spelling mistake, I will discard the resume completely. &lt;br /&gt;  &lt;/li&gt;&lt;li&gt;&lt;b&gt;Using the Microsoft Word resume template.&lt;/b&gt;  First off, the template just doesn't look that great, and second, it sends the message "I just put this together in five minutes because that's about how much I care about your company.  Please pretend not to notice."  I accept that page layout can be hard, but if you can't create something that looks decent, ask a friend for help.  The layout for my first resume came from a good friend who actually has a talent for these things, and I used it successfully for the next several years.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;A non-CS undergraduate degree followed by a CS Master's degree&lt;/b&gt; from either (a) a no-name computer science program, of (b) a top-tier school that is known to be a diploma mill for anyone with the money to buy a degree.  I'm not naming names here, but you know who you are. &lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;             Lastly, I just want to touch on the long-standing debate about whether or not to include an "Objective" at the top of your resume.  In the modern era, most resumes are submitted directly for one or a small number of job openings, so I'm going to assume that your objective is to get hired for one of those positions.  Including a comment in your resume to tell me you want a career like the one I have to offer you only wastes space that you could be using to tell me more about your background and expertise.  I say skip the objective, but you can decide what works best for you.&lt;br /&gt;&lt;br /&gt;Thanks for reading this far.  If you found this guide useful, please leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-4699014738947098723?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/4699014738947098723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=4699014738947098723' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/4699014738947098723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/4699014738947098723'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your_12.html' title='The CS undergrads&apos; guide to writing your first resume, part 3'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-3129328190817436380</id><published>2008-03-11T10:06:00.002-04:00</published><updated>2008-03-11T10:14:55.117-04:00</updated><title type='text'>Please keep your laptop open in meetings</title><content type='html'>Jeremy Zawodny has mixed but generally positive feelings about &lt;a href="http://jeremy.zawodny.com/blog/archives/010076.html"&gt;not having laptops open in meetings&lt;/a&gt;, but I think he's actually going after the wrong point.  What you really want is a "no distractions in meetings" rule - working on email, thinking about your vacation plans, or what you'd rather be doing at the time - are all detrimental to the effectiveness of a meeting.&lt;br /&gt;&lt;br /&gt;If you can avoid distractions like email or feed readers, a laptop is an invaluable tool in making a meeting more effective.  Almost every useful meeting I sit in these days involves constant references to documents stored in the cloud, real-time scheduling for follow-on conversations, and back-channel talk among participants.  All of these, obviously, require a network-connected laptop available throughout the meeting.&lt;br /&gt;&lt;br /&gt;Allowing people to keep their laptops open requires a certain amount of trust; namely, you're trusting that people will use their laptops to further the goals of the meeting, not to be virtually elsewhere while others are counting on your input and feedback.  But a laptop is a great tool; let's not throw out the good with the bad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-3129328190817436380?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/3129328190817436380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=3129328190817436380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3129328190817436380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3129328190817436380'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/03/please-keep-your-laptop-open-in.html' title='Please keep your laptop open in meetings'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-5423846650261567686</id><published>2008-03-11T06:36:00.002-04:00</published><updated>2008-03-11T06:46:09.076-04:00</updated><title type='text'>The CS undergrads' guide to writing your first resume, part 2</title><content type='html'>Ideally &lt;a href="http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your.html"&gt;yesterday's post&lt;/a&gt; gave you the basic structure for your first resume.  Today I'll give some more details on what to emphasize, and what to downplay if you want me to read your resume and call you for an interview.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Top Things I Look For In Your Resume&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;A degree in Computer Science.&lt;/b&gt;  I see lots of resumes from people with degree names like "Information and Decision Systems" or "Technology Management".  I won't discount the value of those degrees, but for the kind of software development I do, my experience has been that a rock-solid understanding of computer science is the cost of admission.  I'll always award bonus points for a minor or a second major that reflects to your interests and could be applied in your work.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;A good GPA.&lt;/b&gt;  For many schools, especially the top-tier schools, this means roughly something over a 3.5.  I know you think college is hard and I don't understand your courseload and blah blah blah, but the fact of the matter is, a large part of your success in college is determined by your ability to manage and schedule your time and your work.  If you had a B average, my first hypothesis is that you can't manage your own time, and transitioning to the professional world isn't going to make that problem magically go away.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Did you do more than just go to class?&lt;/b&gt;  This is where you really set yourself apart from every other graduating senior with a degree in Computer Science.  If you think you went to college for the classes, you really wasted the other 158 hours of every week.&lt;/li&gt;&lt;li&gt;As a follow-on to the last point: &lt;b&gt;did you demonstrate leadership talent outside of class?&lt;/b&gt;  Most people shouldn't be President of Student Government, but you can be Vice President of &lt;a href="http://seds.org"&gt;Students for the Exploration and Development of Space&lt;/a&gt;.  Heck, I was.  I'm not saying that I only want to hire leaders, but I am interested in people who are willing to step up and volunteer their time and energy to do something larger than themselves.  These are the people who see a problem and attack it, not just complain about it.  Even better than taking on a volunteer leadership role is taking on an &lt;span style="font-weight: bold;"&gt;elected&lt;/span&gt; leadership role - it demonstrates that other people look to you as a leader.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Interesting projects.&lt;/b&gt;  For me, if I read a project description on your resume of something I don't know how to do myself, I'll want to talk to you just so I can learn more about that project.  Translation: while you're in school, look for opportunities to do hard projects.  The homework assignments in your intro CS class aren't going to cut it, and the final project in Operating Systems probably won't, either.  Get involved in a research group, or start something with your friends, but set out to tackle something difficult.  Great big warning: if you list a project on your resume, be ready to answer questions about any aspect of it.  Any hint of bullshit on this point will taint the outcome of your interview.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I appreciate that this list is completely useless if you're about to graduate with a C average in Database Systems, having done nothing outside of the classroom except get high.  Sorry.&lt;br /&gt;&lt;br /&gt;Also, and this is not critical, but please, pretty please, use a format that will work on my platform.  Since you have no idea what platform I'm using, go with something nice and portable.  PDF is still the gold standard, though I'd be very impressed by anyone who sent me a resume by sharing a Google Document.  Plain text works as well, though it severely limits your formatting choices.  Whatever you do, just stay away from MS Word - almost any fancy formatting you do in word will not translate correctly into, for example, a Linux-based word processor like OpenOffice.  I have a fixed amount of time to review your resume, and if I spend most of that time piecing together bits of text that wound up splayed across several pages, I'm probably not going to notice that hidden gem of a project you did sophomore year.&lt;br /&gt;&lt;br /&gt;I've found a common problem on resumes is to really drum up things that turn out not to be that important.  This is based entirely on my experience on the observed correlation between background and impact as an engineer.  To wit, here are ...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Top Things I Don't Look For In Your Resume&lt;br /&gt;&lt;/b&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;An extremely high GPA&lt;/b&gt;.  Once you go beyond the 3.5 - 3.75 range, there's a leveling effect; in my experience the kid who got a 4.0 is just as likely to be good at writing software as the kid with a 3.75.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;A top-tier school.&lt;/b&gt;  There are a huge number of benefits to going to one of the three or four "best" CS schools in the country, but they seem to have little predictive power in the quality of the work someone will do professionally.  I've known too many screwups from MIT and CMU, and too many rock stars from lesser-known schools, to care too much about where you got your degree.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-left: 80px;"&gt;Caveat: Sure, if you went to CMU, that's an added bonus for me, because I know we immediately have some common background and we can swap stories about Mark Stehlik or late nights spent in Wean.  But that's still not going to get you a job, and if the rest of your resume is weak, it might not even get you an interview.&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Some minor contribution to some minor open-source project.&lt;/b&gt;  Open source is great, and as an undergrad, contributing to an open source project is a great way to get some exposure to real software development.  However, your two-line contribution to libsecondlife, correcting the spelling of "Linden" in the comments, is really not going to get me excited, so please let's just skip it.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Obviously none of the items on this list should be considered a negative; I'm just saying that don't waste a few dozen words extolling the virtues of MIT, or trying to convince me of the quality of your non-MIT school.  Tomorrow we'll cover the real pitfalls that destroy a lot of otherwise strong resumes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-5423846650261567686?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/5423846650261567686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=5423846650261567686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5423846650261567686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5423846650261567686'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your_11.html' title='The CS undergrads&apos; guide to writing your first resume, part 2'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-7242729816284256888</id><published>2008-03-09T21:04:00.004-04:00</published><updated>2008-04-07T10:28:27.301-04:00</updated><title type='text'>The CS undergrads' guide to writing your first resume</title><content type='html'>Continuing on the theme of&lt;a href="http://blog.jayteebee.org/2008/01/do-it-yourself-degree-in-software.html"&gt; bridging the gap between an undergraduate CS degree and a career in software development&lt;/a&gt;, I want to talk today a little about resumes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What a Resume is Good For&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The most common mistake people make with their resume, young and old, is to write a resume that makes the case for hiring you.  No smart company is ever going to hire you on the basis of your resume, so don't even try.  Your goal is to have me read your resume and think, "Hey, this person sounds really interesting, I should set up a phone call with them."  And that's it.  If you want to, you could really stop reading here - once you understand the critical purpose of a resume, everything else is just details.  So let's really drive the point home: a resume's only purpose is to get someone, anyone, to read it and be interested in you.&lt;br /&gt;&lt;br /&gt;If you're still with me, let's start things off with...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to Write Your First Resume&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Put your name and contact information at the top of the page, in a font larger than anything else you'll put on the page.&lt;/li&gt;&lt;li&gt;Start a section called "Education", and include:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;the name of your college or university,&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;the name of your degree program,&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;and your GPA.  Please consider your GPA to be mandatory.  Your career counselor will likely advise you not to list your GPA if it's below some threshold (usually a 3.0), but please go ahead and list it anyway.  It's easier for all of us if a weak GPA can be weighed against all the other information on your resume at the same time.  To put it another way: if you have a really strong resume with no GPA listed, you leave a big gnawing unknown out in the ether.  If you at least list your 2.8 GPA and then go on to tell me about a whole bunch of awesome stuff you've done, I can make an informed decision about whether to proceed; if your GPA isn't on your resume, I'm likely to pass it over without ever talking to you.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Next, list the most interesting and challenging CS courses you've taken.  You're shooting for 3-5 here, and if they don't have names I'd intuitively understand (ex: "How to Think Like a Computer Scientist") please do me the favor of translating them ("Discrete Math and Algorithms").*&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create a section called "Experience" and write down everything you've done that resembles a non-academic programming position.  Personal projects, summer internships, research projects, everything can go in here.  This is the meat of your resume, and where you're really likely to hook me into wanting to learn more.&lt;/li&gt;&lt;li&gt;Create a section called "Technical skills" and list every language, operating system, database, and development platform you're competent in.  This means leaving off the stuff that you experimented with that one weekend freshman year.  I want you to be able to tell me some of the ins and outs of any of the items in this section.  I don't expect seniors in college to be experts in anything, so don't be too conservative, but you want to avoid setting off my bullshit meter [&lt;a href="http://blog.jayteebee.org/2008/03/followup-which-skills-to-list-on-your.html"&gt;addendum&lt;/a&gt;].&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Finally, in a section called "Activities and Awards", list the most important activities you've participated in and awards you've received.  This should be much shorter than your "Experience" section, but don't leave it off completely.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Find someone to read your resume and give you fair and honest feedback.  Start with a classmate.  If you can, find a recent alum from your program and ask them to review it.  Show it to your advisor.  You can't have too many people read and comment on your resume.  Listen to what they say, and incorporate their feedback.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Still with me so far?  Great! Keep reading for &lt;a href="http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your_11.html"&gt;basic tips on what to emphasize&lt;/a&gt; and the &lt;a href="http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your_12.html"&gt;cardinal sins to avoid&lt;/a&gt; that will take this recipe and turn it into a winning resume.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;* Real example taken from the Carnegie Mellon undergraduate curriculum circa 1996.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-7242729816284256888?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/7242729816284256888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=7242729816284256888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/7242729816284256888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/7242729816284256888'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/03/cs-undergrads-guide-to-writing-your.html' title='The CS undergrads&apos; guide to writing your first resume'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-4676773687894644861</id><published>2008-02-01T11:58:00.000-05:00</published><updated>2008-02-07T22:09:49.376-05:00</updated><title type='text'>The Do-it-Yourself Degree in Software Engineering: Bonus Round</title><content type='html'>So it’s six months later, you’re a coding rockstar, you know how to run a team, your organization follows the principles laid out in Peopleware, and now you’re wondering, “Hey, what’s next?”  Here are some great reads that are illuminating but not part of the required curriculum.  I consider everything I’ve posted earlier as the basic cost of doing business as a professional software developer.  These are just for fun, but still very useful in making you an excellent engineer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-MqB0jpB9Gs/R6eBn84rSDI/AAAAAAAABLY/JfTKCkcI-vk/s1600-h/21jY8gsy4zL._AA_SL160_.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_-MqB0jpB9Gs/R6eBn84rSDI/AAAAAAAABLY/JfTKCkcI-vk/s400/21jY8gsy4zL._AA_SL160_.jpg" alt="" id="BLOGGER_PHOTO_ID_5163238021162289202" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.com/gp/product/1400082463?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1400082463"&gt;Dreaming in Code&lt;/a&gt; presents a sweeping view of the history of software engineering, told through the lens of Mitch Kapor and the Open Source Application Foundation’s efforts at developing Chandler, the Personal-Information-Manager-That-Will-Totally Change-Your-Life-If-We-Could-Ever-Ship-Running-Code.  It brings together many of the lessons of the Mythical Man Month and Peopleware in the context of a real effort at building a new product.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/gp/product/B00006B6RN?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00006B6RN"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_-MqB0jpB9Gs/R6eCE84rSEI/AAAAAAAABLg/MHS8f4SJ4lU/s400/21ARTX51QAL._AA_SL160_.jpg" alt="" id="BLOGGER_PHOTO_ID_5163238519378495554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/B00006B6RN?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00006B6RN"&gt;Go To&lt;/a&gt; is another great history of software, focusing more on the sequence of technical developments between World War II and where we find ourselves today.  The exciting running thread throughout the book is the number of great advances that have been made by individuals building the exact tool to suit their own needs.  If there was every a compelling argument against software design by committee, this is it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-MqB0jpB9Gs/R6eCrc4rSFI/AAAAAAAABLo/a2hTvXGSScI/s1600-h/21R8DSQZZNL._AA_SL160_.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_-MqB0jpB9Gs/R6eCrc4rSFI/AAAAAAAABLo/a2hTvXGSScI/s400/21R8DSQZZNL._AA_SL160_.jpg" alt="" id="BLOGGER_PHOTO_ID_5163239180803459154" border="0" /&gt;&lt;/a&gt;The &lt;a href="http://www.amazon.com/gp/product/0060521996?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0060521996"&gt;Innovator’s Dilemma&lt;/a&gt; is an excellent read because it shows over and over how entrenched players in a market are unseated by small teams working with great focus on an emerging market or technology.  Every time someone tries to convince me that Google can never be unseated from a position of dominance in search, or that Microsoft and Yahoo are the companies we should be concerned about, I tell them to read this book.  For a big company, the competition isn’t the hundred-billion-dollar software shop down the road, it’s a few folks in an apartment somewhere using sheets of plywood for desks and borrowed hardware.&lt;br /&gt;&lt;br /&gt;There’s a great flipside to the Innovator’s Dilemma, too: if you’re thinking of building something, and you think it’s going to go up against some established megacorp, take inspiration from the number of times that some unproven David has taken down a Goliath.&lt;br /&gt;&lt;br /&gt;Lastly, &lt;a href="http://www.amazon.com/gp/product/1590597214?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1590597214"&gt;In Search of Stupidity&lt;/a&gt; presents a unique perspective on how so many software&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-MqB0jpB9Gs/R6eDYs4rSHI/AAAAAAAABL4/rlJTIhPejrg/s1600-h/21JAK7WBA5L._AA_SL160_.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_-MqB0jpB9Gs/R6eDYs4rSHI/AAAAAAAABL4/rlJTIhPejrg/s400/21JAK7WBA5L._AA_SL160_.jpg" alt="" id="BLOGGER_PHOTO_ID_5163239958192539762" border="0" /&gt;&lt;/a&gt; companies managed to compete with Microsoft and fail completely. The underlying thesis of the book is that Microsoft isn’t necessarily that great, but everyone else is so bad; Microsoft happens to be the one software company that didn’t make any horrendously stupid mistakes in the eighties or early nineties.  You can debate that thesis, but it’s still entertaining to read some of the brain-dead things that Microsoft competitors did.&lt;br /&gt;&lt;br /&gt;This is now the final final conclusion of my list.  Please let me know if you end up reading any of these on my recommendation, and let me know what you think of the books.  Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-4676773687894644861?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/4676773687894644861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=4676773687894644861' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/4676773687894644861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/4676773687894644861'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/02/do-it-yourself-degree-in-software_01.html' title='The Do-it-Yourself Degree in Software Engineering: Bonus Round'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-MqB0jpB9Gs/R6eBn84rSDI/AAAAAAAABLY/JfTKCkcI-vk/s72-c/21jY8gsy4zL._AA_SL160_.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-662780795909249676</id><published>2008-02-01T11:03:00.000-05:00</published><updated>2008-02-06T21:15:43.138-05:00</updated><title type='text'>The Do-it-Yourself Degree in Software Engineering: Software Engineering Management</title><content type='html'>Congratulations on becoming a coding rock star!  You can do anything you set your mind to.  You might not be ten times more productive than the average engineer, but you’re probably six or seven times more productive.&lt;br /&gt;&lt;br /&gt;This now puts you in an unstable equilibrium.  Sooner or later someone is going to notice how good you are at building software, and they’ll ask you to take on some form of leadership or management role, in which you’ll be primarily responsible for getting other people to build software.  Welcome to a life spent in meetings, doing “coordination.”&lt;br /&gt;&lt;br /&gt;In all seriousness, even if you never get asked to manage other developers, understanding the principles of how to manage software teams will make you a better engineer.  These two books are each a quick read and will equip you with an entire toolbox of ideas about how to make teams work well.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201835959"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 170px; height: 170px;" src="http://3.bp.blogspot.com/_-MqB0jpB9Gs/R6NEes4rR_I/AAAAAAAABK4/3v93OYQAnGQ/s400/mythical_man_month.jpg" alt="" id="BLOGGER_PHOTO_ID_5162044892132362226" border="0" /&gt;&lt;/a&gt;The first book to read is &lt;a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201835959"&gt;The Mythical Man Month&lt;/a&gt;, the classic software engineering text by Fred Brooks.  There are any number of things that you can disagree with in Brooks’ treatise, but the logic of Brooks’ Law is fundamental in understanding how to deal with late projects.  It’s been 40 years since he made the excellent argument that adding more people to a late project makes it later, and yet, even at enlightened software companies like Google, the first reaction to a late project is to add more engineers.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0932633439"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 192px; height: 192px;" src="http://2.bp.blogspot.com/_-MqB0jpB9Gs/R6NNkc4rSAI/AAAAAAAABLA/QczT19WiY3Q/s400/peopleware.jpg" alt="" id="BLOGGER_PHOTO_ID_5162054886521260034" border="0" /&gt;&lt;/a&gt;Once you’ve read Mythical Man Month, and you can argue successfully with your manager about how to make the right tradeoffs between schedule, quality, and features, it’s time to learn a little about how successful software organizations treat their people.  For this, you need to pick up the classic &lt;a href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0932633439"&gt;Peopleware&lt;/a&gt; by DeMarco and Lister.  A lot of people espouse theories about how to operate software organizations; these guys did the research and the experimentation to demonstrate what makes a difference between the mediocre software shops and the stellar operations.&lt;br /&gt;&lt;br /&gt;I am proud to say that I no longer own a copy of Peopleware.  Back in early 2003, when Sergey would still come out to NYC and hang out with the nascent engineering team out here, I managed to get him into a debate about running engineering organizations, and I learned that he had never read Peopleware.  The next day I pressed my copy into his hands, and told him to just take it, as long as he promised to read it.  We still don’t have private offices at Google, so I’m not sure if he ever actually read it, but at least I tried.&lt;br /&gt;&lt;br /&gt;Congratulations on making it this far.  Upon finishing these books, you will now be qualified for a degree in Software Engineering in the Real World.  Tomorrow, just for kicks, I'll share a few more interesting reads that wrap up many of these ideas in a fun package.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-662780795909249676?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/662780795909249676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=662780795909249676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/662780795909249676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/662780795909249676'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/02/do-it-yourself-degree-in-software.html' title='The Do-it-Yourself Degree in Software Engineering: Software Engineering Management'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-MqB0jpB9Gs/R6NEes4rR_I/AAAAAAAABK4/3v93OYQAnGQ/s72-c/mythical_man_month.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-1585058381455772924</id><published>2008-01-30T21:58:00.000-05:00</published><updated>2008-02-05T22:26:17.402-05:00</updated><title type='text'>The Do-it-Yourself Degree in Software Engineering: Complementary Skills</title><content type='html'>The first three books on my list help you build great code, use and understand patterns, and even refactor the legacy code you got saddled with.  What are the skills you need to be able to package that up and have a real impact?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0131103628?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0131103628"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 133px; height: 174px;" src="http://2.bp.blogspot.com/_-MqB0jpB9Gs/R6NAkc4rR9I/AAAAAAAABKo/UUX7vUMJ9bY/s400/c+programming+language.gif" alt="" id="BLOGGER_PHOTO_ID_5162040592870098898" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;You need to be able to write.  You need to be able to write clearly and succinctly about technical issues. &lt;/span&gt; No interesting software is ever built by a team without real debate about the design, and those debates usually happen in written text, via email or design documents.  If you want to see your ideas advance, you need to be able to write in a manner that is clear and persuasive.&lt;br /&gt;&lt;br /&gt;Unfortunately I can’t point you to a text on how to write about technical matters.  The best thing I can do is to point you to the archetype of clear, succinct technical writing, &lt;a href="http://www.amazon.com/gp/product/0131103628?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0131103628"&gt;The C Programming Language&lt;/a&gt;, by Kernighan and Ritchie.  This book provides the model every technical writer should use when trying to explain a new technology or concept to technical readers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;You need to be able to work on user interfaces. &lt;/span&gt; This is the hardest one&lt;a href="http://www.amazon.com/gp/product/1893115941?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1893115941"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_-MqB0jpB9Gs/R6E6Cc4rR7I/AAAAAAAABKY/Yqm44kZndck/s400/UI_For_Programmers.jpg" alt="" id="BLOGGER_PHOTO_ID_5161470461731358642" border="0" /&gt;&lt;/a&gt; for me, because I have no idea how to arrange pixels on a screen to convey meaning.  It drives me nuts every time I try.  Given a choice, I will hand off UI design to a trained professional every chance I get.  But the fact is, skilled UI designers are exceptionally rare, and a service with a working UI is 100 times more meaningful than some script outputting text on a console.  Most engineers will never be able to build beautiful interfaces, but &lt;a href="http://www.amazon.com/gp/product/1893115941?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1893115941"&gt;User Interface Design for Programmers&lt;/a&gt; by Joel Spolsky is a great beginner’s guide.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0201657880?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201657880"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 127px; height: 159px;" src="http://1.bp.blogspot.com/_-MqB0jpB9Gs/R6NBKM4rR-I/AAAAAAAABKw/_nhgmfkm2MY/s400/programming+pearls.jpg" alt="" id="BLOGGER_PHOTO_ID_5162041241410160610" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;You need to know how to think about hard problems in Computer Science. &lt;/span&gt; This is a fuzzy concept to describe, but what I really mean to say is, you must read &lt;a href="http://www.amazon.com/gp/product/0201657880?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201657880"&gt;Programming Pearls&lt;/a&gt; by Jon Bentley.  And when you read it, do the freaking exercises.  That’s what really matters.  I always pose the same challenge about this book when I speak to undergrads: in the chapter on proving correctness of programs, find the bug in the program that is proven correct.&lt;br /&gt;&lt;br /&gt;Coming up tomorrow: how to learn everything you need to know about software engineering management.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-1585058381455772924?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/1585058381455772924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=1585058381455772924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/1585058381455772924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/1585058381455772924'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/01/do-it-yourself-degree-in-software_4960.html' title='The Do-it-Yourself Degree in Software Engineering: Complementary Skills'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-MqB0jpB9Gs/R6NAkc4rR9I/AAAAAAAABKo/UUX7vUMJ9bY/s72-c/c+programming+language.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-3468231982416193518</id><published>2008-01-30T21:42:00.001-05:00</published><updated>2008-02-04T21:34:14.933-05:00</updated><title type='text'>The Do-it-Yourself Degree in Software Engineering: Code Construction and Design</title><content type='html'>Picking up where I left off &lt;a href="http://blog.jayteebee.org/2008/01/do-it-yourself-degree-in-software.html"&gt;yesterday,&lt;/a&gt; what are the code construction and design books you need to read in order to become a practicing software engineer?&lt;br /&gt;&lt;br /&gt;There's one absolutely critical task in building software, and that's creating the actual sequence of operations that comprise your software.  If you can't get this right, you're nowhere.&lt;br /&gt;&lt;br /&gt;Short tangent: think back with me for a moment to the first computer science class you ever took – that one in high school, with the hand-me-down PCs from the typing lab, and the part-time Math/part-time CS teacher.  Ah, the heady days when making “hello world” appear on the screen seemed like magic, and HTML felt like a “programming language”.&lt;br /&gt;&lt;br /&gt;I’m willing to bet that one of the first lessons you learned was about “routines” – nice, isolated bits of code that did one thing and did it well, bits that could be incorporated into other bits with a simple call.  Boom, magic.&lt;br /&gt;&lt;br /&gt;There’s always some smart student in the room who asks, “when do I use a routine and when should I just write the code in-line with everything else I’m doing?”&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0735619670"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_-MqB0jpB9Gs/R6d9xs4rSBI/AAAAAAAABLI/XKk9XmzfY1Y/s400/code+complete.gif" alt="" id="BLOGGER_PHOTO_ID_5163233790619502610" border="0" /&gt;&lt;/a&gt;This question has one standard answer given in CS classes all over the world: “write a routine when you’re creating a piece of code that is going to get used frequently.”  And for introductory CS classes, for the kind of code written by 16-year-olds, this is a fine enough answer.  But for real software, with real users, and more than one developer, there are a lot more reasons to put a piece of code in its own routine.  If you can’t name at least three, you need to read the beginning of chapter 7 of &lt;a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0735619670"&gt;Code Complete&lt;/a&gt;. And that’s just three pages out of this 800+ page tome! (Aside: by a wide margin, Code Complete is the longest book on my list).&lt;br /&gt;&lt;br /&gt;If you read nothing else on this list, please, for the sake of software, please read Code Complete.  This book is jam-packed with hundreds of little tips that will make your code better, one line at a time&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201633612"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_-MqB0jpB9Gs/R6E2XM4rR3I/AAAAAAAABJ4/P37oFHnq1FU/s400/design+patterns.gif" alt="" id="BLOGGER_PHOTO_ID_5161466420167133042" border="0" /&gt;&lt;/a&gt;Code Complete will equip you with the skills to start thinking at a high-level about the organization and construction of code.  There are two books I recommend here.&lt;br /&gt;&lt;br /&gt;First, &lt;a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201633612"&gt;Design Patterns&lt;/a&gt;.  A lot of developers like to write off Design Patterns as some pointy-haired fluff, but the fact is, in the 14 years since this book was first published, Design Patterns have become established as a useful shorthand for discussing high-order organization of code.  If nothing else, you are likely to encounter other people using Design Patterns when they describe their code, and you need to understand the language in order to communicate with them.&lt;br /&gt;&lt;br /&gt;There is a risk associated with reading Design Patterns - many people read this book and decide that patterns are the meaning of life itself.  I am not advocating that you become a Design Patterns weenie, searching for ways to needlessly incorporate a Strategy or a Factory in your code, or, pure Design Pattern nerd-vana, a StrategyFactory.  Nonetheless, there are a lot of fantastic ideas in this book, and your code will be easier to maintain, by yourself and others, if you apply the ideas espoused in Design Patterns.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201485672"&gt; &lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_-MqB0jpB9Gs/R6E2vM4rR5I/AAAAAAAABKI/Z1V_16LgTVY/s400/refactoring.gif" alt="" id="BLOGGER_PHOTO_ID_5161466832483993490" border="0" /&gt;&lt;/a&gt;Next, and finishing out the Code Construction and Design category, is &lt;a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&amp;amp;tag=softwarantsot-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201485672"&gt;Refactoring&lt;/a&gt;, by Martin Fowler.  This book is fantastic for the genuine focus on a codebase as dynamic and evolving.  For most computer science graduates, working on an existing codebase is completely foreign in academic settings, and one of the first experiences in the professional setting.  The ability to think clearly about how to improve the design of existing code, while making strong assurances about the quality of the refactored product, makes an immense difference in your ability to work effectively with software.&lt;br /&gt;&lt;br /&gt;Once you're through these three books, the raw quality of your code will be immensely better.  Code Complete is the longest, but it's a fairly quick read.  The other two should be easy to get through in free time.&lt;br /&gt;&lt;br /&gt;Coming up tomorrow: now that you're writing great code, we'll talk about the skills you need to go along with that in order to round out your abilities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-3468231982416193518?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/3468231982416193518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=3468231982416193518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3468231982416193518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3468231982416193518'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/01/do-it-yourself-degree-in-software_30.html' title='The Do-it-Yourself Degree in Software Engineering: Code Construction and Design'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-MqB0jpB9Gs/R6d9xs4rSBI/AAAAAAAABLI/XKk9XmzfY1Y/s72-c/code+complete.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-1871909076048109593</id><published>2008-01-30T21:40:00.000-05:00</published><updated>2008-02-07T22:08:49.999-05:00</updated><title type='text'>The Do-it-Yourself Degree in Software Engineering: Intro</title><content type='html'>Depending on where you go to school, your degree in computer science can be useful for a lot of goals – becoming a professional developer, going into finance or biotech, getting a Ph.D. in computer science, becoming an IT project manager, or even something barely related to computer science.  The one thing a CS degree is almost useless for is practical training in how to build production-quality software.  The curriculum at most universities, especially the “top tier” universities, is (rightly) focused on an academic grounding in the field, not a practical guide to building great software.&lt;br /&gt;&lt;br /&gt;I’ve been trying to teach undergrads about this gap between a Computer Science degree and professional software development in a talk that I’ve given twice now, once at Princeton and once at Carnegie Mellon. The kids seem to like it, and the number one question I get is for the reading list I mention.&lt;br /&gt;&lt;br /&gt;My list is intentionally brief.  Anyone with a degree and some spare time should be able to make it through the entire set in under six months.  If you haven't read these books, and I mean all of these books, you are probably building bad software.  When people talk about the 10:1 productivity difference between great developers and average developers, well, you're on the "1" side of that ratio.  Take the time to read through these and everyone impacted by your software will benefit.&lt;br /&gt;&lt;br /&gt;Just for the sake of your ease in reading, I’ve taken this list and broken it up over several posts.  I’ll post the first portion of the list, &lt;a href="http://blog.jayteebee.org/2008/01/do-it-yourself-degree-in-software_30.html"&gt;code construction and design&lt;/a&gt;, tomorrow, followed by a few books on &lt;a href="http://blog.jayteebee.org/2008/01/do-it-yourself-degree-in-software_4960.html"&gt;complementary skills&lt;/a&gt;, then books on &lt;a href="http://blog.jayteebee.org/2008/02/do-it-yourself-degree-in-software.html"&gt;software engineering management&lt;/a&gt;, and finish up with a &lt;a href="http://blog.jayteebee.org/2008/02/do-it-yourself-degree-in-software_01.html"&gt;short bonus&lt;/a&gt; of fun and engaging books that help fill the gap between a degree in computer science and professional software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-1871909076048109593?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/1871909076048109593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=1871909076048109593' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/1871909076048109593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/1871909076048109593'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2008/01/do-it-yourself-degree-in-software.html' title='The Do-it-Yourself Degree in Software Engineering: Intro'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-2059693173927274922</id><published>2007-12-04T22:11:00.000-05:00</published><updated>2007-12-04T22:20:15.866-05:00</updated><title type='text'>All JTB, All The Time</title><content type='html'>Hey, if you are one of the 5 people on the planet who subscribe to this blog, you might be interested in my &lt;a href="http://jtb.tumblr.com"&gt;tumblr stream.&lt;/a&gt;  Tumblr is an interesting not-quite-blogging, not-quite-aggregation product that's also better than either style of product might give you.&lt;br /&gt;&lt;br /&gt;By watching my stream you'll get my:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;posts to this blog&lt;/li&gt;&lt;li&gt;tweets&lt;/li&gt;&lt;li&gt;del.icio.us bookmarks&lt;/li&gt;&lt;li&gt;Google Reader shared items&lt;/li&gt;&lt;li&gt;posts actually native to tumblr, including &lt;a href="http://jtb.tumblr.com/post/20853675"&gt;this great one&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;You could also friend me or follow me or whatever the tumblr term is, and see me on your tumblr dashboard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-2059693173927274922?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/2059693173927274922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=2059693173927274922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2059693173927274922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2059693173927274922'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/12/all-jtb-all-time.html' title='All JTB, All The Time'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-105679458037759114</id><published>2007-07-01T16:13:00.001-04:00</published><updated>2007-07-01T21:07:09.270-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coop'/><category scheme='http://www.blogger.com/atom/ns#' term='adsense'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Experimenting with Custom Search Engines</title><content type='html'>I've just been playing around with Google Co-op's "Custom Search Engine" feature.  I'm interested to see if it's possible to build a decent topic-specific search engine given the controls exposed in that product (mainly, url whitelisting).&lt;br /&gt;&lt;br /&gt;The test topic area I'm starting with is, not surprisingly, software engineering.  I've added a half dozen sites, mostly blogs, related to software and software engineering.  You can try it out right here, using the box there on the right.&lt;br /&gt;&lt;br /&gt;One of the more interesting mechanisms is the ability to invite collaborators to contribute sites.  If you read this blog and you have sites you recommend for software-related information, drop me a line or post a comment, and I will add you to the collaborators.&lt;br /&gt;&lt;br /&gt;(Program note: while adding the custom search box, I also re-enabled AdSense on this blog, because it seems to have disappeared.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-105679458037759114?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/105679458037759114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=105679458037759114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/105679458037759114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/105679458037759114'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/07/experimenting-with-custom-search.html' title='Experimenting with Custom Search Engines'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-3214773922744590629</id><published>2007-06-22T08:55:00.001-04:00</published><updated>2007-06-22T09:03:27.703-04:00</updated><title type='text'>Somebody noticed GoogleLookup!</title><content type='html'>Over at Google Blogoscoped, they just noticed that the Google Q&amp;A data is &lt;a href="http://blog.outer-court.com/archive/2007-06-22-n66.html"&gt;exposed in Google Spreadsheets.&lt;/a&gt;  This has actually been out for quite a while, but it never got much press.&lt;br /&gt;&lt;br /&gt;In my mind, this kind of application was always far more interesting than the Q&amp;A onebox.  It's nice to give people quick responses to simple fact-finding queries, but it's far more interesting to aggregate, mashup, and expose data that they can re-use themselves.  The spreadsheet integration is just one example of that sort of effort.&lt;br /&gt;&lt;br /&gt;In addition to the data, it's an exciting demonstration of what you can do with a spreadsheet product that is native to the web.  There are a lot of people with big ideas about where this can go from here.&lt;br /&gt;&lt;br /&gt;Regarding the question about which queries trigger the Q&amp;A onebox: it's based on a corpus that gets updated over time; as the scoring functions and data coverage change, you can expect to see certain queries start or stop triggering over time.  I assure you it's still under development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-3214773922744590629?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/3214773922744590629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=3214773922744590629' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3214773922744590629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3214773922744590629'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/06/somebody-noticed-googlelookup.html' title='Somebody noticed GoogleLookup!'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-5265092808273700308</id><published>2007-05-17T08:33:00.000-04:00</published><updated>2007-05-17T08:49:14.635-04:00</updated><title type='text'>In case you missed it: timeline and maps views on Google Labs</title><content type='html'>All of today's press about Universal Search is overshadowing a very important launch -- &lt;a href="http://www.google.com/views"&gt;timeline and map visualizations&lt;/a&gt; of search results.  This product really demonstrates the power of digging into the structured information that lives on the web.  &lt;b&gt;The best thing about it is, the information that goes into these visualizations was not designed for this use&lt;/b&gt;.  Whereas the Semantic Web folks have always envisioned getting the entire world to author RDF repositories, the Google Views product shows just how much you can do by reverse-engineering from the information that's already published.&lt;br /&gt;&lt;br /&gt;If I sound a little enthusiastic about this, it's because I worked on similar projects for a long time at Google.  The entire team over there has worked through an immense number of technical challenges to get to this launch.  The technology stack they've built for understanding information published on the web is really very impressive.&lt;br /&gt;&lt;br /&gt;My favorite use of Views is to explore historical topics.  Want to understand &lt;a href="http://www.google.com/views?q=iraq+view%3Atimeline&amp;btnGt=Search&amp;amp;hl=en"&gt;the history of Iraq&lt;/a&gt;, or &lt;a href="http://www.google.com/views?q=al+qaeda+view%3Atimeline&amp;btnGt=Search&amp;amp;hl=en"&gt;al Qaeda?&lt;/a&gt;  It's too damn easy.&lt;br /&gt;&lt;br /&gt;Congratulations to everyone involved in this launch.  What's next? :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-5265092808273700308?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/5265092808273700308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=5265092808273700308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5265092808273700308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5265092808273700308'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/05/in-case-you-missed-it-timeline-and-maps.html' title='In case you missed it: timeline and maps views on Google Labs'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-8589565694108288301</id><published>2007-05-03T18:03:00.000-04:00</published><updated>2007-05-03T18:14:24.908-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='grammar'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google culture</title><content type='html'>One of the great things about Google culture is that anyone can fix any problem.  &lt;br /&gt;&lt;br /&gt;Sure, it's a big place, and some people get set in their ways, and you might have to convince a lot of people that your solution is the right one.  Still, no one ever makes the argument, "that's not your area" or "I don't need to listen to a peon like you."  Every time I've mailed one of our senior managers with a suggestion or request, they've responded more promptly than I would have, and with detailed feedback or comments.  &lt;br /&gt;&lt;br /&gt;In short, many of the best things at Google happen because someone in the trenches had a great idea, they made it work, and they convinced a lot of people to change how things are done.&lt;br /&gt;&lt;br /&gt;And of course, that is great.&lt;br /&gt;&lt;br /&gt;What's bugging me these days is that a lot of people are trying to describe Google culture as "bottoms up," when they actually mean "bottom up."  Bottom&lt;span style="font-weight:bold;"&gt;s&lt;/span&gt; up means a whole different thing.&lt;br /&gt;&lt;br /&gt;So, to all you Googlers throwing around the phrase "bottoms up" like it's a good thing: please stop.  It hurts my ears when you say it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-8589565694108288301?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/8589565694108288301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=8589565694108288301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/8589565694108288301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/8589565694108288301'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/05/google-culture.html' title='Google culture'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-2558102854089032489</id><published>2007-03-15T01:04:00.000-04:00</published><updated>2007-03-15T01:08:41.033-04:00</updated><title type='text'>Random dork humor</title><content type='html'>Spotted on CA 101, the following license plate:&lt;br /&gt;&lt;br /&gt;NACLHHO&lt;br /&gt;&lt;br /&gt;Think about it for a minute, it'll come to you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-2558102854089032489?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/2558102854089032489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=2558102854089032489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2558102854089032489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/2558102854089032489'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/03/random-dork-humor.html' title='Random dork humor'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-5518103224772462780</id><published>2007-01-25T09:40:00.000-05:00</published><updated>2007-01-25T09:45:23.163-05:00</updated><title type='text'>Congrats to the team behind "Places Mentioned in this Book"</title><content type='html'>One of the great things about working at Google is the interesting kinds of data we have available, and the sheer quantity of it.  It enables a lot of cutting-edge experiments, especially when you take the cross product of different areas of expertise.  For example, Google has developed a lot of good technology for recognizing mentions of place names in text, as you might expect would be necessary for &lt;A HREF="http://maps.google.com"&gt;Local Search&lt;/A&gt;.  Additionally, we've scanned and OCR'd a lot of books, as you might expect would be necessary for &lt;A HREF="http://books.google.com"&gt;Book Search&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;Today, a few friends of mine launched an exciting new feature of Book Search that exposes the result of applying our location-identification technology to the corpus of books.  For a lot of books, the "about this book" page now includes a Google Map annotated with places mentioned in the book, where each annotation actually gives you the snippet of text that mentions that place.  I've had a lot of fun exploring the results on some of my &lt;A HREF="http://books.google.com/books?vid=ISBN0140187413"&gt;favorite&lt;/A&gt; &lt;A HREF="http://books.google.com/books?vid=ISBN0553103105"&gt;books&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;This is one of those interesting software products you really can only build at few companies, and I'm proud that Google is one of them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-5518103224772462780?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/5518103224772462780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=5518103224772462780' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5518103224772462780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/5518103224772462780'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/01/congrats-to-team-behind-places.html' title='Congrats to the team behind &quot;Places Mentioned in this Book&quot;'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-3602614912784470084</id><published>2007-01-18T09:28:00.000-05:00</published><updated>2007-01-18T09:31:16.339-05:00</updated><title type='text'>Check out the new stuff over on the right-hand side</title><content type='html'>I'm playing some with &lt;A HREF="http://reader.google.com"&gt;Google Reader's&lt;/A&gt; sharing feature, and one of the cool things it gives you is a widget for clippings of shared items, which I have now added to this blog over there on the right-hand side.&lt;br /&gt;&lt;br /&gt;Of course, since no one reads this blog on blogspot.com, you can also try &lt;A HREF="http://www.google.com/reader/public/atom/user/03335919537245603047/state/com.google/broadcast"&gt; the feed&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;Do you have a feed of shared items in Reader?  Let me know, I'm interested to learn more about this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-3602614912784470084?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/3602614912784470084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=3602614912784470084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3602614912784470084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3602614912784470084'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/01/check-out-new-stuff-over-on-right-hand.html' title='Check out the new stuff over on the right-hand side'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-3958406714767198112</id><published>2007-01-04T08:57:00.000-05:00</published><updated>2007-01-04T09:26:59.225-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='finance'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Yahoo Finance is still a better product</title><content type='html'>Obviously, as a Googler, I want all Google products to so drastically outshine the competition that people around the world just send us checks out of a sheer sense of gratitude.  If I had to pick one product that I'd like to see succeed like this, I'd choose Google Finance -- no one has really been innovating in the world of basic consumer-targeted financial web sites for a long time, and the Google Finance team is trying a lot of things to change the game.&lt;br /&gt;&lt;br /&gt;But the product still misses some of the basics.&lt;br /&gt;&lt;br /&gt;Case in point: Yesterday afternoon, I checked the Google stock price via the [goog] &lt;br /&gt;query from the Google Toolbar.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-MqB0jpB9Gs/RZ0NTmcE3dI/AAAAAAAAAA8/6TYAj8gZ9UE/s1600-h/goog_quote2.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_-MqB0jpB9Gs/RZ0NTmcE3dI/AAAAAAAAAA8/6TYAj8gZ9UE/s400/goog_quote2.gif" alt="" id="BLOGGER_PHOTO_ID_5016180190347582930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hey, we're up seven bucks, that's great!  But that weird cliff in the middle of the day is odd.  My gut instinct was that something market-wide had happened, so I went to the Google Finance home page to check for interesting headlines.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-MqB0jpB9Gs/RZ0OGWcE3eI/AAAAAAAAABE/vdO8AkVCSeU/s1600-h/gfinance_home2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_-MqB0jpB9Gs/RZ0OGWcE3eI/AAAAAAAAABE/vdO8AkVCSeU/s400/gfinance_home2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5016181062225944034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nope, nothing interesting there that looks as though it should be bringing down GOOG, but the broad market summary on the left shows the same curve that GOOG had for the course of the day, so it does seem like *something* happened.  Let's see what they have to say over at Yahoo Finance:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-MqB0jpB9Gs/RZ0OVGcE3fI/AAAAAAAAABM/PTM0YgVUWLk/s1600-h/yfinance_home2.GIF"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_-MqB0jpB9Gs/RZ0OVGcE3fI/AAAAAAAAABM/PTM0YgVUWLk/s400/yfinance_home2.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5016181315629014514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Boom!  Right there -- "Stocks Turn Mixed After Fed Minutes".&lt;br /&gt;&lt;br /&gt;The Google Finance team is innovating in a lot of great ways, and they're getting a lot of things right, but Yahoo Finance is still getting the most important things right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-3958406714767198112?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/3958406714767198112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=3958406714767198112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3958406714767198112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/3958406714767198112'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2007/01/yahoo-finance-is-still-better-product.html' title='Yahoo Finance is still a better product'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-MqB0jpB9Gs/RZ0NTmcE3dI/AAAAAAAAAA8/6TYAj8gZ9UE/s72-c/goog_quote2.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-531707393835445402</id><published>2006-12-17T21:57:00.000-05:00</published><updated>2006-12-17T22:02:25.001-05:00</updated><title type='text'>WikidPad is the Awesomest</title><content type='html'>This is a post about an unbelievably awesome piece of software. As in, so awesome I'm kicking myself for not having learned about it a year ago.  But first, some background.&lt;br /&gt;&lt;br /&gt;One of the best developers I've ever met was &lt;a href="http://andrewbunner.vox.com"&gt;Andrew Bunner&lt;/a&gt;.  We worked together for about six months almost four years ago, and I'm still amazed at how good he was.  It was flat-out unfair.&lt;br /&gt;&lt;br /&gt;One of the things that most stood out to me about Andrew's working style was a massive MS Word document he kept open at all times with the complete state of everything he was working on. It was amazing. Any time you asked him a question, he could page through his doc and pull up some notes from an experiment three weeks earlier. He had perfect recall for all facets of all topics.&lt;br /&gt;&lt;br /&gt;The technique worked so well that, in the years since we worked together, I've tried repeatedly to copy it. I've tried using Word, Notepad, Wordpad, Gmail, and custom-coded HTML as the mechanism for storing notes, but none have worked - the cost of doing a retrieval or starting a new topic is always just too high. I always wind up with notes scattered across several different media, including physical notebooks, post-its, and scraps of paper.  I finally realized that what I actually need is a wiki that runs entirely on my laptop.&lt;br /&gt;&lt;br /&gt;This week I finally bothered to start looking, and I found a small client application that is already profoundly impacting the way I work. The app is called &lt;a href="http://www.jhorman.org/wikidPad/"&gt;WikidPad&lt;/a&gt;.  You should go download it and try it right right now.&lt;br /&gt;&lt;br /&gt;My favorite features:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;   &lt;li&gt; Formatting codes that are exactly what I'd expect.  Like a lot of engineers at Google, I store a lot of information in &lt;a href="http://twiki.org"&gt;twiki&lt;/a&gt;, so this may just be happy coincidence, but almost all the twiki formatting codes work in WikidPad.&lt;br /&gt;   &lt;li&gt; Special text markers for items like TODOs, questions, and issues, along with an easy way to navigate to all such items in your wiki.&lt;br /&gt;   &lt;li&gt; Killer search&lt;br /&gt;   &lt;li&gt; Auto-completion for Wiki words.  This is way cooler than it sounds.&lt;br /&gt;   &lt;li&gt; Client-side speediness.  It's been so long since I've spent a lot of time in a complex client app that runs quickly (my browser and my IDE certainly don't) that I forgot it could be done.&lt;br /&gt;   &lt;li&gt; A pretty clear api for extending the app with simple python hooks&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The only problem I've found so far is that it seems to have some problems with the pen input on my tablet PC.  I can't isolate that problem though, yet.&lt;br /&gt;&lt;br /&gt;In the three days since I installed this app, I have dumped tons of information and ideas into it, including the first draft of this post.  This is without a doubt the coolest piece of software I've seen in a few years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-531707393835445402?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/531707393835445402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=531707393835445402' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/531707393835445402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/531707393835445402'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/12/wikidpad-is-awesomest.html' title='WikidPad is the Awesomest'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-6674106385932140644</id><published>2006-12-07T18:06:00.000-05:00</published><updated>2006-12-07T18:25:51.771-05:00</updated><title type='text'>Fun quotes</title><content type='html'>About 3 and a half years ago, when I started interviewing with Google, my first phone screen was with a fellow named Vijay.   I remember doing well for a good chunk of it, and then blowing some parts at the end.  Lucky for me, Vijay focused on the good bits and recommended that Google continue interviewing me.&lt;br /&gt;&lt;br /&gt;I learned today that in Vijay's write-up of that interview, he had the following to say:&lt;br /&gt;&lt;blockquote&gt;"I am concerned that based on his previous experience we may not be interviewing him for the correct position.  Although he would make an excellent software engineer, I think that perhaps a manager position may be more in order."&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="display: block; padding-left: 6em;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;Vijay had cause to share this with me today because I took the plunge and finally became a manager.  In an odd coincidence, I actually became Vijay's manager, along with a handful of other great folks working on AdWords in New York.&lt;br /&gt;&lt;br /&gt;The other notable quote of the day came from Chris, who I've been working with for a few months now:&lt;br /&gt;&lt;blockquote&gt;"Jonathan's been a manager for five minutes and already he's being compared to &lt;a href="http://en.wikipedia.org/wiki/Idi_Amin"&gt;Idi Amin&lt;/a&gt;"&lt;/blockquote&gt;It's taken a long time and a very particular set of circumstances to convince me to take on a management role at Google, but I'm very excited about this new challenge.  The Ads team at Google is phenomonal for the pace at which they push out an ever-expanding set of mission-critical features to hundreds of thousands of advertisers around the world.  This is an awesome time to take on this role.&lt;br /&gt;&lt;br /&gt;PS. To the Google engineers in NY:  If you're not already in Ads, come talk to me.  I have a long list of great projects with a lot of opportunity to make a big impact.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-6674106385932140644?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/6674106385932140644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=6674106385932140644' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/6674106385932140644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/6674106385932140644'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/12/fun-quotes.html' title='Fun quotes'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-116365070983282036</id><published>2006-11-15T23:05:00.000-05:00</published><updated>2006-11-15T23:22:28.733-05:00</updated><title type='text'>Google Culture Can Not Be Diagnosed from the TechCrunch Ranch</title><content type='html'>Mike Arrington believes that Google reporting apps don't support download to &lt;a href="http://docs.google.com"&gt;Google Spreadsheets&lt;/a&gt; because of &lt;a href="http://www.techcrunch.com/2006/11/15/lack-of-internal-talks-at-microsoft-google"&gt;"an obvious lack of conversations internally".&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm in a unique position to comment on this, since I work on advertiser-facing reporting for AdWords (and have been for about six months).  And Mike's right, we don't let you open your report data directly in Google Spreadsheets yet.  But it's not because the AdWords reports team is unaware of Google Spreadsheets -- I've known that entire team from the first week they joined Google, and Fuzzy (the Tech Lead) and I are friends.  We talk about what's going on with Spreadsheets all the time, and we've talked about incorporating it into the AdWords Report Center.  Our offices are about 100 feet away from each other.  We see each other at the coffee machine all the time.&lt;br /&gt;&lt;br /&gt;The only problem is, Spreadsheets integration is in line behind about 30 other revenue-impacting features that hundreds of thousands of advertisers want first.  And it's behind those other features because thoughtful people working hard to meet the needs of our advertisers have decided that such an integration is not a top priority.&lt;br /&gt;&lt;br /&gt;Mike: please don't pretend that you can diagnose the root cause of a missing feature from the TechCrunch Ranch.&lt;br /&gt;&lt;br /&gt;Engineers at Google have a raw technical curiosity that is expressed in frequent conversations about other teams and other projects.  No one would say they know about everything going on, but engineers here, especially the best ones, tend to know A LOT about other projects throughout a variety of areas of the company.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-116365070983282036?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/116365070983282036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=116365070983282036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/116365070983282036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/116365070983282036'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/11/google-culture-can-not-be-diagnosed.html' title='Google Culture Can Not Be Diagnosed from the TechCrunch Ranch'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-116065450258328178</id><published>2006-10-12T07:51:00.000-04:00</published><updated>2006-10-13T08:20:33.603-04:00</updated><title type='text'>Definition of a bubble</title><content type='html'>Short note: everyone keeps wondering in print if Google's 1.65 billion dollar acquisition of YouTube constitutes a bubble or, even better, "irrational exuberance".  &lt;br /&gt;&lt;br /&gt;I don't want to comment directly on moves like this by Google, but I can't help but draw a comparison between this acquisition and an acquisition that took place at my last company.  &lt;br /&gt;&lt;br /&gt;Google spent about 1% of its market cap to buy the most successful independent new site on the web, an amount equivalent to approximately 15% of the company's total cash on hand.&lt;br /&gt;&lt;br /&gt;At the absolute peak of the bubble, March 15, 2000 (prior day's NASDAQ close: &lt;A HREF="http://finance.yahoo.com/q/hp?s=%5EIXIC&amp;a=01&amp;b=28&amp;c=2000&amp;d=02&amp;e=31&amp;f=2000&amp;g=d"&gt;4706.63&lt;/a&gt;), E.piphany, an unprofitable public company, diluted its share value by 25%, spending an amount equal to 7 times total cash on hand to buy Octane, a company with no real product or customers to speak of.&lt;br /&gt;&lt;br /&gt;Yes, &lt;a href="http://www.sfgate.com/cgi-bin/article.cgi?file=/chronicle/archive/2000/03/16/BU908.DTL"&gt;it really happened&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That's a bubble.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-116065450258328178?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/116065450258328178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=116065450258328178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/116065450258328178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/116065450258328178'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/10/definition-of-bubble.html' title='Definition of a bubble'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-115568508884370038</id><published>2006-08-15T19:23:00.001-04:00</published><updated>2006-09-07T18:32:27.200-04:00</updated><title type='text'>Startups and Small Sample Sizes</title><content type='html'>Here's a great way to commit mail fraud: pick 1024 names out of the phonebook, and send each of those people a free letter describing your analysis of the stock market, chock full of details like flattening yield curves, oil futures, and federal reserve monetary policy. In half the letters, state that all of these factors, taken together, will make the stock market go up in the coming month. In the other half, conclude that the market will go down.  In each letter, recommend that the reader go long or short the S&amp;P 500 according to your prediction.  &lt;br /&gt;&lt;br /&gt;512 people will receive a letter that turns out to be wrong; forget about them. Repeat the process the following month, splitting the remaining group in half again, so that 256 people get the "go long" recommendation, and 256 get the "short the market" recommendation.  Continue every month, discarding the people who got the wrong recommendation in the prior month.&lt;br /&gt;&lt;br /&gt;At the end of ten months, there will be one person who has received an accurate prediction every month. Send them a letter saying, "you've benefited for my market-beating advice for almost a year now. To keep getting my newsletter, just send me a check for $5000."&lt;br /&gt;&lt;br /&gt;Your final person ("the mark") has every reason to believe that you are infallible at predicting the direction of the stock market.  Why, they'd have to be an idiot NOT to send you $5000 to continue getting such valuable market insight!  You've never been wrong!&lt;br /&gt;&lt;br /&gt;As outside observers, we can, of course, see that you've made 1024 distinct predictions, and you've been wrong in 1023 of them.  But your target doesn't know that.  They have the wrong sample.&lt;br /&gt;&lt;br /&gt;So far, this has nothing to do with software.  But reconsider the above scenario, replacing each of the targets with employees at each of 1024 different software startups, each with a 50% chance of surviving any given year.  At the end of 10 years, we should expect that exactly one of our startups will still be around.&lt;br /&gt;&lt;br /&gt;Is that one startup filled with people whose talent that is so far above the mean that it was destined to be the one to survive?  Or were there a variety of random and semi-random factors at play, completely outside the control of the company, that helped them survive while the other guys failed?&lt;br /&gt;&lt;br /&gt;I'm a very strong believer in the importance of a strong team, and I do believe that strong teams build successful companies.  But all too often, people incorrectly make the reverse inference -- "If I'm at a successful startup, it's because I'm on a strong team.  If the team is strong, it must because I am strong.  In fact, my company has never made a mistake.  I am personally, and in all ways, infallible!  Wow, it is so great to be me!"&lt;br /&gt;&lt;br /&gt;This phenomenom can easily get so far out of hand as to hurt your company.  Entrenched gatekeepers from the early days of your company believe that their own judgement is solely responsible for the success of the company, and as such, why would they ever need to consider other opinions?&lt;br /&gt;&lt;br /&gt;The best way to detect whether someone is truly a rainmaker is to watch how they do in their second startup.  Just to pick on an old favorite: everybody remembers the whiz kid from UIUC who was going to destroy Microsoft with a web browser... but how many people remember &lt;A HREF="http://www.loudcloud.com/"&gt;LoudCloud&lt;/A&gt;?  Broadcast.com was fantastic!  But what ever happened to THAT guy?  Oh, apparently he owns a basketball team...&lt;br /&gt;&lt;br /&gt;Of course, if you're the late-joiner at a successful startup, you can't just wait around for everyone to leave and see how they do in their next venture (tempting though it may be to encourage them to head out on their own).  &lt;br /&gt;&lt;br /&gt;But you can at least come in with an understanding that people might be unwilling to entertain dissenting opinions for completely artificial reasons.  When you see the early employees of your company making decisions without examing the arguments, that's your sign to push back, hard.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;[Many people will read this post and ask the natural question, "well, does Google have this problem?"  A year or two ago, we definitely had a large number of people walking around who were convinced of their own perfection.  Fortunately, enough late-joiners have made enough critical contributions to the company that the problem has dissipated.  There are certainly still pockets of this attitude, but it doesn't take long to figure out where they are and how to avoid them.]&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-115568508884370038?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/115568508884370038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=115568508884370038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/115568508884370038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/115568508884370038'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/08/startups-and-small-sample-sizes_15.html' title='Startups and Small Sample Sizes'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-115555659815397653</id><published>2006-08-14T07:26:00.000-04:00</published><updated>2006-08-14T07:57:44.476-04:00</updated><title type='text'>Building Complete Teams</title><content type='html'>Mike Arrington &lt;a href="http://www.crunchnotes.com/?p=257"&gt;has a problem&lt;/a&gt; with Google's &lt;a href="http://googleblog.blogspot.com/2006/08/i-scream-for-google-ice-cream.html"&gt;custom version of the IT'S IT&lt;/a&gt;.  At first glance, Mike's complaint is completely valid, but a little deeper examination shows he's way off the mark.&lt;br /&gt;&lt;br /&gt;First off, just to be clear, I don't work at Google for the free food, and I don't know anyone here who does.  That being said, let me take a little tangent before returning to free ice cream sandwiches.&lt;br /&gt;&lt;br /&gt;A textbook mistake made by software companies, especially fast-growing software companies, is to focus immensely on hiring the most talented software engineers available, and then to fill any non-engineering position with whoever happens to come along - your recruiters, your admins, your sales department - everyone except for the engineers.  The reasoning goes, briefly, "Gosh, compared to engineering, all of &lt;b&gt;those&lt;/b&gt; jobs look so &lt;b&gt;easy&lt;/b&gt;, how could it matter that much who we hire for them?  Let's just fill the seats and get back to finding the best software engineers out there."&lt;br /&gt;&lt;br /&gt;If you were to do this in professional basketball, it would be like signing Kobe Bryant and LeBron James, then hiring all your coaches and trainers by walking into the nearest bus depot and shouting, "Would anyone here like to coach basketball?"&lt;br /&gt;&lt;br /&gt;This kind of hiring is a big part of what went wrong in the bubble.  A lot of companies hiring for our hypothetical basketball coach position would look at a candidate and say, "Well, he's never coached professional basketball before, but he did coach little league baseball once, and it's really the coaching skills we're hiring for - he's a perfect match."&lt;br /&gt;&lt;br /&gt;As a result, you wind up with an amazing engineering team surrounded by an absolutely craptacular company.  And engineers figure that out really quickly.  When good engineers try to get other good engineers hired, but your recruiters can't manage to contact a candidate for four months, engineers notice, and they get unhappy.  When your sales team goes out and sells a product that doesn't exist and never will, engineers get unhappy.  And when an admin sits at her desk IM'ing her friends instead of setting up the multi-continent conference call that needs to happen yesterday, engineers get unhappy.&lt;br /&gt;&lt;br /&gt;The great thing about Google is, we don't have this problem.  Plenty of bad things have been said about Google's hiring process being slow, or elitist, or &lt;a href="http://valleywag.com/tech/google/google-execs-hire-hot-assistants-156430.php"&gt;biased toward good-looking women&lt;/a&gt;, but we don't hire anyone mediocre to fill any role in the company.&lt;br /&gt;&lt;br /&gt;So imagine you're in charge of Google's food operations, and one of your goals is to attract the best and brightest corporate chefs that money can buy.  How would you go about that?  You might give them the luxury to work with only the finest, freshest, organic ingredients.  You might let them work in a state-of-the-art kitchen.  And every once in a while, you might give them a chance to take a classic ice cream treat and redo it in a way that aligns with their approach to cooking.&lt;br /&gt;&lt;br /&gt;That's my take on it -- a free custom version of the IT'S IT isn't about the people eating it, it's about the people making it.  From the description in the blog post, I'd imagine it was a pretty tough task, and it sounds like Nate and his guys did a stupendous job.&lt;br /&gt;&lt;br /&gt;Kudos to them.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;PS.  Remember, when I post on my own blog, I'm not speaking for Google in any way.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-115555659815397653?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/115555659815397653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=115555659815397653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/115555659815397653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/115555659815397653'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/08/building-complete-teams.html' title='Building Complete Teams'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-114496221910425318</id><published>2006-04-13T16:54:00.000-04:00</published><updated>2006-04-13T17:44:19.306-04:00</updated><title type='text'>Fun Bugs: Spamming Jeff Bezos</title><content type='html'>From late 1999 through mid-2002, Amazon loved to send email that said "As someone who's purchased books by Joe Blow in the past, we'd like to offer you a 10% discount on his new book, 'My Life as a Joe'."  The mail was powered by my company, E.piphany, and throughout most of 2000, I was at Amazon helping implement new features of that software.  It was during that stint that I saw one of my Favorite Bugs of All Time.&lt;br /&gt;&lt;br /&gt;One random afternoon, we were all happily hacking away, optimizing SQL queries, configuring new reports, when the VP of Customer Relations marched into the hallway and shouted, literally, shouted, "I NEED TO STOP ALL OUTGOING EMAIL RIGHT NOW.  WHO CAN MAKE THAT HAPPEN?"&lt;br /&gt;&lt;br /&gt;I was working with one other guy, and we immediately looked at each other and froze.  We both knew that Amazon was very serious about protecting customers from spam -- by their rules, they could only mail unsolicited offers to each customer once a month.  Two weeks earlier, our software had, by virtue of a bug, mailed a small set of customers more than once in the same month.&lt;br /&gt;&lt;br /&gt;Now, a Vice President was standing outside our office, shouting at the top of his lungs, that he wanted to stop outgoing email.  We were the most likely culprit, and we knew it. &lt;br /&gt;&lt;br /&gt;We were in trouble.&lt;br /&gt;&lt;br /&gt;It quickly came out that Jeff Bezos had received a few dozen email campaigns in the past half hour.  Seeing these, Jeff concluded that Amazon's outgoing email had gone completely haywire, and we were spamming every Amazon customer around the world.&lt;br /&gt;&lt;br /&gt;The rest of the afternoon was simultaneously gruesome and amusing.  It slowly became public that someone at Amazon was working on a email marketing system to replace our software, and he'd been debugging it that day.  Part of his code involved looking up a customer's email address, and the developer confessed that he had a couple means for looking up the address, and the fallback choice was "jeff@amazon.com".  I imagine it looked something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;string GetEmailAddress(userid) {&lt;br /&gt;  string result = GetEmailAddressMethod1(userid);&lt;br /&gt;  if (result == "") result = GetEmailAddressMethod2(userid);&lt;br /&gt;  if (result == "") // this can never happen&lt;br /&gt;    result = "jeff@amazon.com";&lt;br /&gt;  return result;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;He was testing that code with his own ID, but he wasn't getting mail, so he kept testing it.&lt;br /&gt;&lt;br /&gt;And testing it.&lt;br /&gt;&lt;br /&gt;And testing it.&lt;br /&gt;&lt;br /&gt;And every time he did, Jeff Bezos got mail.&lt;br /&gt;&lt;br /&gt;For me, the bottom line was that we weren't responsible for the bug.  Phew.  The culprit and his boss had to explain themselves to Jeff, and it probably didn't help his career any, but nobody lost their job.&lt;br /&gt;&lt;br /&gt;I'd love to be able to say there's some big lesson about software development to be had here, but the best lesson I can offer is "don't be dumb."  I share this only for the entertainment value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-114496221910425318?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/114496221910425318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=114496221910425318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114496221910425318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114496221910425318'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/04/fun-bugs-spamming-jeff-bezos.html' title='Fun Bugs: Spamming Jeff Bezos'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-114386245785380069</id><published>2006-03-31T22:11:00.000-05:00</published><updated>2006-04-04T10:43:46.490-04:00</updated><title type='text'>Google perks: interns</title><content type='html'>One of the great perks of working at Google is our intern program. In three years, I've had three interns: &lt;a href="http://www.cs.nyu.edu/%7Eshubinz/"&gt;Shubin Zhao&lt;/a&gt; (summer 2004), &lt;a href="http://www.cs.princeton.edu/%7Ebwk/"&gt;Brian Kernighan&lt;/a&gt; (summer 2005), and &lt;a href="http://www.cs.umass.edu/%7Eculotta/"&gt;Aron Culotta&lt;/a&gt; (fall 2005).&lt;br /&gt;&lt;br /&gt;First off, for those of you that don't believe me, yes, really, &lt;span style="font-weight: bold;"&gt;that&lt;/span&gt; Brian Kernighan.  Brian is old friends with &lt;a href="http://en.wikipedia.org/wiki/Peter_J._Weinberger"&gt;Peter&lt;/a&gt;, who I was working with in the summer of 2005. Brian likes to visit our New York office from Princeton, especially during the summer when class is out. Peter got Brian very excited about our project, then promptly disappeared for several weeks, so I got to be Brian's host.&lt;br /&gt;&lt;br /&gt;But working with the co-author of K&amp;R &lt;span style="font-family: courier new;"&gt;&lt;/span&gt;is just the tip of the iceberg! The opportunity to work at Google attracts some of the best and brightest students around, and we get to bring them in and see what they can do. My favorite strategy for a successful internship is to say, "Here's what we've built, and here are the problems on the horizon that we haven't time to address yet. Pick something from that general area and apply your big massive grey matter toward making my life easier."&lt;br /&gt;&lt;br /&gt;And it works! Shubin built an amazing architecture for information extraction based on some heuristic-oriented work I had done. Aron worked on combining signals in structured and unstructured data to learn new relations among entities in the universe. He even got a &lt;a href="http://www.cs.umass.edu/%7Eculotta/pubs_abstracts.html#culotta06integrating"&gt;paper&lt;/a&gt; out of that work. And when things go really well, your interns come back full time. Shubin joined our group full time in January 2005, and he's had a major impact on the quality of our product. And I'm looking forward to seeing &lt;a href="http://www1.cs.columbia.edu/%7Esashabg/"&gt;Sasha&lt;/a&gt;, one of our group's interns from last summer, return soon.&lt;br /&gt;&lt;br /&gt;The 2006 intern season is in full swing, and I am looking forward to learning what this summer's crowd will bring.&lt;br /&gt;&lt;br /&gt;[Updated at BWK's request to replace "co-creator of C" with "co-author of K&amp;amp;R"]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-114386245785380069?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/114386245785380069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=114386245785380069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114386245785380069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114386245785380069'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/03/google-perks-interns.html' title='Google perks: interns'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-114385832212567034</id><published>2006-03-31T20:49:00.000-05:00</published><updated>2006-03-31T22:09:37.656-05:00</updated><title type='text'>Having tried it, I am free to knock it</title><content type='html'>&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Ask anyone who has stayed awake for thirty-seven hours consuming nothing but Coke and Snickers bars and staring into a green CRT screen, if there is anything glamorous about the world of computer programming. Look deep into his bloodshot eyes, and try to detect any signs of joy among the red streaks. Then, just for kicks, ask him why he does what he does, despite all the pain it's causing. The most positive answer you'll get is, "it feels so good when it stops."&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;-- &lt;a href="http://www.sonic.net/paul/humour/msg00302.html"&gt;The Life of a Computer Science Major&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I just changed projects at work, moving from a C++ codebase to a Java codebase. When I joined to Google, all the "hard core" development happened in C++, so, against my better judgement, I sucked it up and tried to be productive in C++. Three years later, the environment at Google is different, so there's real, meaningful work being done in Java, and now I'm taking part in it. I feel like I've finally come to my senses. The only question now is, what took me so long?&lt;br /&gt;&lt;br /&gt;I'm not interested in making religious war about languages, but the contrast is too stark not to make note of. Here are some of the joys I've encountered in the past week:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Automated refactoring (including source control integration, for automated checkouts of affected files)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In-editor highlighting of compile-error typos&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Code navigation that's unparalleled by emacs&lt;/li&gt;&lt;li&gt;Collection APIs that make sense!  Holy cow!&lt;/li&gt; &lt;/ul&gt;And that was just in making one small change to fix my first bug.&lt;br /&gt;&lt;br /&gt;It amazes me that anyone on the planet still insists on using a 30-year old language. Java is C++ with all the boneheaded mistakes taken out, and the difference it makes is amazing.&lt;br /&gt;&lt;br /&gt;But my point isn't just that Java is better than C++ and you're stupid if you disagree with me. My point is that using Java instead of C++ lets you focus on the more interesting and challenging problems of building great software, so why waste your time with C++? Why waste the time to invoke a compiler to find out that your code has a typo when the editor can just tell you right away? Why manually slog through every usage of a particular function to add a parameter when you can just have a tool do it for you?&lt;br /&gt;&lt;br /&gt;Everyone's favorite argument against Java is performance, but that's based on a write-once-run-forever model of software development.  Sure, if you were just going to invest a fixed amount of development time in a bit of code and then let it eat CPU cycles forever, you'd want the highest-performance solution you could find (which, by the way, is probably assembly, or at least straight C, but not C++).&lt;br /&gt;&lt;br /&gt;But no software ever gets launched and then runs statically for eternity.  It gets extended and built upon and edited by dozens of different developers, all of whom have to be able to figure out what you were smoking when you wrote the code in the first place.&lt;br /&gt;&lt;br /&gt;The real challenge of software isn't building the first version, it's building the tenth version on a 5-year-old codebase that has been pushed way beyond its original design parameters and no longer fits the mold, written by someone who left the company two years ago and may or may not have written this code on his best day.  In C++ codebases, the state-of-the-art for dealing with code staleness is to rewrite the whole thing from scratch. This never works as well as you'd hope -- sure, it seems good for a while, but give your fresh rewrite a year or two to get stale, and you'll find your completely unable to manipulate the code in the face of changing requirements.  In the language of essay cited above, the complete rewrite is a Jello Hour solution.&lt;br /&gt;&lt;br /&gt;When I started writing Java code, it took about 3 months before I felt that I was really very facile with it. I wrote C++ code for 3 years, and I still feel like every line of code was a matter of poking myself in the eye with a sharp stick.&lt;br /&gt;&lt;br /&gt;The best thing I can say about my time writing C++ code is that it feels so good to have stopped.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-114385832212567034?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/114385832212567034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=114385832212567034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114385832212567034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114385832212567034'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/03/having-tried-it-i-am-free-to-knock-it.html' title='Having tried it, I am free to knock it'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-114117858411882890</id><published>2006-02-28T20:40:00.000-05:00</published><updated>2006-02-28T22:24:53.980-05:00</updated><title type='text'>Shameless self-promotion</title><content type='html'>A couple people have independently told me recently that they saw my AdWords ad on [Nelson Minar], and asked me why I was running the ad.  I had two main motivations:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's universally understood at Google that everyone should experiment with an AdWords campaign.  Google gives everyone $1/day to spend on advertising.&lt;br /&gt;&lt;li&gt;I want people to discover my blog, and Google ads work.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;As for using Nelson's name, well, I drew my inspiration from Google's own advertising campaign.  We've long used ads on the names of well-known engineers, especially in information retrieval, to draw attention to our job listings.  Why not use them same technique for my own purposes?&lt;br /&gt;&lt;br /&gt;Still, the ad text I was using was a little lame, so I've just rewritten it to:&lt;br /&gt;&lt;br /&gt;Shameless Self-Promotion&lt;br /&gt;Read my blog about how we can&lt;br /&gt;improve the quality of software.&lt;br /&gt;jonathanbetz.blogspot.com&lt;br /&gt;&lt;br /&gt;While I was in there, I updated the list of people I'm using for as keyword triggers.  For the record, the list is:&lt;br /&gt;&lt;br /&gt;- Brian Kernighan&lt;br /&gt;- Peter Weinberger&lt;br /&gt;- Nelson Minar&lt;br /&gt;- Jeremy Zawodny&lt;br /&gt;- Josh Bloch&lt;br /&gt;- Steve McConnell&lt;br /&gt;- Joel Spolsky&lt;br /&gt;- Rob Pike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-114117858411882890?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/114117858411882890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=114117858411882890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114117858411882890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114117858411882890'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/02/shameless-self-promotion.html' title='Shameless self-promotion'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-114097291432900656</id><published>2006-02-26T11:47:00.000-05:00</published><updated>2006-02-26T11:55:14.346-05:00</updated><title type='text'>An unintended quiet period</title><content type='html'>So, it's coming up on March, and the last post here is dated early November.  What was I doing?&lt;br /&gt;&lt;br /&gt;- Celebrating the holidays&lt;br /&gt;- Taking on a new responsibility at work&lt;br /&gt;- Trying to figure out how to build a long, successful career at Google&lt;br /&gt;- Reading &lt;a href="http://www.valleywag.com"&gt;Valleywag&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In late November my boss asked me to be the engineering liason to Google's new Pittsburgh engineering office.  We hired a couple managers to run the show there, but I was asked to come in and help them learn their way around Google.  &lt;br /&gt;&lt;br /&gt;I'm proud to say that they are off to a running start.  Google intends to hire 90 engineers in Pittsburgh within 2 years, and things look good so far.  We still haven't announced our permanent location in Pittsburgh, but I'm optimistic that we'll have a great location to announce soon.&lt;br /&gt;&lt;br /&gt;As far as building a long, successful career at Google goes, I can't say that I've figured out the best answer, but I'm at least pushing into some new directions.  Ideally it won't be another 4 months before I post about that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-114097291432900656?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/114097291432900656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=114097291432900656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114097291432900656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/114097291432900656'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2006/02/unintended-quiet-period.html' title='An unintended quiet period'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-113132325058661305</id><published>2005-11-09T00:00:00.000-05:00</published><updated>2005-11-08T20:45:23.180-05:00</updated><title type='text'>The Myth of Open Seating</title><content type='html'>Sadly, there are still some people who believe that the best way to build great software is to put everyone into a giant open cube farm -- an "open seating plan."  These people are flat-out wrong.&lt;br /&gt;&lt;br /&gt;This has been a topic of discussion at work lately, as we just moved into a space that combines the worst of all possible seating strategies – some of us are in a large, wide-open space that lets noise carry for miles, and those who were given offices are packed so tightly that you can't actually walk to your desk if your officemates are already seated.&lt;br /&gt;&lt;br /&gt;Coincidentally, Joel Spolsky recently had a &lt;A HREF=http://www.joelonsoftware.com/items/2005/10/16.html&gt;post&lt;/A&gt; in which he reconsidered his long-held tenet that software organizations work best when everyone has a private office; the four interns at Fog Creek worked together well by sharing a common space, and it made him briefly reconsider if private offices are the way to go.&lt;br /&gt;&lt;br /&gt;This idea that open seating fosters interaction and creates better software is an unsubstantiated myth that falls apart under the simplest examination.&lt;br /&gt;&lt;br /&gt;At Google, you can talk to the senior engineering executives and quickly understand that their commitment to open seating is a reaction to experience in academia and industrial research labs.  All of these guys have some story about places like Bell Labs or PARC, where everyone just came into work, went into their private office, worked all day, and went home without ever really interacting with the people around them.  This only leads to the kind of culture where ideas never turn into products, where everyone pursues their own agenda without challenge, and you eventually turn into a dinosaur that &lt;A HREF="http://www.sbc.com/gen/press-room?pid=7368"&gt;gets acquired by one of your more successful spinoffs&lt;/A&gt;.  The reaction at Google is to use open seating to make sure that you're exposed to the people around you.&lt;br /&gt;&lt;br /&gt;If you're hiring the kind of people who are happy to go into their office and not interact with anyone all day long, the problem is your hiring criteria, not your office layout.  &lt;br /&gt;&lt;br /&gt;Building great software is an interactive process, and the ideas from a group are frequently better than the ideas from any one individual.  People who have to be physically forced to interact with others are not good team players, and even if you do force them to sit in an open environment, you can't force them to listen to the world around them.  Send these people to your biggest competitor.&lt;br /&gt;&lt;br /&gt;It is factually correct to say that an open floor plan does create more casual conversations, but that ignores everything else that comes along with open floor plans.  It's an extremely fragile environment.  In every cube farm, there's always a spoiler.  There's the person who leaves their cell phone on their desk at the highest volume, then walks away for three hours.  There's the person who carries on a&lt;br /&gt;conversation, from their desk, with the person seated 30 feet away.  For some time last year, I became a spoiler without even realizing by playing with a little marble toy in the office – someone eventually worked up the nerve to tell me I was driving 20 people stark raving mad.  And, of course, there's always the person who simply lacks the ability to modulate their own volume according to the situation.&lt;br /&gt;&lt;br /&gt;And what happens when you're trying to get work done with a spoiler around?  You put on headphones.  Everybody does it.  Walk around the Google engineering office in New York, and you'll probably see ten to thirty percent of the engineers wearing headphones.  And putting on headphones does a lot more than block out the loud talkers and the abandoned cell phones: it blocks out all those wonderful casual&lt;br /&gt;conversations that are supposed to be the benefit of open seating.  Plus, now you're listening to music, which is only a distraction from what you're really trying to do: writing software.&lt;br /&gt;&lt;br /&gt;The worst thing about this debate is that &lt;a href="http://www.amazon.com/exec/obidos/redirect?path=ASIN/0932633439&amp;amp;link_code=as2&amp;amp;camp=1789&amp;amp;tag=softwarantsot-20&amp;amp;creative=9325"&gt; DeMarco &amp; Lister&lt;/A&gt; did the hard work years ago to demonstrate that the most productive developers are in organizations that provide private offices.  They didn't demonstrate causation but they have convincing data that great developers tend to wind up at the organizations that give them a private office with a door that closes.  And the cube farm advocates love to question the details of that study without providing anything other than anecdotal evidence in favor of support of their opinion.&lt;br /&gt;&lt;br /&gt;Is it the end of the world to hire the best talent available and then put them in sub-par work enviroments? No. But is a sub-par work environment going to cut into your ability to hire the best talent available?  Yes.  That's the real message here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-113132325058661305?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/113132325058661305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=113132325058661305' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/113132325058661305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/113132325058661305'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/11/myth-of-open-seating.html' title='The Myth of Open Seating'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-112731228447745217</id><published>2005-09-21T10:09:00.000-04:00</published><updated>2005-09-21T10:18:04.680-04:00</updated><title type='text'>Donde esta Q&amp;A</title><content type='html'>When I took my post-college trip to Europe, I was accompanied by one guy who knew a little French, and another guy who knew a little German (my contribution was that I knew a little Latin).  Early one morning, we found ourselves in northern Spain trying to find our way from the train station on one side of town to the bus station on the other side of town.  Our entire Spanish lexicon consisted of the knowledge that "donde esta" means "where is".&lt;br /&gt;&lt;br /&gt;As they say, hilarity ensued.  The people of that town were quite helpful, but "donde esta bus station" wasn't quite enough to carry us through.  Still, we were in high spirits, and after 15 or so minutes of walking around lost, we concluded that the funniest joke ever was to say "donde esta ... us?"  &lt;br /&gt;&lt;br /&gt;All of that makes this morning's new feature on google.com all the more interesting.  Google Q&amp;A, the product for which I serve as Tech Lead, is now live in Spanish.  &lt;A HREF="http://www.google.com/search?hl=es&amp;c2coff=1&amp;q=cual+es+la+presidente+de+ee+uu&amp;btnG=B%C3%BAsqueda&amp;lr="&gt;See what I mean?&lt;/A&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-112731228447745217?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/112731228447745217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=112731228447745217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112731228447745217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112731228447745217'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/09/donde-esta-qa.html' title='Donde esta Q&amp;amp;A'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-112664796323721830</id><published>2005-09-13T17:44:00.000-04:00</published><updated>2005-09-13T17:46:03.243-04:00</updated><title type='text'>Look what I made!</title><content type='html'>Today, Google launched a special search site for &lt;a  href="http://www.google.com/katrina.html"&gt;Hurricane Katrina information&lt;/a&gt;.  I worked on the "Search for People" feature.  We're collecting data from all over the web, and making it possible for people to find their friends and relatives with one search.&lt;br /&gt;&lt;br /&gt;Anyway, I just wanted to take this opportunity to brag a little about the cool stuff I get to do at work.  It's pretty rare that writing software gets you so palpably close to doing good things for the world, so it's a real high when it happens.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-112664796323721830?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/112664796323721830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=112664796323721830' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112664796323721830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112664796323721830'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/09/look-what-i-made.html' title='Look what I made!'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-112629891716905960</id><published>2005-09-09T16:40:00.000-04:00</published><updated>2005-09-09T17:23:43.926-04:00</updated><title type='text'>Random Apple Bugs...</title><content type='html'>Interesting flaws, especially UI flaws, in Mac software are rare enough that they're worth noting. I recently ran into two of them.&lt;br /&gt;&lt;br /&gt;My wife was trying to export a large group of photos from iPhoto (aside: she was using "export" because the "burn CD" feature isn't advised if the CD is meant to be read on windows. I thought we outgrew os-specific removable media a decade ago).&lt;br /&gt;&lt;br /&gt;So, every time she tries to do the export, we get an error message about "there is not enough space available". That's crap -- the finder ui reports 12 GB of free space, and she's only trying to export 100 mb of data. We do the obligatory Google search for the error message.&lt;br /&gt;&lt;br /&gt;The only hit is on some message board, and it's talking about a bug that's supposedly already fixed in our version of iPhoto. We try the suggested workaround for kicks, and, no surprise, it doesn't apply.&lt;br /&gt;&lt;br /&gt;Eventually I have the inspiration to empty the trash and try again. Aha! Now we have enough space. But the finder ui does nothing to hint us toward looking at the trash.&lt;br /&gt;&lt;br /&gt;OK, the problem is solved, but why should we have wasted our time on this? A few simple fixes would make the whole situation a lot easier to resolve:&lt;br /&gt;&lt;br /&gt;1. When you report that you don't have enough space, tell the user how much you think you have and how much you think you need. More generally, if you have an error condition because X is less than Y, report your perceived values of X and Y.&lt;br /&gt;&lt;br /&gt;2. When you report any resource as available, make some kind of modification to your message if the resource isn't completely available. Banks have long since mastered this style of reporting, maybe we can learn a thing or two from them.&lt;br /&gt;&lt;br /&gt;The second of my two recent interface flaws is even harder to excuse. It's actually so bad that I've considered not posting about it here, because I can hardly believe I'd be able to reproduce it. Still:&lt;br /&gt;&lt;br /&gt;I use the iLife Backup app. It seems decent enough, and it's definitely better than anything I ver found on windows. But the last time I did a backup, I wanted to be really sure that it had completed successfully. When it looked as though it had finished, I checked all the 'last backed up' times. And they hadn't been updated from the prior backup. Clearly, my backup had failed! So, I ran the backup again. And the 'last backed up time' still hadn't updated.&lt;br /&gt;&lt;br /&gt;This is where I had my flash of insight, and closed the backup app. Aha! Upon reopening it, the 'last backed up' timestamp now reflected the backup I had just done. To be clear: the software was doing everything except confirming for me that it had actually backed up my software. Gah!&lt;br /&gt;&lt;br /&gt;For the most part, the folks in Cupertino have user interaction down pat; like I said, that's what makes it interesting to note these flaws.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-112629891716905960?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/112629891716905960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=112629891716905960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112629891716905960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112629891716905960'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/09/random-apple-bugs.html' title='Random Apple Bugs...'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-112354251358872410</id><published>2005-08-08T19:05:00.000-04:00</published><updated>2005-08-08T19:08:33.596-04:00</updated><title type='text'>When Bad Software Happens to Good People</title><content type='html'>My goal for the day was to take a flight with my wife and daughter from Newark to San Francisco. We booked a nice, early 7am United flight so that I could get to California by 10:30am, local time, and put in a reasonable day's work. We showed up at the airport at 6am, and breezed through the line to the self-service checkin.&lt;br /&gt;&lt;br /&gt;Now, my first sign that United's software systems are broken should have come weeks earlier -- we were booking one ticket with miles, and the others would be paid for. When the agent booking the mileage ticket was physically unable to to book the other two tickets, I should have realized that United was using a booking system that had long outlived its usefulness.&lt;br /&gt;&lt;br /&gt;Sadly, I'm just not smart enough to read an obvious sign when I see it.&lt;br /&gt;&lt;br /&gt;So we check in my wife (the mileage ticket) and then attempt to check in me and my daughter. The checkin kiosk doesn't know who I am. We ask the ticketing agent, and she tells us that, although there's a record of the reservation, the tickets were never issued.&lt;br /&gt;&lt;br /&gt;The next 45-or-so minutes were enlightening, from the perspective of software anthropology. The key insight for me came from the following exchange:&lt;br /&gt;&lt;br /&gt;Ticketing counter agent: The original booking agent put an f-dash in [some field], and the automatic queueing system never picked that up and issued the ticket, because it looks for [some other code].&lt;br /&gt;&lt;br /&gt;Ticketing counter manager: They should know not to put an f-dash in that field, we haven't used that code for years.&lt;br /&gt;&lt;br /&gt;I can only deduce from this exchange that there are two separate mechanisms, and one of them (the reservation UI) allows input that isn't recognized by the other (the queueing system that issues the tickets from a reservation); as a result, some number of tickets are never actually issued, and this morning's episode gets repeated from time to time at United ticket counters around the country.&lt;br /&gt;&lt;br /&gt;Don't feel bad for me. I made it to San Francisco only two hours later than originally intended, I got to see the Denver airport, and I had plenty of time to finish reading Cinderella Man (I recommend that you read it). But think about this from United's perspective:&lt;br /&gt;&lt;br /&gt;From the time we realized there was a problem with our tickets, until the time we got on our first flight, we took the time of no fewer than seven United employees. At checkin, there were two ticket agents, their manager, and a person they called at their ticketing "help desk". The two ticketing agents were completely consumed with our case for about an hour. At the gate, another three gate agents were eventually involved in helping re-route us. And, if we're lucky, United will eventually offer us a few free tickets to accommodate us for the inconvenience. All of this is going to cost them a non-trivial amount of money. And there's nothing in the entire chain of events that was unique to our reservation -- this is a systemic bug that can be invoked by any reservation agent inputting the discontinued "f-dash" into the mysterious forbidden field. This magic code has supposedly been discontinued "for years", but the reservation system still accepts it, and the booking agents still use it, so the problem isn't going away any time soon.&lt;br /&gt;&lt;br /&gt;I have some theories about possible root causes of United's software problems. I'll try to get to these in a later post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-112354251358872410?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/112354251358872410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=112354251358872410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112354251358872410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112354251358872410'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/08/when-bad-software-happens-to-good.html' title='When Bad Software Happens to Good People'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-112258474969440109</id><published>2005-07-28T16:54:00.000-04:00</published><updated>2005-07-28T17:26:48.356-04:00</updated><title type='text'>The Disconnect Between People and Process</title><content type='html'>Earlier today, someone mailed me a link to the Construx course schedule. Construx is the company founded by Steve McConnell, author of Code Complete and The Software Project Survival Guide, along with several other great titles on software development. The courses offered by Construx have titles like:&lt;br /&gt;&lt;a href="http://www.construx.com/training/courses/CodeComplete.php"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a class="intercontentlink" href="http://www.construx.com/training/courses/CodeComplete.php"&gt;Code Complete Intensive: Practical Software Construction&lt;/a&gt;&lt;br /&gt;&lt;a class="intercontentlink" href="http://www.construx.com/training/courses/SPM.php"&gt;Software Project Management Boot Camp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm interested in software project management, so I checked out that link.  The course covers topic areas like:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Defining software project success&lt;/li&gt;   &lt;li&gt;Using a software project plan template&lt;/li&gt;   &lt;li&gt;Controlling change&lt;/li&gt;   &lt;li&gt;Effective conversion planning&lt;/li&gt; &lt;/ul&gt; I'm reading this and thinking to myself, "What does this do for me?" Ask yourself -- of software projects you've been on, when did you think "Gosh, this project could be a wild success if we could just define success! Maybe we need a software project plan template?" Not very often, I'll wager.&lt;br /&gt;&lt;br /&gt;On the other hand, how many times have you thought "This project could be a success if..."&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;... I could just convince &lt;team&gt; &amp;lt;team member X&amp;gt; to {stay focused|test his own code|stop playing ping-pong all the time}&lt;br /&gt;&lt;/team&gt;&lt;/li&gt;   &lt;li&gt;... I could show my boss that we just need a few more {weeks|people|machines}&lt;/li&gt;   &lt;li&gt;... we had a real {testing plan|development environment|business model}&lt;/li&gt;   &lt;li&gt;... our company could attract the most talented developers in the world.&lt;/li&gt; &lt;/ul&gt; Where is that material in courses on software engineering management?  Process is nice, but &lt;span style="font-weight: bold;"&gt;people matter&lt;/span&gt;. We have to start admitting that getting the best people is hard, important, and relevant to software success. If you want to create a process that captures that, all the better, but please stop talking about process as though it can abstract away all impact of people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-112258474969440109?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/112258474969440109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=112258474969440109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112258474969440109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/112258474969440109'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/07/disconnect-between-people-and-process.html' title='The Disconnect Between People and Process'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-111997041480162234</id><published>2005-06-28T10:50:00.000-04:00</published><updated>2005-06-28T10:54:16.090-04:00</updated><title type='text'>Trivial Pursuit is exactly that</title><content type='html'>Michael Liedtke of the AP has posted a &lt;a href="http://www.businessweek.com/ap/financialnews/D8ASSSE80.htm"&gt;review&lt;/a&gt; comparing the performance of major search engines on a randomly selected set of Trivial Pursuit questions. I'm all about getting the right answer to the top of the page every time, but think for a second about the words "Trivial Pursuit". Those questions aren't chosen because they're likely to be things people want to know, they're chosen because they're likely to be things that people don't know.&lt;br /&gt;&lt;br /&gt;A real way to do this review would be to find a way to sample the questions that people actually want to answer with search engines, and compare Yahoo, Google, MSN, et al on that set.&lt;br /&gt;&lt;a href="http://www.businessweek.com/ap/financialnews/D8ASSSE80.htm"&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-111997041480162234?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/111997041480162234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=111997041480162234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111997041480162234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111997041480162234'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/06/trivial-pursuit-is-exactly-that.html' title='Trivial Pursuit is exactly that'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-111928692710851244</id><published>2005-06-20T12:59:00.000-04:00</published><updated>2005-06-20T13:02:07.113-04:00</updated><title type='text'>No upside for talking to reporters</title><content type='html'>Fellow Googler Joe Beda has a great post detailing why there's &lt;a href="http://www.eightypercent.net/Archive/2005/06/18.html#a243"&gt;no upside in talking to reporters&lt;/a&gt;.  He might be taking the right idea a little too far, but it's definitely the right idea to start with -- when you blog, your message gets out to the world, unfiltered.  Reporters, intentionally or not, can twist your words around.&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-111928692710851244?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/111928692710851244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=111928692710851244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111928692710851244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111928692710851244'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/06/no-upside-for-talking-to-reporters.html' title='No upside for talking to reporters'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-111867571385645107</id><published>2005-06-13T11:10:00.000-04:00</published><updated>2005-06-13T11:15:13.860-04:00</updated><title type='text'>James Fallows, throw me a bone</title><content type='html'>The Times published a &lt;a href="http://www.nytimes.com/2005/06/12/business/yourmoney/12techno.html"&gt;rant&lt;/a&gt; by James Fallows about question answering vs. keyword search.  &lt;a href="http://googleblog.blogspot.com/2005/04/just-facts-fast.html"&gt;Google Q&amp;A&lt;/a&gt; isn't yet at the level of question answering he describes ("tell me the per capita spending on education in California over the last 50 years"), but he also goes the entire column without mentioning Google Q&amp;amp;A.&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;br /&gt;For the record, Google Q&amp;amp;A has been live for over two months, and it's a lot more like question answering than vivisimo's result clustering...&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-111867571385645107?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/111867571385645107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=111867571385645107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111867571385645107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111867571385645107'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/06/james-fallows-throw-me-bone.html' title='James Fallows, throw me a bone'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-111819644056065276</id><published>2005-06-07T21:52:00.000-04:00</published><updated>2005-06-07T22:07:20.563-04:00</updated><title type='text'>My kingdom for a decent personal finance app</title><content type='html'>About six months ago, my wife and I made the big switch to a mac.  Great!  No more spyware!  When I don't know how to navigate the GUI, I can drop into the CLI and fix things there!  The switch was nearly a complete success. &lt;br /&gt;&lt;br /&gt;Until we switched from MS Money to Quicken Mac.&lt;br /&gt;&lt;br /&gt;I soon learned that this app is almost universally reviled, for good reason.  Trying to describe the ways in which it is broken would take hours.  At the root, the problem is that the interface is just a series of co-existing application windows with no defined interaction.  Trying to find the right window for a given task requires examing all the windows, and when you get there, you find that the transaction you want to work with hasn't made it to that window yet.&lt;br /&gt;&lt;br /&gt;I've looked into some of the alternatives like &lt;a href="http://www.moneydance.com"&gt;MoneyDance&lt;/a&gt;, but nothing is all that appealing -- especially given the overhead of transitioning among data file formats.  My best bet at this point might be to start running MS Money on Virtual PC, thereby undoing much of the benefit of the switch.&lt;br /&gt;&lt;br /&gt;None of which is to say that  that Intuit appears to have noticed.  In all the forums with rants and raves against Intuit, there's no indication that they've tried to address any of it.  One might think they'd at least want to address the fray on the &lt;a href="http://www.amazon.com/gp/product/customer-reviews/B00029J1QI/ref=cm_cr_dp_2_1/102-4282562-8762505?%5Fencoding=UTF8&amp;s=software"&gt;amazon comments page&lt;/a&gt;, but they haven't bothered yet.&lt;br /&gt;&lt;br /&gt;I have tried unsuccessfully to track down the email address for the product manager for Quicken Mac at Intuit (I think the culprit is Adam Samuels).  If you have it, please leave a comment.  Someone needs to make his life painful enough that something starts to change.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-111819644056065276?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/111819644056065276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=111819644056065276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111819644056065276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111819644056065276'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/06/my-kingdom-for-decent-personal-finance.html' title='My kingdom for a decent personal finance app'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13502160.post-111819502069147666</id><published>2005-06-07T21:39:00.000-04:00</published><updated>2005-06-07T21:43:40.693-04:00</updated><title type='text'>Intro</title><content type='html'>I'm Jonathan Betz.  I work at Google; I'm the tech lead for our&lt;br /&gt;&lt;a href="http://googleblog.blogspot.com/2005/04/just-facts-fast.html"&gt;question answering service&lt;/a&gt; (aka "Google Q&amp;A").  Read my blog or don't read my blog, it's up to you.  You're not going to get the scoop on the next great Google product, but you might get some insight into life at a great software company, and you'll definitely get an earful of my ideas about modern software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13502160-111819502069147666?l=blog.jayteebee.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.jayteebee.org/feeds/111819502069147666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13502160&amp;postID=111819502069147666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111819502069147666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13502160/posts/default/111819502069147666'/><link rel='alternate' type='text/html' href='http://blog.jayteebee.org/2005/06/intro.html' title='Intro'/><author><name>Jonathan Betz</name><uri>http://www.blogger.com/profile/12418301982612783044</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-Z5eAgAnibcQ/TXeRDV1Q2yI/AAAAAAAADlg/PUSiVW5DIkE/s1600/betz.jpg'/></author><thr:total>0</thr:total></entry></feed>
