tag:blogger.com,1999:blog-83289685740998906832008-10-12T21:05:37.369-05:00A Smart Bear<b>Marketing and Business for Geeks.</b><br>By <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a>, founder of <a href="http://smartbear.com">Smart Bear</a>, a multi-million dollar bootstrapped software company.Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comBlogger71125tag:blogger.com,1999:blog-8328968574099890683.post-54731292526132272322008-10-12T10:03:00.003-05:002008-10-12T11:20:01.108-05:00Ideas for Swarm<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.locut.us/2008/10/06/swarm-a-true-distributed-programming-language/"><img width="173" height="409" style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_h9Xfgkw3Lq4/SPIVezn0M0I/AAAAAAAAAIU/2umVlXsSTUo/s320/ian-tree.GIF" border="0" alt="Ian Clark's Swarm" id="BLOGGER_PHOTO_ID_5256287334092256066" /></a>For this episode, a little less marketing, little more geek.<br /><br />Ian Clark has some interesting results with a new distributed programming language called <a href="http://blog.locut.us/2008/10/06/swarm-a-true-distributed-programming-language/" target="_blank">Swarm</a>. As the founder of <a href="http://en.wikipedia.org/wiki/Freenet" target="_blank">Freenet</a> and <a href="http://en.wikipedia.org/wiki/Ian_Clarke_(computer_scientist)" target="_blank">other</a> large-scale computing systems, his opinions on the subject are not idle thoughts.<br /><br />He does <a href="http://blog.locut.us/2008/10/06/swarm-a-true-distributed-programming-language/" target="_blank">a fine job of explaining Swarm</a> with preliminary results, so I'll limit myself here to a pile of <span class="Apple-style-span" style="font-weight: bold;">off-the-cuff reactions:</span><br /><ol><li>If keys in the store are an MD5 or SHA1 of the content they are storing, caching data across nodes becomes trivial. If stack state is stored like this as well (compute only on send?) and chained (one stack frame per hashed data element, each with a "pointer" to the hash of the next stack frame), transmission of continuations can also be saved.</li><br /><li>The graphics are the compelling thing. It's what separates this from other projects. Emotional? Yes but adherence to a programming language is as much emotion as anything else. I say build visualization into the language itself. Make it trivial to produce. This is what everyone's going to share and talk about.</li><br /><li>Use the JVM model; don't invent a new VM. But you need full control. So, start with a JVM interpreter written in Java (see <a href="http://joeq.sourceforge.net/" target="_blank">joeq</a> or <a href="http://jikesrvm.org/" target="_blank">jikes</a> or write your own using <a href="http://asm.objectweb.org/" target="_blank">ASM</a>) which you could then modify. Then you inherit all existing Java libraries to your new language. You <i>have</i> to inherit a bunch of libraries, at least at first!<br /><br />This also opens the door for interesting optimizations, like identifying short stretches of bytecode where break-for-continuation is not permitted, breaking those out into dynamically-written subroutines, and allowing the underlying JVM to JIT it.<br /><br /></li><li>Scala might be fun to learn, but if this project gets going it will be hard enough to root out the bugs without the underlying language also riddled with bugs!  Not to mention the extra barrier to entry ("Wait, I have to learn Scala first?").<br /><br /></li><li>How does user interaction work when the execution is moved? Even something as simple as a command-line, much less a GUI. Doesn't this imply that at some point in the execution stack you <span class="Apple-style-span" style="font-style: italic;">have</span> to return to the original machine?<br /><br />(More reason to use Java directly -- bridge between distributed-mode and local-mode for the non-distributed part of the work.)<br /><br /></li><li>Same question with external resources.  File system is easy, but what about a TCP connection or a database connection?  How shared across machines?  Or do you need a way to say "Send the execution to this specific node, the one that houses this resource?"  Maybe with an instruction that says "When this routine completes, redistribute this execution."  Maybe that instruction has a back-pointer to the original executing node, not <span class="Apple-style-span" style="font-style: italic;">requiring</span> you to return there (i.e. what if that node is now overloaded?) but <span class="Apple-style-span" style="font-style: italic;">suggesting</span> since that node does have all the necessary data cached.<br /><br /></li><li>In Java some critical, tight, high-performance routines are in C; in Swarm perhaps tight routines can be in Java!  Java Annotations might be a way to specify "don't distribute" on a method.<br /><br /></li><li>If you base on the JVM and use Annotations, perhaps existing code could be ported with no alteration! Or you can mix Swarm and plain Java with one line of code. This "easy to revert back" attribute is critical for adoption because people don't like lock-in.<br /><br /></li><li>How does synchonization work?  Locks-held need to be part of the continuation.  But are there other subtle issues?<br /><br /></li><li>You'll need your own synchronization of course.  <span class="Apple-style-span" style="font-style: italic;">Please please please</span> use deadlock-detection, throwing an exception instead of just locking up.  It's not hard to implement.<br /><br /></li><li>Suggestion that <a href="http://en.wikipedia.org/wiki/MapReduce" target="_blank">MapReduce</a> be the next thing that is implemented because it's the hot thing in distributed computation and folks are convinced that many useful things can be expressed that way. Demoing efficiency (and pretty pictures) here would be compelling to many people.<br /><br /></li><li>Fault tolerance. Probably don't have to have this at first, but need a thought-experiment-level concept of how to handle.<br /><br /></li><li>Computational caching. With SHA of input and full knowledge of bytecode, you could perhaps automatically cache the results of computation!  Think of algorithms where you should use functional programming. Or even just dynamic webpages where the home page doesn't change that often.<br /><br /></li><li>Consider <a href="http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/" target="_blank">JavaSpaces</a> for object transfer?  Might solve some issues with fault tolerance.<br /><br /></li></ol>Giving advice and asking questions is easy. Hopefully some brave souls will do the real work of getting Swarm up and running. Good luck Ian!<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-54420931521703762142008-10-08T21:46:00.000-05:002008-10-08T22:36:53.592-05:00Giving it away<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3177/2559724403_7d5e535df1_m.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 240px; height: 180px;" src="http://farm4.static.flickr.com/3177/2559724403_7d5e535df1_m.jpg" alt="" border="0" /></a>In <a href="http://www.gerrycullen.com/index.html"><i>The Coldest Call</i></a>, Gerry Cullen gives us an pithy rule of sales:<blockquote><b>If you can't give it away for free,<br />you can't sell it.</b></blockquote><p>It sounds tautological at first, but it helps you create products that are easy to sell. Here's how.</p><p>Because of <a href="http://smartbear.com/">Smart Bear</a> and this blog, I hear new company ideas all the time. When I start asking about new products, the conversation invariably looks like this:</p><blockquote><i>Me:</i> Would you get customers if your software were free?<br /><br /><i>Confident Entrepreneur:</i> Of course! Why not take it if it's free?<br /><br /><i>Me:</i> That's what I'm asking -- are there reasons people still wouldn't take your software even if it were free?<br /><br /><i>Confident Entrapreneur:</i> Free is free. Of course they'd take it.</blockquote><p style="font-weight: bold;">Not so fast there, pardner.</p><p>Let's say it's 1998 and you've invented a corporate-wide spam filter. Great timing -- the web is exploding, everyone has an email account, spam is choking in-boxes and wasting time. You've invented a box that sits in front of the mail server, tossing the garbage before it hits your server, much less your workstations and laptops.</p><p>So couldn't you give away a free spam filter?</p><p>Well. What happens when the filter accidentally marks something as spam when in fact it's a real email? Will we lose productivity as people get confused or spend time digging through a massive spam dumping ground looking for the message? Does email recovery require an administrator? Will he be drowned in requests? Will we have to hire a spam depository admin? Operating this system clearly costs time and money.</p><p>How much training is required to get people to use the new system? How many spam-filter-related questions will hit our internal help-desk? Support activities are expensive.</p><p>What if the spam filter box gets overloaded with too much mail? If there's a bug, is it possible to loose an email completely? What happens if the spam filter box crashes -- does email cease across the entire company? Losing email is unacceptable.</p><p>These concerns are so scary and costly that <i>the spam filter might not be worth it, even for free</i>. And if you're ambivalent about taking it for free, you're certainly not going to pay for it.<br /></p><p>So how do you design a product that passes Gerry's test? <a href="http://www.scottberkun.com/blog/2007/how-to-write-a-rude-qa/">Ask yourself brutal questions</a> to root out how your product might cause more pain than it solves. Here's some to get you started:<br /></p><dl><dt style="font-weight: bold;">If your product fails catastrophically, what's the impact?</dt><dd><br /></dd><dd>Good answers include:<br /><ul><li>Because the product is completely independent of any other system, in the worse case you're back to how things were before you bought our product.<br /></li><li>We'll show you how to configure other systems to silently and automatically route around the failure. During the trial period you can test this yourself.<br /></li><li>We have <a href="http://www.joelonsoftware.com/articles/fog0000000052.html">built-in support for switching back</a> to the way you were doing it before.<br /></li><li>Administrators are instantly alerted of the failure<br /></li><li>You can use your existing monitoring/alerting system to detect failures<br /></li><li>We support live-redundancy and continuous backup</li></ul></dd><dt style="font-weight: bold;"><br /></dt><dt style="font-weight: bold;">Is it easy to rip this out if I don't like it?</dt><dd><br /></dd><dd>Good answers include:<br /><ul><li>Since this system is completely independent of all other systems, you can just turn it off.<br /></li><li>All data in the system can be <a href="http://www.joelonsoftware.com/articles/fog0000000052.html">exported at any time</a> in a standard, human-readable format (e.g. XML, CSV). (You can also use this for backup.)<br /></li><li>Because we handle catastrophic failure gracefully, you can literally pull the plug and everything else continues to work.<br /></li></ul></dd><br /><dt style="font-weight: bold;">How much training does this require?</dt><dd><br /></dd><dd>Good answers include:<br /><ul><li>Our website has pre-recorded training presentations. We give you the source materials for free so you can customize for internal training classes.<br /></li><li>We have tutorials and screenshots showing how to do common tasks.<br /></li><li>We have excellent in-product help, as well as a printed manual.<br /></li><li>Accomplishing typical tasks is <a href="http://www.sensible.com/buythebook.html">obvious</a>.<br /></li></ul></dd><br /><dt style="font-weight: bold;">Can my end users inadvertently break the product or prevent other users from using the product?</dt><dd><br /></dd><dd>Good answers include:<br /><ul><li>Each workstation is separate so it cannot break other people's workstations.<br /></li><li>The server has quotas, permissions, and other administrator-controlled limits to prevent excessive or improper use.<br /></li><li>We support running inside a <a href="http://en.wikipedia.org/wiki/Platform_virtualization">virtual server</a> so our software failures are isolated.<br /></li><li>We blast our software with load-testing, failure-case testing, and intrusion-testing, so we know that users can't break it with normal use.<br /></li></ul></dd><br /><dt style="font-weight: bold;">If your company goes out of business, what's the impact on me?</dt><dd><br /></dd><dd>Good answers include:<br /><ul><li>Because you own the software/hardware and you host it yourself, inside your firewall, you're not affected.<br /></li><li>Because your license code is good forever -- only <i>upgrades</i> require you to give us more money -- the software continues to work.<br /></li><li>Although we charge a monthly fee, the license agreement states that if we go out of business you can continue using the software without charge.<br /></li><li>We'll put our software in escrow so if we cease support you have the ability to maintain the product yourself. (In this case it's reasonable to require the customer to pay all escrow costs.)<br /></li><li>Our software is open-source and licensed such that you can continue using it and changing it. (This works if you're selling professional services.)<br /></li></ul></dd></dl><p>With these questions in mind, here's some ideas for tweaking the corporate spam filter product:<br /></p><ul><li>The filter runs as a plug-in to your existing mail server. The email admin therefore has full control over when it runs, making it trivial to disable.<br /></li><li>If the plug-in fails it makes a log in the mail system which can then be monitored by the same tool that already monitors the mail system.<br /></li><li>Because it's a plug-in, it scales as your mail server scales.<br /></li><li>Users get one email per day summarizing the mail that was marked spam. They can glance over it looking for things that are not spam, and use a link next to each one to recover it, in which case it's instantly delivered to their inbox. Thus they can help themselves most of the time without burdened email admins.</li><li>The summary email can is clear enough that most people will understand it without training classes.<br /></li><li>Spam emails are stored in a special folder in the mail system, not in a proprietary format. Then data access and backup can be done with any email client, even if you uninstall the spam filter, even if the supplying company vanishes.<br /></li></ul><p><span style="font-weight: bold;">Does your product pass Gerry's test? Want to brainstorm about it? Leave a comment and let me know.</span><br /></p><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-67898214001020800912008-10-04T14:46:00.000-05:002008-10-04T14:58:18.726-05:00Customers over Employees<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_h9Xfgkw3Lq4/SOfKUrats5I/AAAAAAAAAH4/qT54yCbI9M8/s1600-h/no-service.jpg"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_h9Xfgkw3Lq4/SOfKUrats5I/AAAAAAAAAH4/qT54yCbI9M8/s200/no-service.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5253389946951938962" /></a><a href="http://positivesharing.com/2006/07/why-the-customer-is-always-right-results-in-bad-customer-service/">Alex Kjerulf articulates</a> why customers can't always come first.<blockquote>Let me get this straight: <span class="Apple-style-span" style="font-weight: bold;">The company will side with petulant, unreasonable, angry, demanding customers instead of with me, its loyal employee?</span> And this is meant to lead to better customer service?</blockquote>Everyone says "put customers first."  They pay the bills, they're who the company exists to serve, they're the ones who must be satisfied, in their hands rests word-of-mouth, the most powerful force of marketing.<div><br />But what about employees? The ones who you'd like to be motivated to serve these customers, day in and day out. Where do they fit in the customer service model? When it comes down to employee happiness versus customer happiness, what do you do? And yes, it can come down to it.</div><div><br />Some customers are so poisonous to your poor employees that it's your <i>duty</i> to get rid of them.  Some you should <a href="http://sethgodin.typepad.com/seths_blog/2006/04/the_customer_is.html">wish on your competitors</a>.  Sometimes the <a href="http://blog.asmartbear.com/2008/08/customer-is-always-right.html">customer isn't right</a>.</div><div><br /></div><div>Maybe 1% of your customers are problematic, but they're a vocal and time-sucking and morale-draining 1%.  <span class="Apple-style-span" style="font-weight: bold;">Is 1% more business worth it?</span></div><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-30450225500219727552008-09-27T14:26:00.002-05:002008-09-27T14:45:18.994-05:00Peer code review interview at GeekAustin<a title="Lynn Bender" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://geekaustin.org"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px;" src="http://www.austinchronicle.com/binary/5c69/books_feature-3574.jpeg" border="0" alt="" /></a><div><a href="http://www.linkedin.com/in/lynnbender">Lynn Bender</a> is getting really good at interviewing!</div><div><br /></div><div>He just <a href="http://geekaustin.org/2008/09/24/smart-bear-jason-cohen-code-review/">posted a recent interview</a> with me about why peer code review works and how it fits with modern software development.</div><div><br /></div><div>If you haven't been to one of his mixers, you should stop by the <a href="http://geekaustin.org/2008/09/24/geek-meets-grid-geekaustin-8th-anniversary-party/">GeekAustin 8th Anniversary party</a> this Tuesday.  He always throws a great party.</div><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-81059924464817639352008-09-23T18:23:00.001-05:002008-09-23T18:37:41.823-05:00Joshua Bloch dripping with wisdom<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1222212501&amp;sr=8-1"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 240px;height: 240px" src="http://ecx.images-amazon.com/images/I/51Y6dxwLIGL._SL500_AA240_.jpg" border="0" alt="" /></a>When <a href="http://en.wikipedia.org/wiki/Joshua_Bloch">Joshua Bloch</a> speaks, the ground shakes, oceans part, and Java developers fall to their knees and tremble.  At least, I do.  I think animals get <a href="http://users.lycaeum.org/~maverick/quake.htm">nervous</a> before Josh writes articles.<div><br /></div><div><span class="Apple-style-span" style="font-weight: bold;">His latest </span><a href="http://www.infoq.com/articles/API-Design-Joshua-Bloch"><span class="Apple-style-span" style="font-weight: bold;">article on API design</span></a><span class="Apple-style-span" style="font-weight: bold;"> is a must-read.</span>  I don't think he's written a single word I don't agree with, and this is no exception.<br /><div><br /></div><div>P.S. If you're a Java developer and you don't have <a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1222212501&amp;sr=8-1"><i>Effective Java</i></a> within arm's reach, consider it a critical-severity bug in your personal development.  The <a href="http://www.amazon.com/Java-TM-Puzzlers-Pitfalls-Corner/dp/032133678X/ref=sr_1_4?ie=UTF8&amp;s=books&amp;qid=1222212563&amp;sr=1-4">Puzzlers</a> are less practical but fun.</div></div><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-83674010952931798212008-09-07T14:20:00.002-05:002008-10-07T08:39:28.228-05:00Software Quality MortgageYour code is a mess. Years of squeezing in "must-have" features for big customers have stretched the code beyond its original design. Core modules are riddled with landmines. Tacit assumptions shared by the two founders aren't obvious to the next ten hires.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_h9Xfgkw3Lq4/SKcmml2h4zI/AAAAAAAAAHA/O3ZaE4Xu-50/s1600-h/GuyWhoWroteTheCodeLeft.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; border: 0;" src="http://1.bp.blogspot.com/_h9Xfgkw3Lq4/SKcmml2h4zI/AAAAAAAAAHA/O3ZaE4Xu-50/s400/GuyWhoWroteTheCodeLeft.jpg" alt="" id="BLOGGER_PHOTO_ID_5235195536279200562" border="0" /></a><br />When companies are new and unknown, still seeking their niche, the most important thing is to get the software out the door, bugs and all.<br /><br />It's the <a href="http://feeds.feedburner.com/~r/onstartups/~3/316269136/Startup-Business-Strategy-For-The-Simple-Minded.aspx">right thing for the company</a> and the <a href="http://www.joelonsoftware.com/articles/fog0000000014.html">right thing for the software</a>, but there comes a day when your emphasis shifts from "time-to-market" to reducing tech support calls and not pissing off tens of thousands of existing users with a dud release.<br /><br />But now you have all this crappy code.<br /><br />I call this phenomenon the "Quality Mortgage." The analogy to a home mortgage is instructive.<br /><br />A responsible, hard-working person still cannot afford to purchase a home outright and therefore enters into debt. If shippable, salable software is the house you want today, your debt is the quality and maintainability of your code. Sure you could build a close-enough-to-bug-free application if given ten years to work on it, but you're taking out a mortgage to build v1.0 in six months.<br /><br /><b>But eventually you have to pay back the debt. With interest.</b> You pay interest in the form of bugs. Bugs everywhere, many preventable had you given time to have unit tests, good design, manual tests, and use-cases. And fixing those surface bugs doesn't fix the underlying problems in the code. This is perfectly analogous to those first years of the mortgage where you're paying interest without reducing the principal. But this is still the right choice at first -- fix the most heinous bugs and keep going.<br /><br />Over time you can pay back the principal, slowly. You can refactor one file while adding a feature. You can add complete unit test coverage for a handful of core methods. You can write a manual test plan for a particularly complex dialog box. This is all good! But at this rate it's still going to <a href="http://www.joelonsoftware.com/articles/fog0000000017.html">take ten years</a> to pay it back.<br /><br />Or maybe you'll never pay it back. Because unlike a house your software is constantly expanding with new features and reused for purposes beyond its original conception. Without fixing the underlying mess or the process that brought you that mess, you'll never catch up. It's more like an interest-only mortgage.<br /><br />At some point you can't tolerate this anymore. It's time to pay down the principal in earnest. But this requires allocating time for major rework.<br /><br />Winning the right to refactor can be tough politically, especially with non-technical stakeholders. Here's how to combat the common arguments against spending time refactoring:<br /><ol><li><b>Clean-up is invisible to users; we need to add new features.</b><br />The bugs constantly produced by messy code are visible to users too. Time spent fixing those bugs could have been spent adding features. The longer we stay in quality debt, the more time it takes to add each new feature.<br /></li><br /><li><b>We don't have time for clean-up.</b><br />You'd rather spend your time fixing bugs <i>generated</i> by the problem rather than fixing the problem? That's like whacking weeds every weekend instead of pulling them up by the roots. Prevention is <a href="http://www.bartleby.com/59/3/ounceofpreve.html">sixteen times</a> more valuable than cure.</li><br /><li><b>Developers got themselves into this mess; they should get themselves out of it on their own time.</b><br />Had developers not gotten releases out the door as fast as they did, had they not responded so swiftly to early adopter feedback, even when the product morphed into a beast quite different from its original conception, we wouldn't have our current customers and revenue. We'd be working for another company, not complaining about the software we built.<br /><br />Attention CEO's: Finger-pointing impedes resolution. Instead, challenge your developers to reduce bug reports. This is easily measured, so you can track time versus results. Remember, developers prefer implementing new features to fixing bugs, so if they're begging for time to fix bugs, it's serious.<br /></li></ol>A fine line separates debt as a lever for acceleration and an insurmountable drag. The quality mortgage is a necessary evil in early software development, despite its eventual problems. Just plan on paying it back.<br /><br />P.S. After writing this I found Martin Fowler <a href="http://www.martinfowler.com/bliki/TechnicalDebt.html">making the same point</a>.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-50205910264855655752008-08-20T19:55:00.001-05:002008-09-04T07:00:34.060-05:00Avatar Marketing<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_h9Xfgkw3Lq4/SKy9Gkg3O6I/AAAAAAAAAHg/I5ARiWIYM6s/s1600-h/jason-south-park.png"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 219px; height: 264px;" src="http://4.bp.blogspot.com/_h9Xfgkw3Lq4/SKy9Gkg3O6I/AAAAAAAAAHg/I5ARiWIYM6s/s320/jason-south-park.png" alt="" id="BLOGGER_PHOTO_ID_5236768387303422882" border="0" /></a>Addressing your entire customer base at once is tough, but it's exactly what your web page has to do. Unfortunately most companies approach this in exactly the wrong way.<br /><br />Examples of our struggle:<br /><ul><li>We want managers to see that they'll get metrics and reports, but we want end users to see that they'll save time and busywork.</li><li>We want to look professional so big-company managers are comfortable choosing us, but not so aloof that small-company developers think we're too corporate and can't relate.</li><li>We want to highlight our configurable workflows that allow large customers to apply one tool for all groups, but we need small customers to realize that you can turn all that off so it doesn't slow you down.</li></ul>The usual response to this conundrum is to cast a wide net. The worry is that if you hit one type of customer on the head, another type will feel excluded and might look elsewhere. So you use generic messages like "The Power to Know."<br /><br /><b>This is dangerous thinking.</b> Generalized messaging has no power, no emotional connection, no interest. If a phrase like "The Power to Know" is equally useful for <a href="http://www.sas.com/solutions/powertoknow.html">business intelligence</a> software, buying <a href="http://www.thepennygroup.com/site/1_1_0.cfm">decision analysis</a>, and <a href="http://www.blavatsky.net/theosophy/judge/articles/power-to-know.htm">theosophical treatises</a>, it's not exactly hitting the nail on the head.<br /><br />Let me suggest a completely opposite approach. <b>Start by describing a perfect customer.</b> Give her a name (Carol). Pick a concrete company that she works for, a company similar to one of your existing, thrilled customers. What's her official title and what does she do? If your potential market includes a wide variety of company types and positions, <i>just pick one in particular</i>. Whatever problems your product solves, Carol has <i>all</i> those problems. Write those down from her point of view, the way she would describe them if complaining to a friend over lunch. Whatever advantages you have over your competitors, Carol needs exactly those things. List them.<br /><br /><b>Carol is literally custom-built to be blown away by your product.</b><br /><br />Now the question is: What would a web page / Google ad / print ad / tradeshow booth / postcard be like such that Carol would immediately understand that you are her savior? Remember, you get only 3 seconds to grab her attention and another 5-10 to convince her that your product is the second coming.<br /><br />Can you make it clear in a picture? Maybe a before/after she can relate to? Will describing three features make it plain? Will pointing out your best competitive advantage make her weep for joy? Can you ask a provocative question, something she identifies with? Is there a phrase she'd laugh out loud at because "that's so true?"<br /><br />You only get a few seconds, so a paragraph won't do. You have to communicate in a picture and a few words. The good news is you have to please <i>only Carol</i>, and you know Carol. You even know she'll honestly be thrilled to find you.<br /><br /><b>If your ad can't grab Carol's attention -- your perfect customer -- why do you think it will grab anyone else's attention?</b><br /><br />If you still say it's impossible to communicate your message in 5-10 seconds, <i>no one in the world will get your message</i>.<br /><br />This isn't just an academic exercise; your ad will work on non-Carols too! In fact, non-Carols might not be as "non" as you think:<br /><br />So called "large company managers" might be running small agile groups; you might do well to appeal to that side of them. Software development managers might like metrics, but it's wrong to think they are unconcerned with their developers' quality of life. Yes big companies like to choose "stable" vendors, but small companies with strong products are in vogue now, and even IBM <a href="http://www.bizjournals.com/sanfrancisco/stories/2002/06/10/newscolumn9.html">admits</a> that people can be fired for buying IBM.<br /><br /><span style="text-decoration: underline;"></span><u></u>When your message is powerful, Carol and anyone remotely like Carol will notice. If your message is weak, no one will notice.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-68004842610169278562008-08-16T08:15:00.000-05:002008-08-16T13:52:39.762-05:00Wordle me this<a href="http://wordle.net/">Wordle</a> is fun!<br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_h9Xfgkw3Lq4/SJXruTVZXBI/AAAAAAAAAGw/-yW1-jzXzAI/s1600-h/wordle-rss.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_h9Xfgkw3Lq4/SJXruTVZXBI/AAAAAAAAAGw/-yW1-jzXzAI/s320/wordle-rss.png" alt="" id="BLOGGER_PHOTO_ID_5230345722957224978" border="0" /></a><span style="font-style: italic;font-size:85%;" >(Click to Enlarge)</span><br /></div><br />It's also instructive. It's clear I write more about marketing and business than about software development. I didn't intend that at the outset, but there it is!<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-21213730931606540792008-08-07T11:08:00.003-05:002008-09-04T06:56:16.742-05:00Hello, I'm 1074018628<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_h9Xfgkw3Lq4/SJsevGmvMvI/AAAAAAAAAG4/MJmLj-hRnHE/s1600-h/cust-service-metal-door.jpg"><img style="margin: 0px auto 10px; float: right; cursor: pointer; width: 223px; height: 167px; padding-left: 5px;" src="http://1.bp.blogspot.com/_h9Xfgkw3Lq4/SJsevGmvMvI/AAAAAAAAAG4/MJmLj-hRnHE/s320/cust-service-metal-door.jpg" alt="" id="BLOGGER_PHOTO_ID_5231809186696737522" border="0" /></a>I just received this email:<br /><blockquote>Yahoo! is committed to the success of account 1074018628 and we believe there is an opportunity to provide you with improved performance. </blockquote><span style="font-weight: bold;">There's saying you value your customers, and there's your behavior.</span><br /><br />You can use your customer mailing list to barrage me with up-selling "opportunities," or you can send me interesting articles.<br /><br />You can put your customer service number on every page on your website, or you can provide only a web form.<br /><br />You can have a recorded message saying my call is important to you, or you can have someone else pick up the phone.<br /><br />You can answer the phone with the least knowledgeable, lowest-paid employee you can find, or you can empower service reps to give refunds, bend the rules for extenuating circumstances, and escalate special situations to someone who has the power to address them properly.<br /><br /><b>Is "customer service" a service for customers or a shield against them?</b><br /><br />Actions > Words.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-38220386024443632602008-08-01T13:59:00.002-05:002008-08-01T14:00:32.611-05:00The customer is always right?"The customer is always right," coined by <a href="http://www.phrases.org.uk/meanings/106700.html">somebody</a> around the turn of the last century, is probably still a good mantra for retail, restaurants, and the like.<br />But many of our customers are the opposite. <b>In fact, many hope that we'll tell them what's right.</b><br /><div class="separator" style="text-align: center; clear: both;"><br /><a href="http://bp0.blogger.com/_h9Xfgkw3Lq4/SJNcHE7vg4I/AAAAAAAAAGo/OC5FnhnqmN0/s1600-h/call-someone-who-cares.jpg" imageanchor="1" style="border: 0pt none ; background-color: transparent; margin-left: 1em; margin-right: 1em;"><img src="http://bp0.blogger.com/_h9Xfgkw3Lq4/SJNcHE7vg4I/AAAAAAAAAGo/AJIkdHFXZcg/s320-R/call-someone-who-cares.jpg" style="border: 0pt none ;" /></a></div><br />During every demo there's a moment where the customer explains how they're going to do X in their process, and how <a href="http://codecollaborator.com/">Code Collaborator</a> seems perfectly suited for X. Then, much to their surprise, I gently explain why X is a bad idea and Y is better.<br /><br />Sounds arrogant, right? The customer is always right! And they were <i>happy</i> about X and <i>happy</i> that we would support X, so what the hell am I doing? Let 'em be happy!<br /><br />What I'm doing is enabling them. I'm giving them advice from years of experience for free. I'm demonstrating that we tell the truth, even if the truth doesn't serve the direct purpose of selling the tool, even if it means I'm arguing instead of agreeing. And it's appreciated, because <b>there's not enough truth</b> in sales and business.<br /><br />Of course the customer isn't always right, and with some types of business you should roll over. If you're runing a restaurant and a customer thinks a barely-red steak is "totally rare," just cook the crap out of it and give it back.<br /><br />But <b>if you're going to be an expert, be an expert.</b> That means not just agreeing with everything the customer says, but genuinely helping.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-5932113208169047862008-07-24T08:10:00.001-05:002008-07-24T09:07:08.552-05:00Obfuscation<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_h9Xfgkw3Lq4/SIOHoP60WuI/AAAAAAAAAGg/aRYF1iHBvQY/s1600-h/wireless-card.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_h9Xfgkw3Lq4/SIOHoP60WuI/AAAAAAAAAGg/aRYF1iHBvQY/s200/wireless-card.jpg" alt="" id="BLOGGER_PHOTO_ID_5225169118217657058" border="0" /></a>I got a new laptop recently. The main advantage of the new laptop over the old one is that the new one wasn't run over by a car. Long story...<br /><br />Anyway while I was selecting my wireless card I was accosted by this astounding product description:<blockquote><b>Intel Wireless WiFi Link 4965AGN (supporting Centrino Pro)</b><br /><br />The Intel® Wireless WiFi Link 4965AGN product is an embedded 802.11a/b/g/Draft N PCIe Mini Card network adapter card that operates in both the 2.4GHz and 5.0GHz spectrum, delivering high throughput and a host of features that enhance today's mobile lifestyle. Deploying WLAN technology in your home and business increases productivity, efficiency and flexibility by enabling faster decision making, reducing down-time, and enhancing employee satisfaction. Quad-Mode Solution for maximum flexibility: the Intel Wireless WiFi Link 4965AGN provides deployment flexibility and connectivity convenience by offering a quad mode (supporting 802.11a/b/g/Draft-N) product, which is capable of connecting to new "Connect with Intel® Centrino®" wireless N Access Points / Routers, but can also connect to any of the legacy Wi-Fi standards, 802.11a, b or g. Data rates up to 300Mbps offer major improvement over today's 802.11a/g products that deliver 54Mbps. This helps overcome network capacity issues, allowing increased simultaneous network activity for large file transfers, network backups, streaming video, multi-player gaming, VoIP and more.</blockquote>Here comes a rant with an ulterior motive. The idea is to <span style="font-weight: bold;">develop a strong editorial voice in your head.</span> You have to take the red pen to yourself so snarky pricks like me don't use your product description as a subject of ridicule!<br /><br />After a rote description of the product, the writer chooses to list <a href="http://blog.asmartbear.com/2008/07/benefits-of-features.html">benefits disconnected from features</a>, benefits that would apply to any competitor:<blockquote>Deploying WLAN technology in your home and business increases productivity, efficiency and flexibility by enabling faster decision making, reducing down-time, and enhancing employee satisfaction.</blockquote>Furthermore, these benefits are non sequiturs. Wireless enables faster decision making? Really? Reduces down-time? How can that be -- wireless is notoriously less reliable than cabled networks.<br /><br />And is it really necessary, in 2008, to explain the benefits of Wi-Fi? If I'm considering skipping the Wi-Fi card, will this text convince me otherwise? Because it means faster decision-making?<br /><br />The true benefit of this particular device is buried in the last sentence: Support for the latest Wi-Fi standard means more data per second, which is useful in specific applications like "large file transfers, network backups, streaming video, and VoIP." That's more like it. Why did it take 168 words to get to the point?<br /><br />But I can't criticize without offering a solution, right? After <a href="http://blog.asmartbear.com/2008/06/boiling-waste-and-goo.html">boiling the goo</a> out of this text, here's my outline:<ul><li>Supports four different Wi-Fi protocols, so it works in more places and takes advantage of the latest technology.</li><li>Supports the fastest Wi-Fi standard, so high-bandwidth activities work better.</li><li>The only card that supports the proprietary Intel N Access Point system</li></ul><b>Get into the mindset of the skeptical. Be brutal.</b> Every word counts. Challenge every sentence to advance the cause of either getting the reader's attention, communicating something specific and useful, or showing how you're a <a href="http://blog.asmartbear.com/2008/05/were-on-same-page.html">better choice than the other products on the page</a>. Tie goes to the briefest.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-82104057566262087522008-07-21T07:15:00.001-05:002008-07-22T15:51:23.997-05:00The Benefits of FeaturesCommon marketing wisdom is: <b>Benefits sell, features don't.</b><br /><br />Benefits are what the customer wants; features are merely the means to the end. Customers are interested in "saving money" or "saving time" or being "easier to use;" features aren't interesting until the customer understands and wants the benefits. <a href="http://www.clickz.com/showPage.html?page=840121">Everyone</a> <a href="http://www.netmechanic.com/news/vol8/copywriting_no3.htm">says</a> <a href="http://www.grokdotcom.com/featuresvsbenefits.htm">so</a>.<br /><br /><b>My instinct is opposite.</b> But, not wanting to second-guess tradition, I've dutifully fought my instincts at the behest of marketing and sales gurus. Since the first advertisements at Smart Bear I've had conversations like this:<br /><blockquote><span style="font-style: italic;">Guru</span>: Why is this here: "Integrates with version control systems."<br /><br /><span style="font-style: italic;">Me</span>: That's one of our features.<br /><br /><span style="font-style: italic;">Guru</span>: Say I'm a customer. Why do I care that you integrate with those things?<br /><br /><span style="font-style: italic;">Me</span>: Well normally you have to collect files for review by hand, but with this integration we can collect the files for you. So a mundane, 5-minute task reduces to a few seconds.<br /><br /><span style="font-style: italic;">Guru</span>: So it's going to save me time?<br /><br /><span style="font-style: italic;">Me</span>: Yes, and doing it by hand is error-prone and it's boring and ...<br /><br /><span style="font-style: italic;">Guru</span>: OK, OK, but mainly it saves time.<br /><br /><span style="font-style: italic;">Me</span>: Yes, it saves time.<br /><br /><span style="font-style: italic;">Guru</span>: Fine, than <i>that's the benefit</i>. "Saves time." I don't care yet how it works, just tell me how it will help me.<br /><br /><span style="font-style: italic;">Me</span>: So that's it? Just write "Saves time?"<br /><br /><span style="font-style: italic;">Guru</span>: How about "Cuts 80% of the time out of starting a review." That will grab my attention.<br /></blockquote>We'd do this with each of my feature points in the ad. So what started out as:<br /><ul><li>Integrates with version control systems</li><li>Threaded chat in context with code</li><li>Automated metrics and reports</li></ul>Turned into:<br /><ul><li>Saves time</li><li>Easier to manage than email</li><li>Eliminates manual tasks</li></ul>Looking back now over the last five years and considering what worked best for us, this technique still doesn't seem right to me because these <b>benefit statements eliminate the interesting, unique properties of our product</b>. Claims like "Saves time," "Easier to use," "Automates tasks," these are things that <i>almost all software promises to do</i>. Although these might indeed be the ultimate benefits, <b>it's the same message as everyone else</b>. I suppose I could claim "Saves <i>more</i> time than competitor X," but is that really the strongest message I have?<br /><br />I agree that customers are interested in end results. Furthermore they need to picture themselves using the product and achieving those results. TV advertisers have long recognized the power of visualization; nearly every TV ad shows someone using and enjoying the results of the product.<br /><br />But statements like "easy to use" are completely unhelpful in visualization. Even if you trump it up as "Cut code review time in half," I still cannot picture how that's going to happen. If I'm already a skeptical person -- quite likely with our target audience -- I might not wait around for you to explain it.<br /><br />If your potential customers are experiencing pain, <b>they'll automatically see how the feature achieves the benefit</b>. Our customers already know code review incurs busywork and can be a huge waste of time. If I say "Writes reports for you" or "Collects metrics automatically" or "Packages and delivers code with one click," it's <i>clear</i> that the benefit is to save time and help with chores, but now you can visualize exactly <i>how</i>.<br /><br />Be specific and tangible about what you do, just phrase it so it leads automatically to the benefit.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-7112189093283237462008-07-19T20:13:00.000-05:002008-07-19T20:24:11.371-05:00Pecha Kucha<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_h9Xfgkw3Lq4/SIKTo3zHXDI/AAAAAAAAAGY/LsnT8NuXxNI/s1600-h/pecha-kucha.png"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_h9Xfgkw3Lq4/SIKTo3zHXDI/AAAAAAAAAGY/LsnT8NuXxNI/s320/pecha-kucha.png" alt="" id="BLOGGER_PHOTO_ID_5224900848085589042" border="0" /></a>As some of you have <a href="http://joelonsoftware.com/items/2008/07/18.html">already noticed</a>, I have the honor of being selected to give a <a href="http://www.wired.com/techbiz/media/magazine/15-09/st_pechakucha">Pecha Kucha</a> presentation on <a href="http://geekaustin.org/2008/04/14/agile-marketing-jason-cohen-smart-bear/">agile marketing</a> at this year's <a href="http://www.businessofsoftware.org/">Business of Software</a> conference in Boston.<br /><br />Wow, that's too many links in one sentence!<br /><br />If you're considering a career in running software companies, especially your own, go to this conference. The keynote <a href="http://www.businessofsoftware.org/">speaker list</a> alone is reason enough -- there's more wisdom in those heads and ability to communicate it to others than most business schools in America.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-36743611692922832842008-07-14T18:20:00.000-05:002008-07-14T18:33:25.023-05:00Surprised to find bugs?Code Collaborator just got <a href="http://www.ai-blog.net/archives/000151.html">a great review</a> by game AI specialist <a href="http://www.freewebs.com/paultozour/">Paul Tozour</a>.<br /><br />My favorite excerpt:<br /><p></p><blockquote><p>The ostensible reason for this process was to get more engineers familiar with different parts of the codebase that they wouldn't have had any exposure to otherwise.</p> <p>What we found was far more surprising -- we uncovered an amazing number of bugs before they ever reached QA.</p> <p>Furthermore, the bugs were coming from everywhere, not just the junior engineers. <strong><em>All </em></strong>the engineers, including all of the most senior developers, had plenty of room for improvement.</p></blockquote><p></p>This seems to be a common theme among groups implementing a reasonable code review process for the first time. ("Reasonable" means not encumbered by heavyweight process.) We're always surprised that our code wasn't as good as we first thought.<br /><br />Shouldn't it be obvious? Have you ever written a page of prose that couldn't be improved? That you yourself couldn't improve when you look back a month later, but that you friend could have found with a two-minute scan?<br /><br />Writing code isn't different, nor should we expect it to be.<br /><br />By the way, once you get used to having the safety net of fellow programmers catching all your little mistakes, it's scary to go back to isolation. <span style="font-weight: bold;">You know the bugs are there!</span><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-78414262113467401762008-06-23T12:26:00.000-05:002008-06-23T12:34:30.850-05:00Boiling waste and goo<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_h9Xfgkw3Lq4/SF_ei1kigGI/AAAAAAAAAF4/iGsawHfYZfc/s1600-h/jason-jolt-award.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_h9Xfgkw3Lq4/SF_ei1kigGI/AAAAAAAAAF4/iGsawHfYZfc/s200/jason-jolt-award.jpg" alt="" id="BLOGGER_PHOTO_ID_5215131583595577442" border="0" /></a>In his <a href="http://www.ddj.com/mobile/207600666?pgno=3">review of Code Collaborator</a> for the Jolt Award, <a href="http://www.rick-wayne.com/">Rick Wayne</a> wrote the best description of our tool I've ever seen:<br /><blockquote>Smart Bear's Code Collaborator exploits that synergy by <b>boiling the waste and goo out of the code-review process</b>, bagging you the benefits of many eyes on each developer's code while neatly sidestepping much of the practice's traditional friction.</blockquote><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-678516460135724012008-06-11T19:56:00.001-05:002008-10-04T15:02:59.774-05:00No hats!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.wakefield.gov.uk/NR/rdonlyres/B132527A-C7A1-4D64-8A47-C193E6FCABFF/0/TopHatAround1905.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 160px;" src="http://www.wakefield.gov.uk/NR/rdonlyres/B132527A-C7A1-4D64-8A47-C193E6FCABFF/0/TopHatAround1905.jpg" alt="" border="0" /></a>"Oh, you have a small company? I guess you wear a lot of hats!"<br /><br />Ug. <span style="font-weight: bold;">I've always hated that phrase.</span> Recently I figured out why.<br /><br />To me it's always came off as a smug comment implying the speaker knows just what it's like and understands your pain. It's usually followed up with something like "I was employee #7 once and I was VP development <span style="font-style: italic;">and</span> VP QA!"<br /><br />Yeah. How can people live like that? Unfathomable.<br /><br />Real entrepreneurs don't talk about hats, but why not? <span style="font-weight: bold;">Why do I recoil at this attempt at empathy?</span><br /><br />I think it's because in real (bootstrapped) start-ups there's no such thing as hats, titles, or departments. If you don't realize that development, marketing, sales, and even accounting are all inextricably linked, you'll probably fail. You can't make decisions about any one in isolation. <span style="font-weight: bold;">You're learning how to sell, what to build, what to charge, who will buy, all at the same time.</span> You're never even thinking in categories like "Marketing" and "Development."<br /><br />So I think my disdain comes from the implication that "many hats" proves the speaker "knows just what it's like," when in fact the very idea shows you have no idea what it's like.<br /><br />People like that will always be employee #7, never employee #1. (Or really employee #0, since everyone I know who has created a successful bootstrapped company paid themselves last, long after other people were hired on, long after profitability.)<br /><br /><span style="font-weight: bold;">Which is fine!</span> But the experience gap is bigger than they think.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-60757346042837764922008-05-11T09:34:00.000-05:002008-05-11T09:49:56.767-05:00We're on the same pageAdvertisements are typically designed to stand on their own. Expensive ad firms frame comps on black construction paper, focusing attention and emphasizing isolation.<br /><br />But how would your advertisement stand up if it were displayed side-by-side with your competitor's ads?<br /><br />This happens a lot actually. Your Google Ads are likely to come up next to competitor's. Product listings in catalogs and websites usually group products with their competitors. Magazine ads are often juxtaposed. Potential customers may even print out your website and physically place it next to your competitor's on their desk. In color.<br /><br />How does comparative advertising affect your message?<br /><br />In the age of user-driven information flow, you can assume that a person looking at your website is in the market for a product like yours.Therefore expending effort justifying your market space in general might be a waste of those precious few seconds when a person visits your website for the first time. Besides, <b>extolling the virtues of your market validates your competitors as much as yourself</b>.<br /><br />Instead, what features (and benefits) does your product specially have to offer? What are your strongest claims, the ones your competitors have trouble competing against? If you're the fastest, explain how speed enables new features that would otherwise be impractically slow. If you're the most customizable, emphasize how your tool can support a process rather than dictating the process.<br /><br />That's not to say you shouldn't address general market advantages at all. In fact, it's often possible to simultaneously fold general benefits into your specific ones.<br /><br />For example, which of these ads is more compelling:<ol><li>Relieves painful migraine headaches.</li><li>Relieves migraines faster than anyone else.</li></ol>The second ad conveys both the general benefit ("relieves migraines") and the competitive advantage ("fastest").<br /><br />This also points out that communicating the general market benefit is often unnecessary because the end user already gets it. If I have migraines, I already understand my pain and I understand the benefits of pain relievers. You don't have to tell me migraines are "painful," just get to the point!<br /><br />As another example, this time from Smart Bear, we claim that one way Code Collaborator saves time with code review is that we show chat next to code, and the chat sticks with the code even when you upload fixes (where the line numbers shift around). On one hand, we're describing a general feature (chat in context with code) shared by all 3 of our major competitors, but at the same time we point out features that only we have (i.e. two competitors show chat in a separate window, not with the code, and no competitor is good enough to keep chat in the right place even after files are updated).<br /><br /><b>If you want to stick out from the crowd, explain why you're the best medicine, not why I need to take medicine.</b><br /><br />P.S. Exception: If you're pioneering a new market space, this idea doesn't apply. In that case you need to explain and defend your very existence; in fact this was the case at Smart Bear for the first 5 years.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-47092886524725737752008-04-20T15:19:00.000-05:002008-04-20T15:36:23.352-05:00Limiting Options<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_h9Xfgkw3Lq4/SAum7QlrwII/AAAAAAAAAFA/q5FWeZ2fXSg/s1600-h/othello-board.png"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_h9Xfgkw3Lq4/SAum7QlrwII/AAAAAAAAAFA/q5FWeZ2fXSg/s320/othello-board.png" alt="" id="BLOGGER_PHOTO_ID_5191426532470145154" border="0" /></a>The 1990's was the golden age of computer AI's for the board game <a href="http://en.wikipedia.org/wiki/Reversi">Othello</a>. OK, it was pretty much the only age.<br /><br />Programmers love the thought of computers beating humans at "intellectual games." For me it's the "mad inventor" idea of creating something more intelligent than myself (whatever that means).<br /><br />At the time, Checkers had been solved and even Chess was close. It was Othello's turn to fall.<br /><br /><b>What's interesting is how the winning strategy worked.</b><br /><br />The typical computer board game strategy is to look many moves ahead and rate each resulting board position. Then you pick the next move that maximizes the ultimate board position you can achieve. The trick is in rating the "goodness" of a particular board position.<br /><br />In Othello you win by having more tiles of your color than your opponent once there are no more possible moves. Therefore, typical metrics for Othello included things like "How many tiles of my own color do I have" (more is better), and "Tiles of my color at the edge of the board are more valuable than in the middle" (the edge is a better strategic position).<br /><br />What's neat is that the winning strategy used a completely different "goodness" metric. Specifically the metric was: How many valid moves does my opponent have? Fewer is better.<br /><br />The flip was that it's not primarily about how many tiles you have or even the positions of your pieces. Instead it's about limiting how many choices your opponent has. <b>Limiting choice is more important than what the choices are.</b><br /><br />This principle is common in defensive theories of sports. The defense can never cover all contingencies so instead it forces the offense into higher-risk, lower-percentage moves. In basketball you can't simultaneously cover the long shot and the charge, so you elect to give up the low-percentage three-point shot. In football you can't cover both in-routes and out-routes, so you force a throw into as much traffic as possible.<br /><br />In business your competitors always have options. <b>How can you limit their choices to things that are low-percentage or expensive?</b> Make them have to spend more money, get more lucky, or be more creative.<br /><br />An example is honoring a competitor's coupons. This eliminates the coupon as a way for your competitor to "beat" you; coupons are no longer a "choice" to develop a competitive edge.<br /><br />You can think of patents as a way of limiting choice. If no one else can use your method, they'll have to think of another way. That means research time and money, and maybe it won't be as good or it will be more expensive to manufacture or support. (That is, if you believe in patents...)<br /><br />We've done a few things at Smart Bear to limit options. For example, we're so strongly established as "the experts in code review," it would take an expensive, time-consuming effort for someone else to claim par, much less surpass what we've done. We literally wrote the book, we did the largest-ever study on code review, we have years of history, we have the most popular tool. It's possible, but very hard, for someone else to compete on that particular basis.<br /><br />This matters because in my opinion, being "the expert" is the best qualifier for our particular market. Our customers would be less interested in "lowest cost" or "simplest installation" (even though our installation <i>is</i> simple). If my opinion is true, I've removed the single best choice from competition, and they'll have to find a less desirable, lower-percentage path.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-84679313162921942762008-04-14T12:05:00.003-05:002008-04-20T15:36:58.678-05:00Agile marketing interview at GeekAustin.orgI just got interviewed about "agile marketing" over at <a href="http://geekaustin.org/2008/04/14/agile-marketing-jason-cohen-smart-bear/">GeekAustin.org</a>. It was fun to show how we apply principles from agile software development to business and marketing efforts.<br /><br />If you're involved software or marketing in Austin, you should meet <a href="http://linearb.livejournal.com/">Lynn Bender,</a> the founder and organizer at GeekAustin. Maybe come to the <a href="http://geekaustin.org/2008/04/01/geek-austin-agile-austin-happy-hour/">Agile Happy Hour</a> in two weeks! They're always a blast.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-36534087424769096172008-04-06T09:50:00.001-05:002008-04-06T10:45:23.551-05:00The Anti-Bullet TestI'm sick of generic feature/benefit bullet points. They're just too easy to make fun of. Here's a sampling from a website that will remain nameless to protect the guilty:<br /><ul><li>Easy to use</li><li>Robust features</li><li>Innovative systems</li></ul>Really, it's easy to use? As opposed to what, difficult and temperamental? Robust, huh? Great, because it looks tenuously held together, the slightest breeze threatening to crumble its delicate construction, so it's good to know that, actually, it's robust. Oh I'm sorry, its <span style="font-style: italic;">features </span>are robust, whatever that means.<br /><br />If you want to <span style="font-style: italic;">not </span>stand out from the crowd, use generic statements. The ones everyone claim. Would anyone claim to be non-innovative?<br /><br />So here's <span style="font-weight: bold;">Jason's Anti-Bullet Test:</span> <span style="font-weight: bold;">For each feature/benefit bullet point, construct its negative and see if that statement is ridiculous.</span> If it is, it means the bullet is obvious, or at least unoriginal. It's not strong, it isn't adding excitement, it's not differentiating you from your competition.<br /><br />Let's apply the test. The negative of "Easy to use" is "Difficult to use." That would be a pretty funny statement! No one would ever claim that, so throw it out.<br /><br />The negative of "Enables communication" is "Blocks communication." Crazy; no one would admit their tool does that.<br /><br />The negative of "Stores files as big as 100 gigabytes" is "Cannot handle very large files." Not ridiculous, in fact this is sadly true of most computer systems of any kind. It passes the test.<br /><br />Here's a good one from <a href="http://codecollab.com/">our own product</a>: "Integrates with seven version control tools." Negative: "Not integrated with seven version control tools." Not particularly funny; in fact this statement is true of <span style="font-style: italic;">all</span> our competitors. So this statement differentiates ourselves in a specific way.<br /><br />If you're using generic bullets now, you'll find that replacing them isn't easy! You have to really think about what's strongest about your product, about how <span style="font-style: italic;">specifically</span> it beats the alternatives, and how make it pithy. This is a useful exercise in itself.<br /><br />One exception to the Anti-Bullet Test: You can use a generic if it's your <span style="font-style: italic;">single biggest differentiator</span>, and if you're willing to put lots of energy behind it.<br /><br />A good example here is "Fastest." The negative is funny ("Slow operation means lots of time staring into <a href="http://www.codinghorror.com/blog/archives/001058.html">stagnant progress bars</a>"). But if you make it your highest priority, it can work. Make your bi-line "The fastest ____." Prove it with benchmarks. Explain how speed is not only about saving operator time (the obvious benefit) but how it enables entirely new features. For example, perhaps operation X is typically so slow that people can't take advantage of it. But since your system can complete operation X in two seconds, suddenly it becomes a feature. Even if a competitor technically has the feature, you make it practical.<br /><br />All this is just another way of saying: Be specific, be fully committed, and tell the truth.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-70802654750902328022008-03-30T10:11:00.004-05:002008-05-08T15:28:17.558-05:00Identity Crisis<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_h9Xfgkw3Lq4/R--t8dQEjOI/AAAAAAAAAEw/gpipgDZIjLI/s1600-h/logos.JPG"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_h9Xfgkw3Lq4/R--t8dQEjOI/AAAAAAAAAEw/gpipgDZIjLI/s320/logos.JPG" alt="" id="BLOGGER_PHOTO_ID_5183552950282521826" border="0" /></a>This (<a href="http://joelonsoftware.com/items/2008/03/17.html">stolen</a>) picture of logos demonstrates a property of corporate image done well: Even when the logo is obscured in an unusual way, <b>I can still identify the company</b>.<br /><br />I even distinguished the "The" from "The New York Times" and the "The" from "The Wall Street Journal."<br /><br />Is your corporate image so unique that this trick would work for you? Here's a hint, if your logo is just some <a href="http://www.logo-search.com/keyword.php/squares">meaningless shapes made by a Photoshop weenie</a>, the answer is no.<br /><br />If your logo were a performer on American Idol, would Simon Cowell say "It was OK, it was safe, but your problem is you're forgettable."<br /><br />So change it! I know that sounds scary, but <span style="font-weight: bold;">if your image is already forgettable, changing it isn't a big deal.</span><br /><br />Don't worry about confusing existing customers. Customers love you, not your logo. They will be pleased to see something interesting. They'll be happy you're making a bold statement about who you are. You can announce it to them if you're afraid they'll get lost. When <a href="http://smartbear.com/">we</a> upgraded our logo not one person was confused and many complemented us on the new look.<br /><br />Don't worry about resetting your brand equity. Unless you're Google or IBM, the vast majority of your potential customers never heard of you, much less have an attachment to a logo. Even if they've seen it a few times, if you're forgettable, they will have forgotten. Better to reset now and start spending money on an image they can remember.<br /><br />Finally, remember that "image" is more than logo. It's the attitude of your prose, it's a cool give-away, it's a killer idea presented clearly. <span style="font-weight: bold;">Make a </span><span style="font-style: italic; font-weight: bold;">bold, unique</span><span style="font-weight: bold;"> statement if you want to be remembered.</span><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-86431897066494946162008-03-22T14:02:00.003-05:002008-03-22T14:43:06.117-05:00Caricatures<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://graphics8.nytimes.com/images/2008/03/14/opinion/3meyerowitz-Blue-Obama190.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://graphics8.nytimes.com/images/2008/03/14/opinion/3meyerowitz-Blue-Obama190.jpg" alt="" border="0" /></a>Political caricatures are less about exaggerating features and more about telling a story.<br /><br />A caricature emphasizes unique features. Every candidate has two eyes, a nose, and a mouth, but only one has big ol' ears. A caricature also has a point of view -- is the candidate cool? Old? War-hungry? Defensive?<br /><br />All in a picture. No words.<br /><br />If your product had a caricature, what would it look like? <span style="font-weight: bold;">What are the </span><span style="font-style: italic; font-weight: bold;">unique </span><span style="font-weight: bold;">features</span><span style="font-weight: bold;"> you would emphasize?</span><br /><br />It's useful to think this way because you can't throw 800 typical marketing words into one picture. "Easy to use." "Scalable." "Fast." "Enterprise-class." "Flexible." "Customizable." "Reporting."<br /><br />Everyone claims these things. Snore. What if you had to pick <span style="font-style: italic;">just one</span>? Or better yet, find <span style="font-style: italic;">something else</span> that few others can claim. <b>Something you can assert that your competition couldn't even try to say.</b><br /><br />And putting it into a picture <span style="font-style: italic;">without words</span> is useful too. Communicate a powerful, unique message in 3 seconds. Something that might otherwise take a paragraph. A paragraph your potential customer might not take the time to read.<br /><br />An example from <a href="http://smartbear.com/">Smart Bear</a> is our <a href="http://smartbearsoftware.com/i/orig/ccollab-feature-sidebyside.png">side-by-side screenshot</a>. If you're a developer, and you reached our web page because you're looking for help with code review, this image is all you need to know. The "content difference" concept is obvious; the fact that it's in a web browser implies you can do this from anywhere, at any time; the piece on the left is obviously a chat area, which implies you can talk; the blue borders around code-line and chat implies you can talk <span style="font-style: italic;">about</span> code.<br /><br /><span style="font-weight: bold;">You can use the same trick for identifying how you treat customers.</span> Now you can't get away with saying trite, meaningless drivel like "we value our customers" or "we exist to serve our customers."<br /><br />If you really exist to serve your customers, the picture might be of an average-Joe being served wine by a suit-wearing executive. I like that image! But is it accurate? If so, put it up on your "Our Customers" page and show you mean it. But if you the thought of that image makes you laugh, if that's not <span style="font-style: italic;">truly</span> how you picture your relationship, then rethink your values.<br /><br />P.S. The image above and comes from <a href="http://campaignstops.blogs.nytimes.com/2008/03/17/drawing-the-candidates/index.html">a fascinating entry</a> in the NY Times Blog.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-33627596086892793822008-03-21T22:59:00.001-05:002008-03-22T00:41:06.689-05:00Discount gambit<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.krcg.com/uploadedImages/Shared/Shows/Price_Is_Right_Logo.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://www.krcg.com/uploadedImages/Shared/Shows/Price_Is_Right_Logo.jpg" alt="" border="0" /></a>Which of these pricing strategies is more persuasive?<br /><ol><li>If you buy now, I'll get you a discount.</li><li>The price is going up, but if you buy now I will lock in your rate.</li></ol>Both are types of discount. <span style="font-weight: bold;">The typical software sales strategy is #1. </span> It's often applied to get the customer to "close" before the end of the month or quarter or some other arbitrary time boundary.<br /><br />At first blush it seems harder to persuade with #2. After all, #1 means the customer pays less than #2, because #2 isn't a real discount -- it's a discount against some future price, which is a lot harder sell than a discount today.<br /><br />But for me, <span style="font-weight: bold;">the evidence is overwhelmingly in favor of #2.</span> Here's why, from the point of view of the customer.<br /><br />You've already established your price. In strategy #1 there's a discount if I "act now." Hmm, so that means the old price wasn't really the price after all. The old price must have included a nice slice of pure profit that apparently you're willing to leave behind. So you were gouging me before. And the only reason I found out about it is that it happens to be the end of the quarter?<br /><br />This is how <span style="font-weight: bold;">#1 breeds mistrust</span> -- the opposite of what you're trying to establish with me, your customer. <span style="font-weight: bold;">In #2 you're looking out for my interests.</span> You're cluing me in that there might be a rate increase, and you're actively protecting me from it. Sure, I know there may not be an increase, or it may not come for a while. But it's still protection, not a gouge that you graciously chose to reveal.<br /><br />Four years ago I was trialing .TEST from <a href="http://www.parasoft.com/">Parasoft</a>. It was buggy; even after hours of remote desktop control with tech support we couldn't get it to stay up long enough to scan my code.<br /><br />But the salesman was persistent. The conversation went like this, minus many minutes of sales-speak on his end of the phone:<br /><blockquote>"How much will this cost me?"<br />"$20,000."<br />"Wow, I thought you were going to say $2,000. That's way out of my price range for one person and this product. In fact, I've looked at FxCop and NUnit and [something else] and it seems to me I can do the same thing with free tools. I was willing to pay for some convenience, but not that much."<br />"Let me see what I can do."<br />"No nevermind, it's, like, an order of magnitude problem."</blockquote>He called back the next day.<br /><blockquote>"$1,500."</blockquote>I didn't buy. I talked to someone who did, though. A reference customer. That guy said he paid $20,000. I asked how he liked it and whether he encountered the crash problems I was seeing. He said they hadn't installed it yet, but the demo looked great. I made a mental note to try to understand the mentality and budget that forks out $20,000 for a nice demo.<br /><br />But getting back to the point. If he can go from $20,000 to $1,500, maybe he will go to $1,000. Yes, this strategy means often you will extract extra money from me. But it also means I don't know where the floor is, and I have every incentive to haggle. The process drags out, ending at gunpoint. <span style="font-weight: bold;">Meanwhile your "customer relationship" is now more of a "hostage situation."</span><br /><br />So let me get this straight: It's better to get an extra 10% on every order, but create an adversarial environment with me, your cherished customer? This is enterprise sales, right, where the pilot is 30 seats and the roll-out is 2,000? And you're going to risk pissing me off over 10% on the 30-seat part?<br /><br />And now imagine if I had called back that reference customer and told him he could've had it for $1,500? Yet another problem with discounting -- word gets around, meaningless differences in pricing is unfair, and now I, the customer, see you as plain old dishonest. Goodbye 2,000 seat order.<br /><br /><span style="font-weight: bold;">Even if we set the honesty/relationship argument aside, there's the matter of image.</span><br /><br />What kind of company provides a #1-style discount? Wal-Mart, Target, Walgreens. No, software companies. Try to get <a href="http://www.news.com/2100-1001-908779.html">quotes for Microsoft</a> or Oracle or IBM products for 1000 desktops. Everything's negotiable, everything's discountable. At best it conjures images of haggling and struggle; at worst of low-quality or the desperate need to "meet numbers" at the expense of everything else.<br /><br />Which companies don't discount, ever? Apple, Google, Constant Contact. No discounts on iPhones. No haggling over AdWord prices. What's the image? Desirable. The best. Worth paying for. <span style="font-weight: bold;">The leader doesn't have to compromise. The leader isn't desperate for orders.</span><br /><br />Strategy #2 implies growth. You've planted "higher prices" in my head now. Supply in software is unlimited, so that must mean demand is increasing. I won't go through that calculus, but certainly I feel the product is becoming more valuable, not less. Discounts feel like unloading unwanted product; price increases feel like success.<br /><br />Strategy #2 implies I'm part of a club. I've gotten in early, on the ground floor, before the product explodes in popularity and prices go up. And I'm rewarded for this support and loyalty with price protection. A "thank-you" from you to me because I was part of it, because I was there before you were big and expensive, because I took that risk with you.<br /><br />So there it is. #1 means less money now, an adversarial relationship, a never-ending struggle over money, and a message that maybe the product <span style="font-style: italic;">needs</span> a discount to be desirable. #2 means more money now, a consistent and fair pricing policy, an inclusive, special customer relationship, and a message of market leadership and growth.<br /><br /><span style="font-weight: bold;">So why do 90% of software companies pick #1?</span><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-73003154685734879742008-03-21T21:34:00.001-05:002008-03-21T22:36:16.974-05:00Resumes considered harmful, or at least uselessIn our recent <a href="http://asmartbear.blogspot.com/2008/03/we-called-him-tortoise-cause-he-taught.html">hiring effort</a>, I've noticed that I've approached all the resumes the same way: <b>I don't read them.</b><br /><br />Sure, I go through the resume before the phone screen, marking passages for discussion. Hope for the best, prepare for the worst...<br /><blockquote>...Oh you know 11 programming languages? Great, let me ask you a deep technical question about number 9, Visual Basic. How do you get the length of a string in Visual Basic? No idea? Oh you'd look it up. So the extent of your knowledge is your bookmark to the "Visual Basic Functions" page in MSDN on-line. OK, so which of these can you actually answer questions about? Just Java? OK...<br /><br />...It says here you were the team leader in developing a reporting system against an Oracle back end. Nice, so you know Oracle? Great! What does "SELECT" mean in SQL? You didn't run into that bit of arcane knowledge? How did you write those reports? Oh a contractor set them up. But you did some data analysis? Oh a "team member" did that...<br /></blockquote>Am I alone in feeling that resumes are useless? That junior developers can't be judged by resumes because they have nothing to say yet and that senior developers can't be judged by resumes because after 10 years everyone can say the "right things" on paper?<br /><br />Apparently not! Take it <a href="http://sethgodin.typepad.com/seths_blog/2008/03/why-bother-havi.html">Seth</a>:<br /><blockquote>Great jobs, world class jobs, jobs people kill for... those jobs don't get filled by people emailing in resumes. Ever.</blockquote>Chime in <a href="http://www.joelonsoftware.com/articles/SortingResumes.html">Joel</a>:<br /><blockquote>The standard job application of cover letter plus resume is a phenomenally weak way to introduce a candidate. They give you only the faintest clues as to the quality of an applicant.</blockquote>It's everywhere. Almost a meme. What did Warren Buffet have to say in the latest Berkshire Hathaway annual report? <span style="font-size:85%;"><a href="http://onstartups.com/home/tabid/3339/bid/4286/Amusing-Tidbits-From-Warren-Buffet-and-The-Berkshire-Hathaway-Annual-Report.aspx">(highlights)</a></span><br /><blockquote>Charlie and I are not big fans of resumes. Instead, we focus on brains, passion and integrity.</blockquote>OK but wait, is this really fair? Maybe if you're applying for <a href="http://ycombinator.com/">some cool position</a> but what about getting a regular job? Well yes, if you want a regular job it might work to approach things in a regular way. If that's what you want. Is it?<br /><br />What's stopping you from having a completely different perspective on the resume-and-cover-letter strategy? Are you afraid the HR department will toss any resume that doesn't match their acronym pattern? OK, with many companies you're right. But do you really want to work for a company that rewards acronym-counts over interesting achievements? That values standards-compliance over unique accomplishments? That rewards professional conformity over personality and passion?<br /><br />Seth <a href="http://sethgodin.typepad.com/seths_blog/2008/03/why-bother-havi.html">sums it up</a> wonderfully (my emphasis):<br /><blockquote>Having a resume begs for you to go into that big machine that looks for relevant keywords, and begs for you to get a job as a cog in a giant machine. Just more fodder for the corporate behemoth. That might be fine for average folks looking for an average job, but is that what you deserve?<br /><br /><span style="font-weight: bold;">If you don't have a resume, what do you have?</span><br /><br />How about three extraordinary letters of recommendation from people the employer knows or respects?<br />Or a sophisticated project they can see or touch?<br />Or a reputation that precedes you?<br />Or a blog that is so compelling and insightful that they have no choice but to follow up?<br /><br />Some say, "well, that's fine, but I don't have those."<br /><br />Yeah, that's my point. If you don't have those, why do you think you are remarkable, amazing or just plain spectacular? It sounds to me like if you don't have those, you've been brainwashed into acting like you're sort of ordinary.</blockquote><div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.comtag:blogger.com,1999:blog-8328968574099890683.post-68478877120323672592008-03-12T17:59:00.002-05:002008-03-17T09:50:49.245-05:00We called him Tortoise 'cause he taught us!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.acetheinterview.com/images/timemachine.gif"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.acetheinterview.com/images/timemachine.gif" alt="" border="0" /></a><br />We're interviewing for junior software developers right now. I've just completed about 20 phone interviews and the lack of useful experience is appalling.<br /><br />Let's not rehash the arguments about <a href="http://blog.smartbear.com/2008/01/im-gonna-learn-you-good.html">what is "computer science"</a> and <a href="http://www.oreillynet.com/ruby/blog/2006/03/interviewing_ruby_programmers.html">how to hire</a> and about how <a href="http://www.joelonsoftware.com/items/2005/01/27.html">most people are no good</a> and all that.<br /><br />I'm not even talking about how smart they are. I'm just talking about the coursework.<br /><br /><span style="font-weight: bold;">It's time for "computer science" to become "science" and not math</span>. Meaning: Learning to use the tools and techniques of the trade, not just formulas and mathematical analysis.<br /><br />For example, of the 100 resumes and 20 phone interviews I've done in the past month:<br /><ul><li>3 have ever used a version control system; only 1 of those could describe what version control is.</li><li>5 even claimed to know anything about SQL; none of them could tell me what an "outer join" was.</li><li>6 have ever done a unit test; zero had ever done a unit test in school.</li></ul>I can't understand why, for example, "SQL" isn't a required course. I'm not asking for much -- OK if you want to emphasize the mathematical properties of queries, OK if you want to teach data normalization theory. I'd prefer practical things like "never delete data" and "auto-increment versus GUID's" and "how to diagnose slow queries" and "how database vendors differ," but I'll take <span style="font-style: italic;">anything at all </span>where they could at least form basic queries and know roughly how they work.<br /><br />Even "unprofessional" open-source projects all use version control. The vast, vast majority of software companies do too. Version control is almost as important as the compiler. I'd be happy if there was a course where you learned things like branching theory, but I'd be content if they just <span style="font-style: italic;">used it at all, at any time</span>. Schools love group projects, so how is it that the group project doesn't involve version control?<br /><br />And no unit testing? Ever? That's just lazy. Why is that not required for all coursework? By the way, if you required it, almost all assignments would be correct when they were turned in. Isn't it better to teach people how to make sure they always get an 'A'? How is unit testing now on par with how to debug?<br /><br />Which is another thing. I never had any instruction on how to use a debugger. To me that should be an entire class -- how to find out what's wrong with code, especially when you didn't write it. And unit testing should be a part of that.<br /><br />I can think of two reasons why these obvious things aren't taught:<br /><ol><li>Professors don't know these things either because they don't keep up with new trends and practical processes. Of course I'm making a wide, unfair judgment, but witness for example the slow acceptance of Java.</li><li>Departments don't want to "sully" their pure, theoretical, artis liberalis culture with practicalities. Analogy: The math department is mostly theoretical. If you want applied math, be a physicist or an engineer. My problem with this is there is no alternative. OK, so have a theoretical computer science degree, but then where's the "engineering" alternative? Some colleges have this concept, but for example at UT the alternative just meant fewer hard CS classes, not more practical classes.</li></ol>Oh well. From what I can tell it's the same in a lot of disciplines. Most of the MBA's I know can't run Quickbooks or read a P&amp;L, and the ones that can tell me they learned it on the job.<br /><br />OK, I like on-the-job learning, it's the best kind, but <span style="font-weight: bold;">throw me a bone</span>. At least broach the concepts somewhere in the 4-5 year curriculum.<div class="blogger-post-footer"><br/><br/> --<br/> <a href="http://blog.asmartbear.com/2005/01/about-jason-cohen.html">Jason Cohen</a></div>Jasonhttp://www.blogger.com/profile/18019929086510000182noreply@blogger.com