Is PHP or Ruby on Rails better?

Posted by: DJ Burdick on: May 26, 2009

12172793211671

OK, so this post really has nothing to do with php or RoR or anything specific about any language…

Language debates will never end; they’re like the religious debates of the technical world; some people take fiercely loyal sides, while others claim to be language agnostic.

I’m not attempting to break down the features of each language here. What is important is to pick the best language/framework and I think it’s relatively easy if you put a little time in.

The important thing to note, is that every language is different and that there are better and worse languages. Period. We don’t need empirical evidence to prove this; the mere fact that languages are different means that one is “better” than another.

Say Cosmo (the coolest new language) is just 10% more productive than Costanza (the old stand by language).  Now imagine you’re working on a project for 1.5 years and it ends up being 50,000 lines of code – 5,000 extra lines (or several extra iterations of features) ends up being a decent win for what is probably an imperceptible difference in the start.

The problem with this example, is that programming productivity is never going to be a linear curve; as a project gets bigger and less agile, differences become more and more apparent with less efficient technologies; and so that 10% gain initially may end up being closer to 100% or more.

The point is, it is always worth the time and effort of choosing (and learning) the best language for the job.

Developers:

It is easy for developers to get stuck using the same tool sets they’re used to, and to be less objective about viewing a language based purely on productiviety. Take some time to learn some of the other languages and frameworks before you start with your same old bag of tools. You should always be looking at new ways of being more efficient, and that includes something as core as the language you use to build things.

Rails guys tend to get heat for acting holier than thou; mac guys tend to have this stigma as well; don’t let this turn you off. There’s usually a reason why people act cultish about their tools.

Regardless, I recommend playing with different frameworks and languages to get a first hand idea of how development in each will be. Make sure the scope of the language will cover what you want to build; then build the most simple application you can think of in each language/framework and see how “easy” each one is. This doesn’t need to be a technical analysis of each feature set; start building and the better toolset will just feel better and faster to you.

I know this sounds like a lot of extra effort, but it will pay off big time down the road when you are cruising along with the best language and toolsets, and your competitors are using something just a bit slower.

Non-Developers:

Non-developers tend to become overwhelmed with the choice of platform and language; and honestly they should not be making this choice as it will probably be on a whim, based on some marketing material or blog post ;) they just read; or it will be based on a developer they know who could be biased towards inferior tools.

If you aren’t the one who’s going to be coding, then find someone who understands the startup landscape and who also codes. It’s important that they understnad that productivity is paramount when deciding on a language.

Here are the potential problems with asking some developers what the best language for a project is:

a) The good ones will be able to pick up any language, so they may say they’re language agnostic, and therefore just recommend what they’ve currently been working in.

b) Others will be passionate about a language because of the tool sets and skills they’ve developed, and will be reluctant to recommend any other language (their language has become their religion).

c) Others won’t look at the bigger picture of getting things done as quickly as possible; it is VERY easy to over complicate a system.

Big Win:

There are small and big wins in the startup world; having the best technology foundation is a big win.  One of the cornerstones to any startup’s success is how quickly the team can iterate on new cycles of the product; this is the number one reason for it being important to pick the right foundation on which to build.

Answer:

So what is the answer to the post title? Find someone who understand technology and productivity very well and have them choose. If it’s a web application I’d have them start by looking at RoR, Django and the Zend framework for PHP.

So which would I pick? Until Cosmo gets built, I’d go with RoR right now, but I haven’t used Django yet, and before I start any new project I want to give that a pretty good test drive.

So if languages are our religions: be somewhat fickle and open minded to the new messiah; if you don’t convert, at least you’ll have more knowledge and faith in your current beliefs.

Note: The post title is not comparing apples to apples; comparing cakephp to ruby on rails would be better etc.

Will your application scale?

Posted by: DJ Burdick on: April 5, 2009

shack

Software scalability seems to be a perpetual hot topic among web developers. The thing is, 99.99% of web applications have no need to worry about scaling – ever. The debate is just pointless rhetoric – although I do understand people’s obsession with it. It’s easy and fun to play the optimization game and run benchmarks. It makes for interesting discussions; it is not productive though.

If you’re building a start-up, ignore the debate and focus on what’s important: getting your product to market.

Pick a development stack based on iterability (yes, that’s not a real word), not on scalability; that is, a stack that will let you get out as many code changes and implementations as quickly as possible.

I’ve heard people say that “ruby on rails won’t scale”, or “django is inefficient” or “cakephp is for amateur developers.” Do these frameworks use extra CPU cycles for their ease of use? Yes. Will you ever notice this? No. If you do, congrats, you’ve made it – prepare for two months of no sleep, some expensive server (bandaid) costs and dashing to find people who have been here before to help.

The risk of not spending time on scalability up front:
- You lose some potential and current users from frustration once you’ve achieved success.

The reward:
- You get to market faster, which beats the competition
- You see if you’re idea is viable; and if not, move on or do another iteration.

Most startups are ephemeral; don’t spend time building a foundation for a skyscraper when you’ll probably end up with a shack.

Build many pretty shacks until yours becomes the “it” shack. Then build a house around that shack when it’s necessary. You’ll disturb some of the inhabitants of your shack, but at least you didn’t spend all your time building a house that no one is living in. Now you have a popular house that you can work on turning into a high-rise. Cheesy analogy, but it works.

So what do I mean by putting off scalability?
Example:
Team A: Picks the LAMP stack, uses a framework like code igniter, installs one cloud server and starts developing and releasing.

Team B: Picks the LAMP stack, writes their own basic functions in OOP that are “light”, shards their DB based on what they “think” will cause a heavy load, load balances their webservers, gets a mysql cluster running, builds memcached into their apps and now starts developing and releasing.

Team B probably had fun and also wasted valuable time and resources. Team A got their app up quickly, found out what users like and don’t like and can now handle scaling issues.

I’m not saying code irresponsibly – don’t put a SQL query in a loop that queries it 100 times when you could simply write a join.

Code with good practices, pick the best (read easiest) tools for the job and choose a very agile and popular development framework to get your product to market.

Sync contacts, calendar and tasks with linux and the iphone

Posted by: DJ Burdick on: February 22, 2009

thunderbird
One thing Microsoft does well is their exchange server software; it syncs your contacts, calendar, tasks and email pretty well over MS OS and mobile devices.

For those using linux as their primary desktop OS, there currently isn’t a graceful solution – Zimbra puts out a great product and I wouldn’t be surprised if they have a complete solution for linux soon.

Below is my hacked together, cross-platform version, for my PIM (personal information management).
This will work on Mac and Windows, although there are simpler, all-in-one solutions for those operating systems.

Desktop

1. Mail: Use Thunderbird. Always use IMAP (much better than POP).
2. Calendar: Use the Thunderbird plugin Lightning.
3. Contacts Sync: Use Zindus to sync your Thunderbird address book to your Gmail address book – you can create a gmail account just for this if you don’t have one.
4. Calendar Sync: Use Provider for Google calendar – create a Google calendar account if you don’t have one.
5. Tasks: Use Zenbe Lists. The tasks in Thunderbird have never worked well for me.

iPhone

1. Mail: Use the standard iPhone/IMAP setup.
2. Calendar: Use Nueva Sync.
3. Contacts: Use Nueva Sync.
4. Tasks: Install the Zenbe Lists App.

Login to your Nueva Sync account and give it access to both your Google Gmail contacts and Google calendar.
On the iPhone go to Settings -> Mail, Contacts, Calendars -> Add Account -> Microsoft Exchange. Configure the ActiveSync settings with the Nueva Sync credentials (server = www.nuevasync.com) and turn on the Contact and Calendar syncing.

This solution has worked well for me to manage all my appointments, contacts, to-dos etc between Ubuntu and my iPhone.
Hopefully this will save you some time tracking all this stuff down.

WTF do I click on? Website Usability Testing

Posted by: DJ Burdick on: February 8, 2009

steve-the-gorilla

Image from silverbackapp.com

Usability testing is one of those boring buzz words that makes me start day dreaming about how many five year olds I could beat in a fight. But the fact is, that it’s not only crucial and necessary; it’s actually very fun to do. Seeing people use your site, who have no idea what you do, is very eye opening.

So….

Test the crap out of your site – early and often; it’ll save you dev time and bad product decisions.
It’s hard – err impossible – to look at our own sites and see the issues others see, because we each know our site too damn well.

Building great features, and having a great looking site is not enough; a site can look good and still be very hard to use! You can easily miss fundamental problems that make the site confusing and make users miss your great features.

It is amazing to see how little people use some of the features that we’ve built and why they aren’t using them – they literally just don’t see them!

Statistics testing

You can get a very accurate and analytical idea of how users are spending time on your site by looking at the traffic stats.

640x324aspx

1. Embed google analytics in your site – you should be using analytics already.

2. Go to Content-> Top Content in your analytics account.

You should page through to see the top pages people are visiting on your site.

3. Break your pages down into categories.

a. Highly trafficked

b. Moderate

c. Low

d. Never used

You should also use the “Find page containing” feature to filter the results and look at specific pages.

Another feature that works great is “Site Overlay” (under the Content section); this feature shows a visual representation of where people click on each page of your site.

Categorizing the pages will give you an idea of where they fall and where you want them to be; this doesn’t have to be exact; it’s just a general idea of where they fall in your overall site traffic.

4. Once you have a list of the pages you can:

a. Get rid of pages and sections that aren’t adding value and aren’t used.

b. Move important sections to more prominent locations.

c. Move or change links and menu items that are getting lost.

In-person testing

Traffic statistics can tell you what pages are the most popular, but they won’t give you a real user perspective of why those pages are popular, or what users find confusing. People may struggle to even understand fundamentally what the point of your website is, or may be missing great features all together because they don’t know they’re there.

There’s a great chapter in Don’t Make Me Think, by Steve Krug, on usability testing that gives more detail on what I’ve listed below. I highly recommend reading this chapter and the book in general; it has great advice on making websites simple and easy to use.

1. Get 3 to 4 strangers who’ve never used your site before and offer them some cash ($40 or so) to use your site for an hour while you watch.

Don’t worry so much about the demographic of the users – you just need some people who use the web and haven’t used your site. You’re watching how people use your site, not trying to recruit new users.

2. Setup a computer in a private room so there are no interruptions during your session with the user.

3. Get a screen capture program so you can record the user’s behavior for later review.
Camtasia studio ($300) is easy to use and works very well; you can capture the user’s screen activity and audio (to record their comments). If you’re using a mac then give Silverback a try. I can’t personally attest to it’s value, but the reviews are good and the price is great ($50).

4. Explain to the user how the test is going to work.

Tell them:

a. There is no wrong way to use the site and no wrong answers – you simply want to see how they use it.

b. That they should talk out loud as they use the site so you can hear what they’re thinking.

c. Not to get offended if you don’t answer their questions. The point of site testing is to see how the user uses your site and therefore you can’t help them if they’re struggling.

5. Start the testing when they’re ready.
Show them the site first and ask them what they think the purpose of the it is – they should be able to answer this after looking at the home page for a few seconds.

6. Tell them they can click around freely and watch where they go first and what they say.
Encourage them to keep talking out load as they browse the site. Don’t take all their comments to heart, some will be minor and inconsequential, others will be major usability issues that need to be fixed.

7. Create a couple of tasks for the user to complete.
For instance: Ask them to find a photo they like and tag it if you’re running a photo site. It’s up to you to decide what the most important actions are on your site. Leave the tasks as open as possible so the user can pick how they want to complete each one – don’t tell them to tag a photo of a rabbit; tell them to tag a photo they like.

8. After you have enough data from the three users, review it immediately with the team.

Testing Tools

  • UserTesting.com
  • Usertesting.com is a great site that shows you a 15 minute video of a tester using your site and answering questions you specify. They charge about $20 per video and it’s been well worth it for us! You give the user a list of tasks to perform and then watch and hear as they click and talk their way through the process. What I like about this site is: a) it’s very easy to sign up and instantly get testers and b) it’s anonymous so it seems as though the users are likely to give honest feedback. I will continue to use this service to test all new major site features.

  • Feedback Army
  • Feedback Army is a user feedback or survey site. You get 10 surveys answered for $7. This has worked well for answering very specific questions and getting a larger sampling of the issue. Usability issues tend to be easy to spot as you watch someone use the site, so you only need a few users to hash these out. Questions like: “Do you like our site name? Why? or Why not?” can generate a wide array of answers and it’s good to get a median response by sampling a larger group.

  • Screen Capture & Recording
  • As mentioned above, these are good and simple ways to do user testing.

    1. Camtasia studio – We have used this software and it works well. ($300)
    2. Silverback – This comes highly recommended for mac users ($50).
    3. Morae – I haven’t used this, but it looks like it gets the job done ($200)

    If you haven’t got specific feedback, in-person, from users before, you’ll be blown away to see how obvious some usability mistakes you’ve made are. People are impatient on the web; they want instant gratification and you need to give it to them.

    VIM syntax highlighting

    Posted by: DJ Burdick on: January 29, 2009

    vim_bar
    Shiny new syntax in three easy steps.

    By default Ubuntu comes with the tiny version of VIM (Vi Improved).
    First you’ll need to get the regular version.

    1. Install
    apt-get install vim
    2. Open a file for editing
    vim filename
    3. Turn on syntax highlighting -or-
    Press ESC :syntax on ENTER
    3. Edit the config file to always do syntax highlighting
    As root type: vim /etc/vim/vimrc and find and uncomment the line that says "syntax on"

    Charles River Funding

    Posted by: DJ Burdick on: January 26, 2009

    crv_logo_biglogo_lg_shadow

    I’m happy to say that we (OneSeason.com) closed our funding with Charles River Ventures earlier this month and announced the funding this week. We’re excited to work with CRV and be a part of their list of great companies they’ve invested in. George Zachary is the lead partner on our investment and will join our board of directors. James Hong (hotornot and a great product guy) and Ronnie Lott (49ers cornerback and safety) will join our advisory board. I also want to give a special thanks to all our original investors who have supported us from the beginning!

    Don’t Pitch VCs Too Early

    Posted by: DJ Burdick on: January 18, 2009

    venturecapitalcartoonsquarewheel

    The secret to raising venture capital is (drum roll…):

  • Build a compelling product that has a ton of people using it.
  • Right now you’re probably saying: “thanks for the advice jackass.”

    The point I want to make with this post is that, unless you’re a “name brand” entrepreneur (someone who has already had a big success), pitching VCs before you have traction and a live product is a waste of time. Some businesses, like the hardware industry, require more capital to just get a working demo; but the internet industry, for the most part, requires little to no capital to start a business.

    We spent a lot of time pitching VCs before OneSeason was launched. We flew to meetings and talked to people all over the country about a year before we even launched. It was a good learning experience, but definitely detracted from building the business.

    What is the money for?
    You need to get creative and look at what you plan to spend the money on. Most early startup expenses can either be deferred or replaced with equity.

  • Employees – instead of hiring, get an initial team together of partners who can build the first product version and all share equity. You should have partners when starting a company anyway as it is invaluable to have other founders that you trust.
  • Marketing – you should be able to get a decent amount of traction by marketing the product yourself, through your network and other online destinations. If you aren’t getting traction, then maybe what you’ve built isn’t that compelling. You may need to change direction. You will flesh things out this way without wasting money on marketing. You could easily spend $1MM a month on marketing and get no traction if you’re product or concept sucks.
  • Legal – you can setup a simple pre-formation agreement between the first initial equity partners; this pushes the costs of setting up an LLC or C-corp further down the road. You can get started with that agreement, and then, as things progress, form a real entity. Form contract sites like Legal Zoom provide a cheap alternative as well. You should be able to cover the legal expenses with money from friends and family or using a credit card (be careful) or your savings.
  • Office – work from home
  • Web Hosting – this should be very cheap if you don’t have much traffic. Less than $100 per month.
  • Eating and living – Raise some angel money from friends and family or use a credit card or your savings.
  • Once you have a live product and some users who are passionate about your product, then you can feel confident that you aren’t just wasting your time with the venture guys. Ideally, you should strive to keep running your business until the VC guys start calling on you. The balance of power will have shifted back to your side and at that point, you can get a deal done that you want. The industry tends to have an inordinate amount of hype around it. Remember that there are just as many positives as there are negatives with taking investment capital; don’t think that it is the be all end all. Raising a venture round does NOT mean that you have built a great company.

    The bottom line is: Focus on your company, make it great and the money will come.

    I’ll write more specifics about the industry, pitching, angel investors and managing your capital in future posts.

    How do I get a programming job?

    Posted by: DJ Burdick on: January 14, 2009

    code monkeyNote: This article is not for CS majors. You should have resources through your school etc to jump in somewhere. This is for the part time code monkey.

    How do I get a job as a developer or designer?
    I had lunch this week with Ian – a friend from high school who was asking me about tech gigs. I’ve had a few people who are hobbyist coders ask how to break into working at a “real” company.

    Here’s what I’d recommend for those of you who love building web apps and want to make it a full-time job.

    1. Make sure you love to code or design etc. If you’re just looking at the pay scale and you don’t love what you’re doing, you’ll never be great at it.
    2. Break down your skills into one of three areas. Below are three larger buckets of skill sets; these are what I hire for at a startup; a larger company could break these down even more. Figure out which area you are most passionate about and have the best skills in. Focus on that area as much as you can in your studies and projects. Also, look at job postings of companies you like and see what tools they use and require.
      • Design – CSS/HTML, Flash/Actionscript, Photoshop
      • Coding – PHP, Java, Ruby on Rails, AJAX. Focus on one language to start with. Learn professional development environments and tools like: Subversion, different frameworks, OOP etc. You should also know some SQL and basic elements of the whole stack (LAMP etc).
      • Admin (Systems & DB) – Linux, Unix, Windows Server, Mysql, Postgres, Oracle. You should pick either the *nix environment or Windows and stick with it *cough* linux.
    3. Note: System Admin positions seem to be less readily available – facebook only has two full-time admins and a ton of developers. That being said, there are always opportunities for good people.

    4. Start doing contracting work to refine your skills, build your resume and earn some extra cash. Most every position is going to want experience or a prestigious CS degree. Contracting helps you overcome the chicken and the egg problem.
      Two good places to pick up contract/project gigs are:

    5. Extra time between contracting gigs should be spent building a personal project site. Pick something you think would make a cool site or tool and start building it.
      This is how I got into the web stuff before I went to college. Who knows, it may even turn into a real business.
    6. That’s about it. Good luck. Have fun.

    Founders At Work

    Posted by: DJ Burdick on: January 12, 2009

    founders
    Founders At Work
    is an awesome read for anyone who’s starting or running a startup!

    I won’t do an in-depth review. If you’re a founder, just read it. It’ll give you some good advice and inspiration. Startups are crazy and it’s really great to see how all these successful companies had many of the same hurdles that I and other startup founders have to tackle on a day to day basis.

    Take Aways:

  • Most of the companies were started by a great set of founders. It is invaluable to have a partner to share the work and bounce ideas off of.
  • Many of the companies ended up doing something very different than what they had originally intended. Listen to your customers and be willing to adapt and change your concept.
  • Hire great people. This is probably the number one piece of advice I hear from everyone who runs any business. It is very apparent from the stories in this book.

    Favorite Interviews:
    95% of the interviews in this book are great. Here are a few that stood out.

  • Max Levchin (PayPal) – Some very relevant info to the OneSeason business model. The PayPal Wars is also a good read if you want more on PayPal.
  • Sabeer Bhatia (Hotmail) – The viral nature of web email back then was so powerful. Every email was essentially an ad for their new webmail service.
  • Evan Williams (Blogger) – This is just one of many examples of the product completely changing. Blogger was an internal tool they used that ended up being their main product – several examples of this throughout the book. Also, the company went completely broke before it was successful. Persistence is key.
  • Mike Lazaridis (RIM) – RIM setup a prime recruiting environment by basing themselves next to one of the most prominent computer science programs in Canada – more of the importance of recruiting great people.
  • Mike Ramsay (Tivo) – They pulled so many different elements together to make Tivo a great service.
  • Mark Fletcher (ONElist, Bloglines) – I just generally like his philosophy of customer centric development.
  • Charles Geschke (Adobe) – More examples of how PARC blew it. These guys built an amazing company. They went head to head against a microsoft/apple partnership and won. It proves that the big guys don’t always win and that there’s room for smart people who can execute to take their market.
  • David Heinemeier Hansson (37 signals) – Two examples of an internal product that inadvertently become a core product: Their basecamp project management tool and subsequently the open sourcing of Rails. Rails led to a lot of their success and became a big marketing tool for their products. For more on their business and development philosophy I highly recommend their book: Getting Real.
  • Joel Spolsky (Fog Creek Software) – Interesting (and unexpected) marketing strategy. Joel’s blog on software dev had become very popular and in turn was the catalyst for most of the sales of their bug tracking software. I recommend his book Joel On Software as well.
  • James Hong (Hot or Not) – “If you raise money. Spend it like it’s your own!” I generally appreciate James’ insights.
  • Jessica Livingston (Ycombinator/Author)- She’s the author of this book. Well done on a great book for our world! Also, Ycombinator is a great new model.
  • twitter from the command line

    Posted by: DJ Burdick on: January 7, 2009

    twitter-hashclouds

    So I’ve started using twitter. Not really sure why yet, and I don’t think many other people know why they use it either. Anyway, if you’re on the command line a bunch here’s a way to tweet from there.

    This is a shortened version of an article by Linux Journal

    1. Install curl
    http://curl.haxx.se/
    (you can use apt-get install curl, yum install curl, up2date install curl, synaptic package manager etc.)

    2. Create “tweet” bash script


    #!/bin/sh

    #Change these 3 variables to your info
    user="username"
    pass="password"
    curl="/usr/bin/curl"

    $curl --basic --user "$user:$pass" --data-ascii \
    "status=`echo $@ | tr ' ' '+'`" \
    "http://twitter.com/statuses/update.json"

    exit 0

    Note:
    Storing your twitter password in the file is not the best, but how bad is it if someone gets your twitter password? “I’m a douchebag tweets” over and over maybe.

    3. Put the tweet file in:
    $HOME/Scripts (your home scripts dir)
    chmod 700 tweet

    4. Add path to your .bashrc
    export PATH=$PATH:$HOME/Scripts

    Close and reopen the terminal and type $PATH to see the new path to your Scripts directory.

    Usage:
    $ tweet twitter from the linux command line makes me a geek in more than one way

    Ignore the returned JSON.

    Thanks to Nepomunk for pointing out the change to my original /usr/local/bin solution.

    Twitter

    • RT @sacca: Supercuts is a lottery that normally pays 3x your original bet. But, when you do lose, it costs $19, and all of your self-esteem. 1 week ago
    • it's called the fing "internet" not the "interwebs" or "interwebz" or "intertubes" or "internets" - stop trying to be cute 1 week ago
    • @codinghorror good article on user myopia, but the real goal shld be to remove all instructional text - algorithms to suggest formatting etc 1 week ago