my face
About Me

Published Posts

All Posts

New Post


View by Tag:

interviewing, code, testing, philosophy, blog, wantmyjob, virtualization, railsmud, heroku, ruby, published, neoarchaeology, railsgame, rails, juggernaut, astrino, cheaptoad, shannaspizza, mongodb, refactorit, devise, rvm, passenger, jruby, programming, vagrant, chef, railsframe, business, codefolio


Online Portfolio

Resume

Profile on LinkedIn

Recommend me on WorkingWithRails: Recommend Me

Choosing What You Do

Posted: 4 years ago (2007-11-22 17:32:05 UTC ) / Updated: 2 years ago (2009-06-01 21:31:26 UTC )

Imported from WordPress

Originally posted on 2007-11-22 17:32:05

It has been remarked elsewhere that a company should only outsource its non-core functions. So you should be sure to do in-house anything that is "what you do" as a company. Outsourcing is fine if, for example, the company is IBM and they hire another company to clean their offices after-hours. Cleaning up offices is not what IBM does, nor should it be. Now turn that idea on its head: when you have some other company perform a function for you, you are saying, "somebody else is better at this than we are, so we're not doing it." And that means it's not what you do. How can you, a software engineer, apply this principle to your own projects?

As an engineer, you're constantly making decisions about what code to write, and what existing libraries or applications to reuse. This is as it should be. Buying the wheel is generally much cheaper than reinventing it. Obviously you want to buy things unrelated to your core business. For instance, if you're building a web browser with better standards-compliance and better RSS management than your competition, you're probably better off using libjpeg than rolling your own JPEG decoder library. Fast JPEG decoding isn't really what you do. Starting to see the parallel?

And in the same way, buying or using a piece of software written by somebody else says, "this is not our core function". If your web browser uses libjpeg, you have declared "it's okay for us to have the same quality and speed of jpeg decoding that everybody else uses." So whatever may distinguish your product from the pack, JPEG decoding isn't it. By making these decisions, you aren't just expressing your product's intended niche, you're defining that niche.

Just because I talk about companies and products, don't assume that open source projects are exempt. As an engineer on a free software project you make all the same sorts of decisions -- write a new library, or use somebody else's? And your software has to distinguish itself just as much. What makes your software better than the incumbents? People will choose it for the same reasons as commercial software.

In general, you always want to be doing the very most important thing you can be doing. And of course, you want to knock together early versions as quickly as possible. This means that initially, you want to use other people's code as much as possible, to quickly get that initial version... Which means, defining yourself as doing almost nothing. Isn't that a contradiction?

Nope. It's what you do when you've just started. It would be nice to say "I do everything." But when you've just started, you don't say that. Your software can't live up to it. If you want to do everything first, it'll take ten years before it can do anything. And so the other half of the same lesson is that in the beginning, what your software does must be narrow, specific and focused. In other words, almost nothing.

Keep at it, and eventually you'll build up to more.

Previous: And then... / Next: What Do Macros Actually Give You?

Edit | Destroy | See All Posts

blog comments powered by Disqus