Hiring: Ruby on Rails Dark Lord of the Sith

Posted by Jon
on Tuesday, April 01

Slantwise Design is hiring one Ruby on Rails Dark Lord of the Sith. Candidate will lead Rails projects in a fast-paced, show-no-mercy environment. Our ideal applicant will have 1-3 years of Rails experience, a strong programming background, and be open to the power of the dark side.

Desired skills:
  • Ruby on Rails
  • Ruby programming (non-Rails)
  • Web deployment experience (Linux/Unix, mongrel, etc.)
  • Java background a plus (and JRuby experience great), but not necessary
  • The force, esp. mind trick
  • Database knowledge (i.e. deeper than just ActiveRecord)

You will also be responsible for enforcing order within our projects. We practice rigorous waterfall project management, with heavy emphasis on meetings and documentation, so experience with the FAHS system (Fear -> Anger -> Hate -> Suffering) a plus.

We currently have two Rails Sith Lords on staff but are interested in bringing in some fresh talent. To apply, please send your resume to darklord@slantwisedesign.com and vanquish one of our current developers in single combat.

Edit: Happy April 1

Sadly, we aren’t actually hiring Rails developers at the moment, but special thanks to Darth Rubious, who put Eric in the hospital.

Announcing Tumblon - a better website for parents

Posted by Jon
on Tuesday, February 26

Over the last nine months, Slantwise has been busy with three of its own projects (in addition to our client work). FanChatter is a mobile sports chat hub, where you can talk sports via mobile phone, email, or web. Zencoder is a distributed video transcoding system. This spring, we’ll be launching our third product: Tumblon.

Tumblon is a website that allows parents to track their children’s growth, and share this with friends and family via a online blog/baby book. To do this, we’ve partnered with respected pediatricians, developmental psychologists, and authors to get clinically-tested information about child development.

Want to hear more when Tumblon launches? Want to beta test the site? Sign up with your email address, and we’ll keep you posted.

So, what does Tumblon do?

Learn about your child’s development

Add your children to Tumblon, and based on your child’s birthdate, Tumblon gives you developmental information geared directly to your child’s age. You can dig in for more info, record milestones as they happen, and discuss your children’s development with other parents.

Journal about about your kids

Write stories about specific developmental milestones, about parenting in general, or about anything you want. You can choose to keep your stories private, let your friends and family see them at your Tumblon blog, or publish them so anyone can see them.

Photos (of course)

Not surprisingly, you can upload photos to Tumblon.

Sharing – the most important part?

Finally, Tumblon makes it easy to invite friends, family, and well-wishers to stay informed of your children’s growth through email updates, a public blog, etc. If you’re a new parent, you know what this means: keeping the grandparents happy. :)

So, when can I try it?

Soon. We’re closing in on our beta site, and will be up and running for real this spring or summer. If you want to take a look for yourself, sign up for early access at http://tumblon.com.

Zencoder Sneak Peak, Part 3: Scaling and Reliability

Posted by Jon
on Monday, February 04

It’s been 2 months since I’ve posted about Zencoder. You may be glad to know that the project is still alive and is nearing completion. It has moved a little slower than we initially expected (we had hoped to finish in Nov/Dec), but the end is in sight. So if you are interested in a complete video transcoding solution for your web application, request more info at Zencoder.tv. And if you’ve inquired in the past, and you are interested in a demo, let us know: we’re starting our online demos this week.

But on to the sneak peak.

Scaling

Zencoder scales both horizontally and vertically to a nearly arbitrary limit. You can scale vertically (obviously) by increasing the speed of your machines: the faster the CPUs, the faster the transcoding, and any Linux or OS X machine should work. And you can scale horizontally by increasing your number of servers, as high as your licensing allows.

You can scale the same way on EC2, by moving from small instances to large instances, or by increasing your number of instances.

What’s important is that Zencoder works the same whether you run it with 2 servers or with 200 (or more). The system will happily distribute your jobs across however many servers you have. (Note that it will do this by distributing each job to a different server, not one job across many servers – the latter approach can finish each individual job more quickly, but the Zencoder approach should have a somewhat higher overall throughput, since it is a bit more efficient. And it is significantly simpler, of course.)

This means that Zencoder can grow with your application. If you underestimate your traffic, or your site grows exponentially, just add another server or fire up a new EC2 instance.

Finally, you don’t even need to restart Zencoder to add additional servers, so expansion is almost completely seamless. If you’re running on dedicated hardware, just configure Zencoder on a new server and start it up: it will begin working immediately. On EC2, things are even easier: click the big green “Launch new worker” button, and you’ll have a new server up and running in about 3 minutes.

Reliability

On the reliability front, Zencoder is built with three goals in mind.

First, errors should be few and far between. This goal is obvious, and is shared with most software (except for some software coming out of Redmond, WA). And Zencoder is a reliable system in this respect. The code is reasonably compact, and it is well tested (both by unit tests and by humans).

Second, if any (or all) pieces become unavailable, your website should continue to work. In other words, if a user uploads a video at your site, and Zencoder is unavailable for some reason, your website should continue functioning as-is. Similarly, if your site is down, and Zencoder finishes a job, your website should receive the job as soon as it comes back up. As a result, we have designed the system such that you can pull the plug on any piece – or multiple pieces – and as soon as everything is back online, the system picks up right where it left off.

Third, no job should ever get lost in the system. This is accomplished through integrity checks – between the queue and each transcoding node, and between the Zencoder system and your application. You can even wipe the Zencoder queue, and if your application is still waiting on any jobs, they will be automatically recreated.

The result is that Zencoder is almost a self-healing system. It isn’t perfect (yet), but it is robust, reliable, and scalable.

Zencoder at MinneDemo

Posted by Jon
on Wednesday, November 28

MinneDemo is a quarterly event in the Twin Cities where local startups and technologists demo their products.

Zencoder is a distributed video processing system, built by Slantwise, that is scalable, reliable, and flexible.

The next MinneDemo event will be held December 6th at O’Gara’s Garage in St. Paul, and I’ll be presenting Zencoder there. This will be the first public showing of Zencoder, and I’m excited to be demoing the system after four months of development.

Whether or not you’re interested in video processing, if you’re reading this blog and you live within a 100 mile radius (or even 270), you should come. MinneDemo and MinneBar are the most worthwhile tech events going on in Minnesota.

MinneDemo works like this.

  • Show up at 6:30 for a free beer/wine/soda or two.
  • Have another beer/wine/soda.
  • Watch five or six software demos, including Zencoder. The demos each last 15 minutes or less, and PowerPoint is not allowed, so you actually see working software, not marketing-speak.
  • Continue to meet people, get ideas, land projects, and find partners. We met our attorneys, one business partner, two clients, and several friends at MinneDemo and MinneBar.

The event starts at 6:30pm on Thursday, December 6th (drinks and food), and the demos will start at 7:30pm. The demos will finish around 9pm, but some people will stick around for hours after that.

Many thanks to Dan Grigsby and our own Luke Francl for organizing MinneDemo, and Ben Edwards for starting MinneBar!

Zencoder Sneak Peak, Part 2: Licensing and Codecs

Posted by Jon
on Thursday, November 15

So how does Zencoder do its transcoding? What codecs and formats does it support? And what about the critical issue of codec licensing?

Licensing

Let’s start with the question of licensing. Codecs are licensed in three main ways.

  1. Commercial software (On2, Nellymoser)
  2. Patents and standards requiring licenses (MPEG-2, AAC, MP3)
  3. Free or unenforced formats and codecs (Ogg, Matroska, AVI)

If you’re going to transcode and distribute video, category 3 is easy. Category 1 is straightforward, and these commercial codecs work just fine with Zencoder.

Category 2 poses the real problem. In my estimation, three of the most important video codecs – MPEG-4, H.264, and MPEG-2 – and three of the most important audio codecs – AAC, MP3, and AMR – all require licensing direct from their patent holders and/or licensing authorities. Those six invaluable codecs are represented by four separate licensing bodies (representing hundreds of patent holders), each of which has separate terms, prices, minimum fees, etc. And when you move to the second tier of codecs, things get even more complicated.

Zencoder takes care of this for you. With Zencoder, you receive licenses to these and other critical codecs. We’re still working out the specifics, but when Zencoder launches, we plan on including licenses to 10-20 patented codecs and formats, covering all of the major ones and several in the second or third tier.

Compatibility

Zencoder can handle every major video codec, audio codec, and container format. And we do this legally, taking care of most licensing issues for you.

Here is a partial list of formats and codecs that we support.

  • H.264
  • FLV
  • MP4
  • 3GP
  • VP6 (with commercial license)
  • MP3
  • AAC
  • MPEG-4 Video, XviD
  • MPEG-2
  • AVI
  • Ogg, Theora, Vorbis
  • Nellymoser (with commercial license)
  • And 100+ more

The goal is to decode everything that you can throw at Zencoder, and to encode everything that you have a good reason to encode.

Zencoder Sneak Peak, Part 1: Integration

Posted by Jon
on Wednesday, October 31

Slantwise has been working on a video processing product called Zencoder for the last several months. Zencoder is a distributed multimedia processing system, written in Ruby, that is powerful, flexible, and scalable. It also integrates easily with any application that needs video transcoding. The product itself is in its final stages of testing, and will launch soon, so head over to http://zencoder.tv and fill out the contact form if you want more info.

In this first “sneak peek” post, we’ll look at Zencoder from a high level. Where does it run? How does it integrate with your application?

Two Hosting Options

Zencoder is a server, or collection of servers, that you host. The first server is the “mind” of Zencoder, which queues jobs and handles all communication with your application. The other servers are “workers” that do the actual video transcoding.

You can host Zencoder on your dedicated hardware or on Amazon EC2. Both work equally well, but we think that the EC2 approach is especially interesting, and Zencoder does some cool things with EC2. (More on that in a few weeks.) But you can mix-and-match EC2 instances and dedicated servers, so you don’t have to choose. You could use dedicated hardware for most of the transcoding work, and use EC2 for overflow work. Or use EC2 for most of your work, but one ultra-fast dedicated machine for high-priority jobs.

Easy Integration

Zencoder integrates via REST web services, so it is completely technology-agnostic. Your application can be written in Java, Ruby, PHP, .NET, Python, Erlang, Ada, or Assembly, as long as it can communicate via HTTP. It can be a web application, server software, or anything else that can send and receive HTTP requests.

To submit a job to Zencoder, you just need to send a POST request to your Zencoder server with the basic details of the job: input file, job id, and task/recipe. Zencoder will then do its work and send a request back to your application with the results of the job: status, output file attributes, output file location.

So your application only needs to do two things to integrate with Zencoder:

  • Send a HTTP request to your Zencoder server when you want to trigger a new transcoding job
  • Handle a HTTP request from Zencoder with the results of a job

We also provide a Ruby on Rails plugin that handles these things for you; so if you’re running Rails, this work is done for you. You just have to install the plugin and configure a few things, and your application is ready to go. Eventually, we plan on providing similar integration classes for Java and PHP. But even if you aren’t using one of these technologies, the integration work is pretty simple on your end, and we’ll help you through it.

FanChatter in action at the Metrodome

Posted by Luke
on Tuesday, October 30

A week and a half ago we tested FanChatter at the Metrodome during the Gopher-Bison game.

The response was really great and so we’re going to be back at this Saturday’s Gophers game against the Illini as well as at the Vikings game on Sunday. So if you’re going to either of those games, look for our promos and send in photos from your phone to get up on the big screen!

One of the cool things about working on FanChatter is getting to see behind the scenes at a major sports stadium. Here Marty shows off his phone down on the field.

Announcing FanChatter: mobile sports chat

Posted by Luke
on Friday, October 19

Slantwise is proud to annouce the launch of FanChatter.com: the first fully mobile sports chat network. FanChatter is a micro-blogging site targeted at sports fans.

FanChatter allows sports fans to create groups and chat on the web or via their mobile phones. Fans can also use their camera phone to send in photos. If you like to talk about sports, give it a try.

On Saturday, October 20, FanChatter will be on the big screen at the University of Minnesota-NDSU football game. So if you’re there (or following along at home), send your photos to gophers@fanchatter.com (or ndsu@fanchatter.com). We’ll pick the best photos from fans to put up on the big screen!

FanChatter is a partnership between Slantwise and Marty Wetherall, producer of The Show To Be Named Later. Marty and Jon met at the second MinneBar back in April, and the site is a product of that meeting. Completing the circle, it was officially be launched at last week’s MinneDemo.

Like what you see? Need mobile development? Contact us.

Finding a job with Craigslist

Posted by Jon
on Saturday, August 25

Guy Kawasaki has a new article called How to Get a Job on Craigslist. He recently posted a job listing there and got 37 good candidates. This is a great reminder of the power of Craigslist.

At Slantwise, we’ve hired four full-time employees in the last few years, and we found two of those on Craigslist. We’ve also worked with about 6 key contractors over the last three years four of those came through Craigslist.

Guy lists a few job application tips in his article. Here are my tips.

1. Build trust. Since any job hiring is based on limited information – a few conversations, not months of actual work – we’re going to hire the person we trust the most. This is a matter of skill (do we trust that you know what you’re doing, and that you can excel in your role?) and personality (do we trust that you’ll work hard, take your job seriously, and work well with others?).

2. Be specific. “Good communicator” doesn’t mean a thing to me. Everyone says that. “Spoke at three conferences” or “blogged weekly for two years” is meaningful. The same goes for project/development skills. Let us know what projects you’ve worked on and what your role has been. Go deeper if possible – “Built a SOAP adapter for (foo)” is better than “experience with web services.”

3. Avoid jargon. If your email looks like it was taken from a “how to write a cover letter” book, or some sort of Dilbert job-application-generator, I won’t take you as seriously as someone else. The right job application will sound professional, but professional in a one-developer-to-another way. If you were out for a drink with a peer from another company, how would you explain what you do?

4. Apply for the right job. Don’t copy-and-paste. Explain why you’d be good for this job, not just any designer/developer/manager job. When I’ve posted to Craigslist, I’ve typically gotten about one generic job inquiry for every personal one, and not surprisingly, the generic ones don’t get much of my time.

5. Worry about the email, not the resume. Sure, send me your resume too, but it doesn’t matter that much. A good email (what used to be the cover letter) should tell me everything I want to know. Namely: what relevant skills do you have? Where have you used them? Have you worked on any open-source or hobby projects? What do you do to further your skills, apart from work? And what do you do in your spare time? It will also set the tone for your application.

6. That said, don’t worry about your application too much. We are not going to hire someone based on the quality and composition of their cover letter or resume, or based on how smoothly a phone interview goes. We’re going to hire someone because of their skills and personality. If don’t interview very well, but you’re a kick-ass developer, guess which part is more important to us?

Next time we need to hire someone, I’m going to use two resources: Craigslist and the local developer community (RUM and MinneBar, mostly). Whether you’re looking to hire, or looking for a job, I highly recommend using these two tools.

Irrational Exuberance 2.0

Posted by Jon
on Tuesday, June 26

During the dot-com era, a new set of heros were discovered: startups. Rejecting the suit-and-tie of their former lives, brave men and women wore jeans and baseball caps to work and demanded comfortable chairs. They shed the shackles of their soul-stifling 9-5 jobs in Corporate America and worked long hours for smaller companies. Fortunes were made and lost in a matter of weeks. Porsche Boxters littered the California highway, the People’s Car of this revolution.

The story ended in tragedy, but we were all taken on a wild ride, and we enjoyed it. We are chastened now; investment money is harder to come by, and companies are often forced to figure out their product before they figure out their IPO. And yet the idol of the startup founder remains with us, working long hours in jeans and sneakers, drinking too much coffee, negotiating eight-figure venture funding deals. Dreaming of a 12-month concept-to-funding-to-sale cycle (or is it funding-to-concept-to-sale)?

This idol is back, in an upgraded 2.0 form. The names have changed (Digg instead of Lycos); they are often smaller and more frugal; and many of them will succeed.

But the idol needs to be dispelled.

Meebo is a startup in Silicon Valley that provides an in-browser, cross-protocol IM program. Think iChat or Trillian in a browser.

Business Week recently published an article on Meebo. It’s a typical dot-com profile. Meebo has 10 engineers, 7 business types, and is hiring. Their product is fairly complex and cool, with an Ajax front-end, a C++ backend, and a made-up name. Its developers work 14- to 16-hour days to keep the site running and to add new features like Meebo Rooms (kind of like chat rooms, but with 100% more Meebo). The environment is fun and informal, with ethnic take-out, games, toys, inside jokes, and Simpsons posters. Meebo also has serious VC funding from Sequoia Capital and Draper Fisher Jurvetson.

This makes for an exciting Business Week article: our eHeros are back! But two things give me pause.

First, 15 hour days are not a good thing. Long days at a startup sound sexy, like Aeron chairs and razor scooters. There are plenty of people out there that those kind of hours are ubiquitous for tech startups, like a company can’t succeed on 40-hour weeks. But death marches typically end with, um, death. Those hours can ruin a company and its employees. And more importantly, working long hours isn’t good for software. Software development is hard, and 40 good hours are better than 80 tired hours. I know developers who have burned out, gotten physically sick, and divorced because of this kind of thing. It isn’t healthy, sustainable, or profitable.

Second, Meebo won’t be a success unless it sells for $500 million, according to Business Week, and that just isn’t a good business plan. Paul Graham explains this well:

Venture investors like companies that could go public. That’s where the big returns are. They know the odds of any individual startup going public are small, but they want to invest in those that at least have a chance of going public.

Currently the way VCs seem to operate is to invest in a bunch of companies, most of which fail, and one of which is Google. Those few big wins compensate for losses on their other investments. What this means is that most VCs will only invest in you if you’re a potential Google. They don’t care about companies that are a safe bet to be acquired for $20 million. There needs to be a chance, however small, of the company becoming really big.

In other words, if VCs put $10m into Meebo in exchange for 40% of the company, then they’ve valued the company at $25m ($10m / .4 = $25m). So if they want a 20x return, then Meebo isn’t worth selling for less than $500m ($25m * 20 = $500m). In practice, they might be interested in cashing out at $100m if things look “bad” (for a 4x return), but they certainly wouldn’t want to sell for $20m, since that would actually represent a loss.

Maybe Business Week is exaggerating – I hope they are. I have no inside information on Meebo, and so maybe Business Week (or I) have the details wrong. But really, how many web startups sell for half a billion dollars? Maybe one a year? Off the top of my head, we’ve got MySpace, YouTube, and Skype (if Skype counts) over the last few years. Does Meebo provide anything as wide-reaching or revolutionary as these?

Venture capital may be great for biotech, aerospace, semiconductors, &c. But $10m isn’t needed for most web startups. There is another approach to startups, which understands the inefficiencies of large teams and the value of constraints. Throwing $200,000 at a programming problem often produces better results than throwing $2,000,000 at it. Not always, but often. If you have enough money to bootstrap a small team (3-5 developers) for a year, and if you (ahem) have a revenue model, you’ve got what it takes to build a business. You probably don’t need venture money.

And really, who wants to start a web business that isn’t a success at $30m?

The Rise and Fall of the Rails Contract Labor Market

Posted by Dan Grigsby
on Monday, June 18

The Rails contract labor market has gone through four phases thus far:

Phase One – Boutique Shops

During the first phase, boutique web-development shops used Rails to win “competitive bid” contracts over other firms by over-delivering on features at the same bid-price as the alternatives.

Typically these contracts were “soup to nuts” (or, in MBA speak, vertically integrated) projects involving design and development for companies whose web-presence was to supplement/support an existing business. The customers didn’t much care about platform, had light-to-non-existent integration needs, and certainly didn’t ask for Rails by name.

Hourly/project rates were upper-middle-class, solid and defensible thanks to over-delivering on features. Ultimately most companies have a project budget, not an hourly target rate, so moving deeper into the nice-to-have features for the same dollar cut back on the cheaper cheeper squabbling.

Phase Two – Late-to-Market Web2/Social Networks

The second phase of the Rails contract labor market arrived with the late-to-market Web2 sites and social networks.

Backed by investors, but often without their own development teams, these companies selected Rails based on the visible success of Rails during phase-1. Hoping to get into the market quickly/catch-up, these companies offered premium rates to contract devs.

Premium rates attracted (1) “gunslinger” contract coders and (2) traditional brand/interactive agencies to Rails. This forced the boutique shops to professionalize or lose business to the (1) more experienced coders or (2) better pitchmen.

Phase Three – Influx Of Cheap Labor

My hypothesis is that the rate for undifferentiated Rails labor probably peaked six to nine months ago – marking the entrance to the third phase – and has been on a downward slide since then.

The word “undifferentiated” in that last statement is important. For developers, Rails is a double edged sword. Rails extends capabilities that would previously have been inaccessible to designers and junior programmers. These folks are, quite rationally, drawn into the market by the money attached to Rails, bringing the supply up and forcing the price down. This manifest itself most obviously when heavy-hitter developers started failing to renew their contracts based on price pressure. After launch, these sites turned to lower-end labor.

Initially, I wrote the preceding paragraph with a “market confusion” angle, citing proposals for the same project that varied by as much as 300% for the same hourly labor. Ultimately, though, I decided that that I was confused. There’s a back-side to the “get what you pay for” argument that I’d intended to propose. Sometimes good-enough is, well, good-enough.

At drinks after Ruby.mn meetings, we kid about an “acts_as_social_network” plug-in. In a way, junior developer/designer-turned-developer labor /becomes/ the acts_as_social_network plugin. There are tagging plug-ins, comment plug-ins, photo-upload plug-ins, etc. Most of the standard components of social applications are trivial in Rails; a room full of senior contract developers is an expensive way to lash those together.

Phase Four – Mainstream

Undifferentiated labor isn’t normally filled by contract labor. Rails is becoming mainstream, as evidenced by the giant turnout for RailsConf. Combined, these two explain the shift from project-work to full-time positions (including, perhaps, long-term full-time equivalent contracts) that appears to be underway on the job/project boards.

Combatting Downward Price Pressure

As contract developers, we’re entering a market where reputation and specialization have significance in combatting downward price pressure. I’m going to illustrate this point with two companies and two people who’ve been in – and adapted to – the changing Rails contract labor market from the beginning.

Unspace Interactive is Toronto’s premier Rails shop. Launched during the boutique era, Unspace developed an early reputation for productivity and speed-to-market.

Traditionally, developers in a corporate or start-up setting work on a single product/project over the course of many months. At Unspace, they’d turn over project every couple of months. Getting to work on a series of projects, each from the start, compressed into a short period produced a useful side-effect for the Unspace guys: they recognized places in the Rail development process that were un-DRY: they found they were repeating themselves in views, stylesheets and controllers. The widely discussed HAML and SASS projects, and new-to-the-scene make_resourceful project were developed to make these parts of Rails more DRY. Open-sourcing these projects and actively evangelizing them at the worldwide Rails conference circuit cemented Unspace’s reputation.

Slantwise Design, also founded during the boutique era, is developing a reputation as the goto guys for multi-media based Rails apps. Keeping pace with the changing market, the Slantwise team was hired by a late-to-market video startup to build a large scale video transcoding system with a Rails interface. This experience, and the exposure generated by their accompanying RailsConf presentation, has kept them in work and above the rabble of low-rate Rails monkeys.

McClain Looney is a great example of specialized Rails labor. He is the “Rails deployment guy.” When anyone in the Minneapolis/St. Paul area, and increasingly anyone nationwide, wants to go from development to production McClain’s the guy you call. From building a scaleable production environment to database redundancy to optimization, McClain has a set of skills that are rare amongst Rails developers. The concept of a performance/ops engineer isn’t new, but one who works within the Rails framework is. This skill set is high-value, but the work has to be spread over a larger number of clients because projects tend to be episodic and not very long term.

Bruno Bornsztein is the final example of a person adjusting to the changing Rails labor market. Bruno became an expert at building social web applications as a contract coder on a late to market MySpace competitor. Recognizing an opportunity for a specialized social network for home-decorating enthusiasts, Bruno launched Curbly. This is a case of specialization with a twist: his work product becomes an annuity, paying with ad revenue instead of an hourly rate.

Your Input

My observations on the Rails labor market are drawn from examples I’ve seen first hand in Minneapolis, Toronto and San Francisco.

I’d welcome a broader view: has the market played out this way where you work/live? Have some other comment, observation or hypothesis? Add it below in the comments. We’ll all benefit from recognizing changes in the market and positioning ourselves accordingly.

Like this this article? Give it a programming.reddit.com bump:


Thanks!

How not to apply for a job

Posted by Jon
on Wednesday, April 25

We may be looking for some help this summer (and beyond), so we put a Ruby Developer Wanted post on Craigslist. We’ve had great success with Craigslist in the past; we found two of our employees and two of our key contractors there. But of course, the signal to noise ratio is lower than we would like. We usually get form-letter offers from offshore developers offering .NET or Java skills (even though we specifically ask for local Ruby developers).

This last time, we got a priceless email from an applicant that I’ll call Ivan (not his real name). Ivan’s email started OK – “saw your Craigslist ad and I’m interested,” etc. Quickly, though, problems came to the surface.

  • Ivan doesn’t do Ruby work. He’s mostly offering design, along with PHP and ASP.
  • Second, Ivan won’t work onsite, even though he appears to have an area code in the Twin Cities.
  • Third, Ivan doesn’t really appear to be looking to do any work himself. He is offering to subcontract the work to others. “I can staff as little as 1 part time, to as much as you need (50+ full time designers).”

This isn’t remarkable so far. I usually get a few of these when posting to Craigslist. But take a look at the next paragraph:

“Let me explain how we work a little bit here. I have system surveillance software installed on the computer which will send you an E-mail every X minutes with a screenshot of my computer (50k in size each). This way you can be sure that I am working on your project at the scheduled shift and you can see the quality of work as it is being produced. You can also use this to confirm that I came in on time to my shift, and left on time, etc…”

This is wrong for so many reasons.

1. I don’t wan’t to sift through X (10? 500?) screenshots every day to make sure that my contractors are doing their job. Nor do I have time. The reason we might need a contractor is that we’re too busy to do the work ourselves.

2. Seeing screenshots taken from someone’s computer just feels slimy, like an intrusion of privacy. Even if Ivan is sending them to me (instead of me stealing them from him), it is not something I want to do.

3. How absurdly easy would it be to fake something like this? Heck, it would probably be easier to fake it than to do it for real.

4. We don’t hire people based on the idea that they will sit at their desk for 8h/day. We hire people to get things done. This is a misdirected approach to productivity.

And of course, the only point that really matters:

5. Ivan has destroyed any sense of trust. He’s asking me to expect deceit, and giving me a means to protect myself against his deceit (and an unreliable one at that). There is no way in hell that I would work with a contractor who I didn’t trust, no matter how many screenshots he offers me.

As I think about it, trust is even more important than competence. I’d rather have a trustworthy employee who made mistakes than a genius who I didn’t trust. Fortunately for Slantwise, we’ve been able to find both. I don’t think I’ll break our streak by hiring Ivan.

On daily meetings

Posted by Jon
on Friday, April 06

We’ve used a daily stand-up meeting at Slantwise Design for almost a year, variously called our “stand-up,” or “scrum,” or “duck” (don’t ask). At about 10am every morning, the six of us at Slantwise get together for a short meeting to answer three questions:

  1. What did I do yesterday?
  2. What will I do today?
  3. Are any obstacles keeping me from getting work done?

In theory, the meeting should be quick – maybe 10-15 minutes. In theory, it should facilitate communication, put everyone on the same page, strengthen our team, and drive our projects forward.

In practice, it hasn’t worked for us. So a few weeks ago we dropped our morning stand-up, for five reasons, which I’ll outline below.

7 Signs Your Project Will Never Make it to Production

Posted by Ben
on Thursday, March 15

As a freelance RoR developer, I run across all kinds of clients. My favorite kind of client is the type that will actually get his application into production. Beyond the rate that he pays me, a running-in-production application is what I want. We’ve all seen sites where people show off their work; you know the portfolio page that just shows thumbnails and an application description. Well call me crazy, but I want to see more!, and your next potential client will want to see more too. Ideally, you’ll be able to show off your hard work in all its splendor! Therefore, you need to work on projects that will launch.

There are clients, however, that want your services and are willing to pay, but won’t be able to give you another nugget for your portfolio. Most likely, the client is too emotionally attached to accurately weigh his chances of launching, but by running a few filters you’ll get an idea. A little disclaimer, none of these filters are right all the time. This is fuzzy logic. Use them as signals or cautionary flags.

1) The client doesn’t have wire-frames or any user interface mock-ups.

I described this in detail here. Essentially, if your client has mocked up his application, he has passed an important gate. If there are no mock-ups, then at a minimum he has some work to do before you really get rolling on the app-dev side.

2) The client would rather describe the application to you over the phone instead of with a document.

This is even worse than not having design. He is one of the most frustrating clients you can have, because he has probably seduced you with the big idea. You probably like the guy enough to overlook the fact that he has no written plan. But by taking this guy on, you become an enabler—you have set up your client to let you down. Put some gates out there before it’s too late and help him help himself. Don’t promise to work with him until he can show what he wants in writing.

3) Creating this application fulfills a personal mission for the client

Everyone has their white whale. Parents, past failures, messianic complexes, we all have something we want to “overcome”. If your client is on a personal mission, then he is polluting his business mission. I once had a client who basically said to me that he didn’t care if the application failed in the marketplace because he “had to do it.” Serious!? If this thing doesn’t launch, how am I going to show my next client what I’ve been doing for the past couple months? Aren’t therapists cheaper than Rails developers?

4) “Are you interested working for equity?”

Run!! The project you’re working on is so far from production, it’s not even funny. What’s funny is that you are still working on it, and haven’t been looking around for new clients to bail you out! I have a friend who was working for a database startup that was going to kill the relational database market with their new “organic” database. When I pressed him to describe the product in simple terms, he couldn’t. When I asked him who the beta customers were, there were none. That’s when I told him the writing was on the wall. Later that week, they laid everyone off, asked them to work for minimum wage in cash, collect unemployment, and work for equity. Later that month, the primary angel investor was arrested for funding the company with embezzled money.

A bird in hand is worth two in the bush. Always take money before equity. Only take equity if it’s on top of your full rate. If they try to cut your rate and offer more equity, the project won’t make it to production.

5) After a payment or two, the client asks if you can reduce your rate.

Oh man, this one is sad. Bad vibes fill the air here. You can just feel that your client wants you around, but that you’re eating into his financial bone marrow. For God’s sake, shoot ol’ yeller and get a new contract!

6) “I’m going to lean on you heavily to tell me what this application should do.”

I fall for this one all the time. Being involved in business decisions is really fun for me plus it makes me feel important—it’s ego-stroking. But am I the one who should be figuring out what the user of the application wants? Look, it’s great when the client values your opinion, but beware. Your client should bring the business/customer expertise, and you should bring the technical expertise. Start tapping your network for contract leads if you find yourself telling the client what the product should do.

7) The client doesn’t have a customer who wants to use the application before it’s built.

Evaluating this differs depending if it’s b2b or b2c. If it’s b2c, then the client should have a marketing plan that you can read and understand. It should breakdown who the customer is, how many there are, and what they’re willing to pay. Your client should also have a few regular joes ready to sign up. If it’s a b2b app, absolutely do not sign on until your client has businesses ready to go before the app is built.

In conclusion…

There are many signs that your project won’t make it to production, but these are a few that either I or my friends have ignored. Are there any I forgot? Let me know in the comments.