June 2010

Forget Deploying, How Good Are Your Rollbacks??

I hear so much about deploying today. Deployinators, deploy from trunk, deploy from stage, deploy… deploy… deploy. I’m tired of talking about deploying.

Lets talk about rollbacks. Can you –
1. Type a one line automated command to rollback the entire build from production?… or one click rollback if you are using a GUI?
2. quickly judge if a build is failing and you need to rollback?
3. Rollback without a VP eng, CTO, CEO screaming at you for fucking up a deployment?
4. Rollback incrementally… “grey rollback”… so some users still are using the new build and some are not?
5. Rollback by feature, instead of a full build…. flippers and switchers?

If I had my way the entire ops community would talk about nothing but rollback for the next year. Velocity next year would only do seminars on rolling back. Every ops crew would work on Rollbackurators, not Deployinators.

Then, once we’ve all gotten up to snuff on rollbacks, we can focus on deploys. Frankly, you can deploy however you want to if your rollback process is pure awesomeness.

BTW – I think there is a lot of money for somebody to create this kind of tool, a revision/artifact mgmt tool for web/Saas companies.

My dream tool would do something like this:
1. I click a button and it deploys my new build
2. It watches load/log/other patterns for me for the next few hours
3. If there is an OOM error within 72 hours or a suspetible change in 400 errors, it sends a burning bag of poop to the developer who coded it. Then it rolls back their feature (not the whole build… just their feature). Then it sends an email that mocks the developer and his/her mother, and also tells people what was rolled back/flipped off.

Uncategorized

Comments Off

Permalink

Google Coders Need To Go On An HTML Diet

Below I have pasted what a single SMS message in GoogleVoice looks like. For those of you who do not want to read the code, here is the summary:
-369 lines
-46 divs
-7 tables
-8 spans

This is one SMS message! Its kind of crazy – a SMS message has the following basic pieces:
-the date/time of the message
-who sent the message
-the body of the message
-some status about the message (read/unread, delivered, etc)
-a menu or two with some actions

How in the world does that turn into a 300 odd line juggernaut with 40-odd divs??? How is this good for the internet? This is the ultimate “bigger engine” American auto philisophy being re-lived on the Internet.

This is why Peek exists. There is another story to the Google, Apple gas-guzzler smartphones – efficient, affordable, reliable, low energy use<->long battery life.

<div id=”48997a502b75e41f6fb150e2c32a2f7b58ff76e0″ class=”goog-flat-button gc-message gc-message-read”>
<div class=”gc-message-bg”>
<div>
<table class=”gc-message-bg-top”>
<tbody>
<tr>
<td class=”gc-message-bg-f”></td>
<td class=”gc-message-bg-tl”></td>
<td class=”gc-message-bg-t”></td>
<td class=”gc-message-bg-tr”></td>
</tr>
</tbody>
</table>
</div>
<div class=”gc-message-bg-msg”>
<table class=”gc-message-bg-middle”>
<tbody>
<tr>
<td class=”gc-message-bg-f”>
<div style=”position: relative; padding-left: 5px;”>
<div class=”goog-inline-block”><input class=”gc-message-checkbox” type=”checkbox” /></div>
</div></td>
<td class=”gc-message-bg-l”></td>
<td class=”gc-message-bg-m”>
<div style=”padding-bottom: 3px;”>
<table style=”width: 100%;”>
<tbody>
<tr>
<td class=”gc-sline-top”></td>
<td></td>
</tr>
<tr>
<td class=”gc-message-sline”><span> </span></td>
<td style=”padding-left: 4px;”>
<table class=”gc-message-tbl”>
<tbody>
<tr>
<td class=”gc-message-tbl-portrait”>
<div class=”gc-message-portrait”><img src=”/voice/resources/1366864992-blue_ghost.jpg” alt=”Blue_ghost” />

</div></td>
<td class=”gc-message-tbl-metadata”>
<div>
<span class=”gc-message-name”>
<span>Me</span>
<span class=”gc-message-to”>to</span>
<span class=”gc-nobold”> </span> </span>
</div>
<div class=”gc-message-time-row”>
<span class=”gc-message-time”>6/15/10 5:31 PM</span>
<span class=”gc-message-relative”>12 days ago</span>
</div></td>
<td class=”gc-message-tbl-actions”>
<div class=”gc-message-actions”>
<div class=”goog-inline-block” style=”margin-bottom: -4px;”>
<div class=”gc-message-label” style=”border-color: #eeeeee; background-color: #eeeeee;”>
<div class=”gc-message-label-o” style=”border-color: #eeeeee;”>
<div class=”gc-message-label-i” style=”color: #444444;”>Inbox</div>
</div>
</div>
</div>
</div></td>
</tr>
<tr>
<td class=”gc-message-tbl-desc” colspan=”4″>
<div class=”gc-message-transcript”>
<div class=”gc-message-transcript-msg”>
<table class=”gc-message-transcript-middle”>
<tbody>
<tr>
<td class=”gc-message-transcript-l”></td>
<td class=”gc-message-transcript-m”>
<div>
<div class=”gc-message-player”>
<div class=”gc-message-message-display”>
<div class=”gc-message-sms-row”>
<span class=”gc-message-sms-from”> </span>
Me:
<span class=”gc-message-sms-text”>boopy fail</span>
<span class=”gc-message-sms-time”> 5:31 PM</span>
</div>
<div class=”gc-message-sms-row”>
<span class=”gc-message-sms-from”> </span>
(650) 265-1193:
<span class=”gc-message-sms-text”>Error: this message was not successfully delivered.</span>
<span class=”gc-message-sms-time”> 5:31 PM</span>
</div>
</div>
</div>
</div></td>
<td class=”gc-message-transcript-r”></td>
</tr>
</tbody>
</table>
</div>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class=”gc-sline-bottom”></td>
<td></td>
</tr>
</tbody>
</table>
</div></td>
<td class=”gc-message-bg-r”></td>
</tr>
</tbody>
</table>
</div>
<div class=”gc-message-bg-msg”>
<table class=”gc-message-bg-middle”>
<tbody>
<tr>
<td class=”gc-message-bg-f”></td>
<td class=”gc-message-bg-l gc-message-bg-g”></td>
<td class=”gc-message-bg-m gc-message-bg-g”>
<div style=”position: relative; padding: 3px 7px 6px;”>
<div class=”gc-message-note-edit” style=”display: none;”>
<div class=”goog-inline-block”>

<textarea></textarea>
<div class=”gc-message-note-ctrl”>
<div class=”goog-inline-block gc-message-note-save”>Save Note</div>
<div class=”goog-inline-block gc-message-note-cancel”>Cancel</div>
<div class=”goog-inline-block gc-message-note-delete”>Delete</div>
</div>
</div>
</div>
<div class=”gc-message-sms-reply” style=”display: none;”>
<div class=”goog-inline-block”>

<textarea></textarea>
<div class=”gc-message-sms-ctrl”>
<div class=”goog-inline-block gc-message-sms-send”>Send</div>
<div class=”goog-inline-block gc-message-sms-cancel”>Cancel</div>
<div class=”gc-sms-counter”>160</div>
</div>
</div>
</div>
<div class=”gc-message-sms-actions gc-simple-menu”>
<div class=”goog-inline-block” style=”vertical-align: bottom;”>
<div class=”goog-inline-block goog-flat-button gc-control goog-flat-button-disabled gc-message-call” style=”vertical-align: bottom; margin-right: 10px;”>Call
<div class=”gc-quickcall-contents” style=”display: none;”><form>
<div>Google will call your phone and connect you to <strong> </strong>.</div>
<input class=”gc-text gc-quickcall-ac” type=”hidden” />
<div class=”gc-bubble-ih”>Phone to call with</div>
<div>
<div class=”goog-flat-menu-button gc-quickcall-phone”></div>
</div>
<div class=”gc-bubble-sub”><input id=”gc-qcr-1276637467132″ class=”gc-quickcall-remember” type=”checkbox” tabindex=”32″ /><label for=”gc-qcr-1276637467132″>Remember my choice</label>

</div>
<div style=”margin-top: 8px;”><input class=”gc-quickcall-submit” style=”display: none;” type=”submit” />
<div class=”goog-inline-block gc-quickcall-connect”>Connect</div>
<div class=”goog-inline-block gc-quickcall-cancel” style=”display: none;”>Cancel</div>
</div>
</form></div>
</div>
<div class=”goog-inline-block goog-flat-button gc-control goog-flat-button-disabled gc-message-sms” style=”vertical-align: bottom; margin-right: 10px;”>Text</div>
<div class=”gc-message-reply-menu goog-inline-block goog-flat-menu-button” style=”margin-right: 8px; display: none;”>
<div class=”goog-inline-block goog-flat-menu-button-dropdown”><small>▼</small></div>
</div>
<div class=”goog-inline-block” style=”vertical-align: bottom;”><a class=”gc-message-sms-mark-link” style=”margin-right: 10px; display: none;” href=”javascript://”>Mark as read</a></div>
<div class=”gc-message-more-menu goog-inline-block goog-flat-menu-button”>
<div class=”goog-inline-block goog-flat-menu-button-caption”>more
<ul class=”goog-menu gc-message-menu” style=”display: none;”>
<li class=”goog-menuitem”>Mark as unread</li>
<li class=”goog-menuitem”>Add note</li>
<li class=”goog-menuitem”>Block caller</li>
</ul>
</div>
<div class=”goog-inline-block goog-flat-menu-button-dropdown”><small>▼</small></div>
</div>
</div>
</div>
</div></td>
<td class=”gc-message-bg-r gc-message-bg-g”></td>
</tr>
</tbody>
</table>
</div>
<div>
<table class=”gc-message-bg-bottom”>
<tbody>
<tr>
<td class=”gc-message-bg-f”></td>
<td class=”gc-message-bg-bl”></td>
<td class=”gc-message-bg-b”></td>
<td class=”gc-message-bg-br”></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

———————————
Buy the hot new Peek 1.10 here, now with GoogleVoice Integration (beta)

Uncategorized

Comments (8)

Permalink

GoogleVoice on Your Peek (Beta)

I just put on the finishing touches to a nice little addition to our messaging arsenal.  We have integrated GoogleVoice onto the Peek.  You can now send text messages from your GoogleVoice account from a Peek.

To register go to “Add Account” under email accounts in Peek Manager.

Usually you probably login with some sort of gmail address, like bob.smith@gmail.com.  Instead of registering with bob.smith@gmail.com, use bob.smith@googlevoice.com.  Use your normal googlevoice password.  Hit submit.  If everything goes well you will get the usual “You are ready for emailing” message on your Peek.

Now compose an email.  In the “from” field choose “bob.smith@googlevoice.com”.  Put in a 10 or 11 digit phone number in the “To”, type your message and hit send, and you have sent your first message via GoogleVoice.

Happy Peeking!

Stay tuned – we’ll hook in more GoogleVoicey-ness.  Its a bit more complex of a process to fetch emails.

—————————————————————————–

Buy your Peek here, with the new 1.10 software and GoogleVoice integration

Uncategorized

Comments (7)

Permalink

Product Managers In the Modern Dev Team

I’ve been a bit hard on product managers these days on old geekypeek. A confession, I have been a product manager for more of my life than I have been a developer, I’ve even led large product management teams.

In the world of a startup, the product manager’s role is always a bit interesting. The first startup I worked at, Redknee, the product management role was basically “everything that a coder doesn’t do”, which was centralized around talking to the customer. We were a B2B teleco billing/customer care software company. So I’d spend a lot of time preparing documents for customers and writing documents for the dev team to ensure we built the software per the customer’s needs. We also did a lot of things like system design, testing, writing manuals, sales support, etc.

Traditionally, there is the holy triumvirate of product management skills, per some pdma spec somewhere:
-technical product manager -> writes requirements, project manages development
-marketing product manager -> how to market this thing best, market research, etc
-business product manager -> p&l, how do we make money

But in talking to other companies I most often see product managers doing this:
-writing requirements/functional specs
-project managing dev’t
-UX/UI design
-QA/UAT

If you are a product manager, and you find your self spending most of your time on the above, I think you are ultimately negatively contributing. I’ll first explain why I don’t think you should be doing the above list, and then I will comment on where I think product managers in a startup or lean dev team should be.

Writing Requirements
My first problem with requirements is temporality. Most requirements docs are valid for 3-5 days. Then everything changes. Eventually keeping the now lengthy requirement doc takes as much time as making the code change, and it becomes another mental hurdle that will in fact slow your dev process.
My second problem is that 93% of requirements are damn obvious. Writing them out was a complete waste of your time. The other 7% are hard enough that there should probably be a discussion between the whole project team (the developer, the customer care person, the finance guy, etc). Unfortunately the habit of writing a “requirements doc” is that a product manager writes it in detail and then presents it as the truth. Good product managers who are trying to figure out what the product needs to do, need to be collaborative in their process as the whole team will need to input on the very tough requirement decisions. Annoyingly then, since there was a meeting to discuss the 7% of difficult requirements, formal documentation isn’t really required.
Finally, from the moment development completes you have three very readable sources to understand how a product works:
1. The product itself. It should be intuitive that somebody can figure out all the features in the first place. I shouldn’t need a requirements spec. If you have a long requirements spec and an unusable product, you have failed as a product manager (and so has the dev’t team)… monumentally.
2. The code. Code needs to be human readable, even by non-coders.
3. User manual.
You really don’t need a 4th document full of shalls and wills that states what the product does, on top of the above.

Project Managing Dev’t
Tools will do a better job than you can. Using the following tools its possible for anybody in the company to readily grasp status:
1. A build server with daily/nightly builds
2. Automated communication on check-ins of changes (e.g. an email to all of every check-in)
3. A project site – basecamp, wiki, sharepoint, etc
4. Project mgmt software with bugs and tasks – I love pivotal tracker.
5. Automated testing with your build/check-in process so you can see test case coverage.
6. Working product – having something bare bones usable so anybody can try it out and see where its really at.

These tools will communicate status more accurately than you, and prevent large time sinks for issue burndowns, bug scrubs, etc. To this day, most business folks don’t realize that development is an extremely complex cognitive task that requires a long ramp-up time to get productive. You should not interrupt a developer in mid-development/bug check-in to get a simple status update that is retrievable from a bazillion sources.

UX/UI Design
If you were a startup, and you had your choice between a UI/UX designer and a product manager, I would push you strongly towards the earlier. Most of the tough requirements around a product are in usability. Feature/complexity tradeoffs with usability. An experienced UI/UX professional will bring a lot more to the table than your average generalist, former engineer product manager in this regard. Not only should they understand how people use interfaces, they should be able to create the graphic design for you, and understand the testing process of that UI/UX. Or spend the money you’d spend on a product manager on a UI/UX shop. Too often I see product managers espousing usability views that really should have been left to the professionals. Or if you do use a UI/UX shop, the product manager ends up being the main contact for them, which in turn means the UI/UX shop & developer never have enough conversations about what is needed vs what is doable.

QA/UAT
There are several types of tests, I’ll stick to these three:
-functional testing
-End-to-end/UAT
-usability testing
-beta testing

Coders need to automate functional testing. Unit tests should be comprehensive enough that they are confident that the system will work. They also need to run “unit tests” on the system level. If you are a running a website, there should be screen scrape style tests using htmlunit, watir, cucumber, and that type of technology. There should be an extremely high level of confidence shown through test coverage reports.

Ideally there is no need for “end-to-end” testing/UAT. If following an iterative, agile process you will have been using more and more of the product each week. Everybody in the company, especially if you are in launch mode, will have been using the product and providing tons of feedback. So the big-bang UAT isn’t needed.

BUT… if you are a startup and launching a major product, its probably worth thinking about doing a big final round of testing. I’ll call this business simulation. Lots of fully end-to-end testing. For instance ordering the device from Amazon, paying using a real credit card, using a paid for/ordered device, phoning real customer care for issues, using real FAQs. This is less about “functional” testing then it is about “business simulation”.

You will also probably want to be doing a beta-test during this period and getting real customer feedback. Real customer feedback is important. In fact, one problem I have with UATs is that it slows down the feedback loop to real true customers and sometimes beta is even skipped!!! No – beta is probably your most important test. You should be finding ways to get real customers to use the product as early as possible. Its the closest you’ll come to the real thing.

So, while I am advocating that product management is not needed to do the above, if you are in “launch mode”, or a major product release, you may need a generalist person to govern this whole process, and that person may feel/look like a product manager. Somebody needs to ship units to beta testers, tell people what to test when, collect feedback from beta testers, organize their thoughts and figure out what isn’t working, etc. My favourite startup/launch idea here is to use the person who will manage care/support as that person.

If you are launched and doing frequent smaller revisions you do not need a full-time body here. You can compile a list of beta-testers and basically automate new releases and communication to them. Or grey-launch to small groups of real users.

Where the Product Manager Should Be
All along, you may have been reading and thinking I am anti-product management in the start-up. Well, thats not completely true. In the world of startups, here is where I think the product manager needs to lie.

You launched. You probably got all of the following wrong:
1. Channel
2. Price
3. Target customer
4. Feature line-up to customer
5. Your whole value prop

Turns out beta-tests and market studies are nowhere near as truthful as actually selling the damn thing.

Your first few months as a startup are all about “finding the business model”. You need to figure out who your customer is really, really, really quickly… because you are also probably burning cash on all your ace developers (their 3 monitors each, their $1000 chairs, etc) and running out of funding. Once you know who the customer is you then need to pivot really quickly as an organization and figure out:
1. How to acquire those customer cheaply
2. How to best-fit the product to those customers
3. Value prop for those customers

This probably should be the role of the CEO and VP Marketing. But it depends on your financing model and who does what in your company. Your CEO may need to be full-time raising money either through financing or sales. Your VP Marketing may also be full-time selling and trying to maximize the current strategy/marketing plan. You are never sure if the whole strategy is off (i.e. wrong customer, channel, etc) or if you are simply not executing to it. So your VP Marketing needs to be executing his brains out on the current plan (SEO, SEM, meetings with retail, partnerships, media, PR, trade shows, etc), which may mean they don’t have time to come up for air and take a look at the broader picture.

So I love a product manager that does all the deep innovation stuff to really learn the customer. Stuff you hear that P&G does –
1. Follow/survey shoppers in the store/online to see how and why they buy
2. Shadow customers and learn how they use the product
3. Survey the base constantly to learn who is using the product and how
4. Survey people who returned the product or took a trial and did not move forward
5. Survey people who didn’t buy the product (non-consumers)
6. Take care phone calls to get qualitative feedback from users

All that data needs to be gathered fast and then used as the genesis for either making minor tactical changes in the current strategy, or making a whole sale strategy change.

Knowing you customer is probably a more investable lever than “cool technology”. If you are an expert on some niche customer base that you have discovered is a great user of your product, you are building massive value that somebody else will want/need.

And thats where I’d like the product manager to be, customer centric and connecting the value prop with the customer. And annoyingly its really rare that I see the product manager in that spot.

—————————————————–
Buy the new Peek with the hot new 1.10 software!

Uncategorized

Comments (2)

Permalink

My Kindle Broke

On my last flight a week and a bit ago my Kindle broke. It was sitting in the front pocket of the airplane seat, and that band was enough pressure to “break the display”, such that it no longer refreshs 30% of the display.

I called up Amzn and was told I would have to buy a new device for $189 or a refurb for $100. So here’s my frustration:
-I was one of the really early Kindle users and paid $415 for a 1st-gen Kindle (including taxes and shipping) in September 2008
-Since then the price of the Kindle has plumetted to $189
-I’ve spent easily over $500 on books and subscriptions on the Kindle, and would have gladly spent another $500…
-the older e-ink displays are known to break like this. I know I have a 1-year warranty, but I’m sure Kindle sorted things out with e-ink to handle these defective display

I am immensely frustrated to lose a product I was so happy with. I get how the warranty game works, but frankly when I spend $400 I expect more than one year out of the product. If you can’t deliver > 1 year, get out of the hardware game. And I’m not sure that the Kindle’s are holding up. Maybe its Amazon’s lack of hardware experience, I’m not sure!

So its back to the good ole public library for me, bye bye hardware reading device. I’ll be happy to put that $500 in my own pocket.

Uncategorized

Comments (8)

Permalink

An Old Blog Found

Out of vain curiousity I googled my own name (Dan Morel) to see if this blog showed up.

Well, it didn’t… which may or may not be a good thing! But what did show up is my old blog from when I worked in Jamaica/the Caribbean for 2 years!

So if you are bored and looking for something interesting to read, enjoy the swashbuckling adventures of a 20-something year old on a lucative ex-pat contract:
http://moosemorel.spaces.live.com/

This one is one of the best, if you want to hear about men going down a waterslide in Hedonism naked repeatedly…
http://moosemorel.spaces.live.com/blog/cns!FF8CC80BA6551950!110.entry

For those of you who don’t know, after graduating in computer science, I spent the next big chunk of my career doing product mgmt. This included a big chunk of time working for Digicel in the Caribbean as their “group wide head of business products”. I.e. I selected smartphones for 17 countries. Annoyingly I had this very cool job in the midst of probably the worst smartphone run in smartphone history. In between the Treo and iPhone there is a blackhole of a dearth of non-BlackBerry smartphones… (not too surprisingly, thats in the same era when the idea of Peek was born)

Uncategorized

Comments Off

Permalink

The Modern Development Team

Being the trend-lover that I am, if there is a new dev’t methodology, we probably implemented it recently:
-virtual office
-flex hours
-global team
-agile
-devops
-automated testing
-cloud computing

In one of my last posts I talked about how we do development different, how we aren’t the average 9-5 company. Lots of folks asked questions around “how do you communicate?”, “how do you prioritize?” and there were a few comments of the “sure, you’re small, and start-up-y-ish so you don’t have process, once you are big you will be screwed” variant as well.

Firstly, I think process is MORE important at our little size and with our extremely global, 24 hour a day dev’t cycle than in most medium sized companies with layers upon layers of pmo’s, product managers, and analysts sitting on top of your project. These professional emailers/purveyors of documents help keep the wheels of development process lubed. Nothing beats the ole bug scrub, issues burn-down meeting!

We, being small and lean, don’t have the luxury of using people to solve our process problems. So we have to automate process using tools.

This ultimately means that most startups I know have development and ops automation systems/processes that would kick the crap out of those in a medium sized company.

As a startup we use two key backbone process strategies – agile & devops (the latter we implemented more recently). This basically means our processes are feature-oriented so its more like – ‘build it quick and small, deploy it to testing, iterate, get it production ready and deploy it (then learn from the customer and iterate more)’ We don’t “build releases”, we build small functions and get them deployed quickly. Thus we are constantly deploying, multiple times per day.

To make this happen in an environment where we are 24/7 coding/deploying, there are a few key must-haves:

1. Communication is critical. If you break something, it sucks if the person that night then can’t work. So we live on Skype. There is a constant Skype chat room with the dev-ops team open. We crack jokes, we talk about coding problems or we firefight production problems. And if you are global, you’ll have to spend some time at night/early morning talking. Sorry, its just the way global development goes, night times become work time. You need to balance your days into the rythymn.

2. dev->build->deploy MUST BE AUTOMATED. Our tools/process in this respect are probably more advanced than 90% of the ISO-certified companies I know out there. We may be small, agile, etc, but we have working one click rollbacks— buyaka-shaka! Hows that taste in your ISO-90001 certification process pipe? Process is important, and auto-wiring it through tools & technology makes it stick a lot more than people & meetings. I can yell at a developer for 24 hours straight “why didn’t you rollback, why didn’t your rollback, why didn’t you rollback”. Whats more helpful is spending a day to create the worlds easiest rollback script. I’ve even aliased the rollback script on all the servers. All that needs to be typed is “rollback”… from any user… even our CEO could rollback a build. I LOVE good/helpful process so much I will spend 2-3 days straight of my time deploying tools to enforce that process.

3. We use a build server that builds on each check in, so its virtually impossible for the build to be broken for any meaningful amount of time. Each build sends the svn checkin release notes from each developer to everybody else, so we all know what that person just committed. (annoyingly we don’t do have a central build server in the TI scons compilation nightmare build on the actual hardware… and we definitely feel the pain here). This is a point where tools trumps process. In the past we’d have release meetings to discuss what is being deployed. Now we make our tools do that for us, and we can skip the wasteful meeting.

4. Env’t headaches can kill you. Nothing can rip apart a fragile global/dev/ops team faster than messed up environments that nobody understands. We use Chef so we have consistent, upgradeable technology. I wish we had done this sooner as a startup. In fact I wish I had setup the very first server we ever launched with an automated config system. I can deploy new servers in under 5 minutes now (JBOSS makes me angrily stuck with one or two manual setup pieces, like good ole cluster-service.xml and the cluster partition – I will find a way to automate this one day).

5. And of course – automated testing. I’m not a “TDD guy”. My view of testing – it makes a small difference on your current development effort. Marginal, you can probably make the code work just as good without automated test. But, its so, so, so much easier for me to maintain code that I know nothing about if I can execute and test that class directly. SOOOO much easier. You don’t have to be mister exhaustive path/branch tester dude to appease me, just a key test case or two. I’m a junit guy, but if its testng or the main class, thats fine too. Just throw the dog a bone and spend that extra hour to plug in some test cases.

6. An understanding of how to use config mgmt, so you can keep deploying from trunk. Not all features can be built in one day. And if you are working out of trunk, you can’t hide your code locally for very long. So you need to have a good future-proof config mgmt system, which lets you turn on/off features that are in development – what is known as flippers/switches in the devops lingo. Somebody should think about finding a way to create a dev->deployment system that plugs in new code with flippers and switches autowired, some aspect-oriented, dependency injector style solution might make this fully automated because right now it is fully up to the dev to remember to configure in/out his code. And then 7 months later you have some config parameters stuck in a properties files/table somewhere that make no sense.

7. Culture is more important than any of this. You have to trust each other. You have to be like the Etsy CTO and get somebody to deploy on their first day. You need to make people comfortable in failing, so they will keep their wits and rollback or fail forward. Failing happens a lot as a start-up, there’s no layers of bureaucracy (but the requirements were wrong) to hide behind… so trust in each other’s ability to get over those humps is big.

8. And to add to the culture – I really, really push people to build globally. I love working with Paul (Banglore) and Yan Bo (Nanjing). Its a lot easier with 24 hours of development per day. And its a lot easier to find really good developers who have a great attitude if you aren’t panickly hiring the 3 unemployed, available developers who are within a 20km radius of your office. Great people make every process easier.

Making a global, fast iterating company work relies heavily on process & tools. Instead of classic process enforcement levers (process maps, meetings, bonus, reviews, etc), to be nimble you need to rely on process automation, culture and trust. For any of you who work the corporate 9-5, you should be constantly thinking “do I need to do it this way?”, “is that meeting overhead necessary?”. The time-pressure-cooker of a start-up forces you into that thinking.

—————————————————–
Buy the new Peek with the hot new 1.10 software!

Uncategorized

Comments Off

Permalink

PagerDuty

www.pagerduty.com

Been using this for the past few weeks to manage on-call schedules. It is a very cool service.

Uncategorized

Comments Off

Permalink

What happens when your CEO takes up coding…

…version 1.10 of the Peek gets released. Hollllaaaa…

Existing Peek customers – get it here -> http://www.faq.getpeek.com

Or buy a Peek:

Peek For Life

Amol, our blessed CEO, was always whining about things not moving fast enough, etc, etc. He always had this long laundry list of things he wanted to try out. So I emailed him the process to setup and build.

Well lo and behold a few days later he churned out his first build. Our little phd in philisophy CEO grew up and became a hacker. You can now find him on IRC channels everywhere with the name Ammo and tag-line “bang bang”

Well, Amol, and the others involved in this release did a really kick-ass job. We solved some good bugs, made things a bit faster and cleaned up the UI some. Amol also leaked some of the special projects I’ve been working on in his email… so more stuff is coming very soon on the server-side of life.

So, now is a better time than ever to get a new Peek. We are adding tons of cool capabilities and you are able to integrate to more and more stuff.

This still isn’t the vaunted Project Big Stuff I mentioned before. Project Big Stuff is still under way… coming soon. It will blow your minds away.

Uncategorized

Comments (2)

Permalink

How Not To Hire Developers

I got pinged recently by somebody looking to hire – the company is Pomcor in San Diego. If you know a great programmer feel free to reach out to me (or them).

Getting asked for advice on hiring made me reflect. Here is how I HATE hiring.

1. Realize you need someone
2. Post a job req around
3. Interview
4. Hire

When I have to hire this way I have a low hit rate – people end up exiting one way or another and everybody suffers. And usually I end up paying headhunters because I hate the people I am interviewing myself. I hate, hate, hate hiring developers this way.

If you are in a startup that needs really good people, you should always be ‘recruiting’ (not hiring). Network a lot. Meet as many interesting/smart people as possible. Especially people in the startup space, both because you can learn from talking to them and because they’ll get start-up life.

When I meet somebody really good I do one of a few things:
1. Try to get them some sort of side project – $5-$10k
2. Have more meetups/discussions with them about tech/architectural stuff, I like to learn and chat
3. Let them know you are interested

This way when it comes around to the point in time when you ‘need’ to hire, you have a recruitment list you’ve been working on and aren’t starting from scratch.

Who to hire is probably a whole other discussion but here are a few things I look for:
-I like to hire people who threaten my job (though I saw a case where this backfired recently)
-try before you buy, get them to do something and work with them on it, make sure you can get along
-Hire at most 3 degrees of seperation away so you have a solid referal
-startup experience is a great asset
-hire smart generalist developers, not specialists (you can buy specialists by the hour and save a lot of money)

Uncategorized

Comments Off

Permalink