Negotiating Good Contracts for Startup Companies

I was writing about my own startup companies, then found Ryan Carson's post on building his web applications.
Here is the part of the post I found particularly interesting, the contract:
Elliott [the developer] will receive 10% of monthly revenues, after the expenses listed above. If he launches the site on time (3pm April 20th), this will increase to 15% (hat tip to Natasha on that idea). When the site hits $25,000 monthly revenue (excluding VAT), his take will increase to 25%.
His monthly cheque will be determined by a snapshot of the revenue on the 1st of every month at 9am.
If the app is sold, Elliott will receive 10% of the cash price, after lawyer and accountancy costs.
I build web applications so I can relate to Elliott here as well as many of you (my readers). The only difference between me and Elliott is that I own the company who knows all the people to hire and how to get it done. My company is called, "MJG International" and establishes these type of business partnerships.
Carsonified Wins, Elliott Loses (mostly)
Before I rip apart the Carsonified contract, I want to say quick - Ryan Carson, if you are reading this thank you for sharing the information, it serves as a good example to work from. And certainly I am not accusing you of being dishonest - I just don't agree with the contract.
Now here is my opinion on the Carsonified-Elliot contract. I'm not sure why Elliott would build the product for no money and 10-25% of the application under certain performance terms. I think this is a really bad contract completely in the favor of Carsonified. Here is why it sucks for Elliott:
- Carsonified has no risk. They are covered legally and don't have to pay the labor, all the risk is on Elliott's shoulders.
- Carsonified can expand and change the contract of the product as much as they want and Elliott is still pressured to get it done by a certain date to keep his larger percentage.
- Carsonified doesn't even have to pay for support costs after the product is launched, because Elliott has to answer support emails within 24 hours.
- Carsonified gets at least 75% of the revenue, Elliott is the one taking the risk here and gets just a slice of the revenue.
- Carsonified owns all code and intellectual property -- Elliott owns nothing when it is all over but a cut after expenses.
Wow, talk about getting kicked in the butt by a contract. Carsonified gets all the cheese for having the idea and negotiating the contract. Good work negotiating, Carsonified!
How To Negotiate a Good Contract
Now I'd like to share with you how I negotiate a contract. When I say, "you" here that means you as the developer. Assuming you want to go on these ventures.

- Chose a partnership with business who care about you and you care about their product. This is tough in a for-profit world, but I've managed to do it. There is an over-abundance of companies with ideas and a shortage of developers who can actually accomplish it - know that as leverage to negotiate a fair contract.
- If you build it, you should own everything that doesn't apply specifically to that project. You need to build products with reusable code so you can start other companies. You can even open source engines from it, like Ruby on Rails did.
- Require money up-front enough to get you by. Creating good web applications is tough, real tough - even the simplest things can become complex when you consider everything it takes to create something that will be really worthwhile. You may not be able to do this until you have a fair amount of success under your belt.
- Get at minimum 30% of the revenue of the tool if you are working for free. I do 30% plus an initial 2 months of operating capital depending on the project, but again - that is because of experience.
- Get a lawyer you trust to review the contract before signing. They will remove language that doesn't protect your rights.
- Create a startup company for the product that is it's own company, as a subsidiary of the company you are working with and get 30% stock in it. That way if the company is sold, you get 30% of the selling price.
That is all off the top of my head. Because I've been through this I feel it is my duty to protect the on-the-ground workers who can actually finish products. Once I get good at executing and have a lot of successes under my belt, I'll probably take more like 70% of the product instead of 30%, since the only thing the company partnering with you is doing is have the initial idea, which is important - but everybody has ideas! Execution of the idea means a lot, especially in web development.
Let me assure you that I value the business partnerships I make and their ideas. The contracts I've made so far have been fair and everyone has been great to work with! I hope you all reading this can have the same.
Be fair, don't be square. You rock, peace all.
Acheiving Freedoms in 2008

2008 was a year of embarking on a journey towards personal freedoms in my career, which although was scary at times, paid off in spades.
Attained Freedoms
The following freedoms are available to me, that I didn't have at the beginning of this year:
- work from home remotely
- hire people I trust
- create my own applications
- work as much or little as I desire and still get paid for it (as a contractor)
- take time out to eat, read and pray (during the work day)
- spend more time doing things outside of normal work like go to conferences, spend time with my girlfriend and go on vacations
Assets VS Liabilities
Attaining these freedoms became incredibly important to me late 2007 when I realized I was building someone else's assets. I realized that if I stayed the course I was headed down, I would end up dependent on that next pay check to pay for the liabilities (things on credit) just like those surrounding me. I needed to break out of the system and forge into new territories.
It would have been a cold day in hell before I launched any major start-up companies while working for someone else - working nights and weekends. Not to mention I became border-line depressed working so much. Instead, I decided to cut my (client) work week down to 24 hours per week to allow the rest of my week to build applications that make my business into an asset-driven company (I'll explain later).
Breaking Into Contracting
In April of 2008, I pinged a few companies to see if they would hire me for 24 hours per week, remotely to cover my living costs. After casting the line, I got a few offers. I ended up turning down a job offer working on the Firefox Addons theming engine (which I was grateful for the offer!) to work for an internet marketing company in Duluth, MN. Why? My #1 reason for turning down a job with Mozilla is, Silicon Valley doesn't need anymore high-level talent. Silicon Valley takes away much of the great talent (poke at Dave Dash of delicious.com) we have here in Minnesota.

Instantly Respected Names VS Local Business
The bottom line is that I want to work for local companies and grow them, without a company name that demands respect attached to my name. It is for the same reason I went to a small college - The College of St. Scholastica, who has heard of that? Strengthening the computer science program was a high priority for me, as it most certainly will be in the future.
If you work for "Google", you have "Google" attached to your name for the rest of your life, and instant respect. Some people want that, I don't. My attitude is to do it the hard way from the ground-up and not bank on others' success. I learn more that way and get only the respect I deserve. Yes I was interviewed by Google, many times over. But it was in the process that I came to some of these realizations.
The Unexpected
Not everything went perfect this year. My first startup company will launch in the first week of January, which I wanted to launch exactly one year prior. It turns out that launching a (good) startup takes thousands of hours or work and investment. You just can't put in that kind of time unless you own your own business and have flexibility (without pulling in investment dollars). So far I've spent 1800+ hours of my time and a pile of my own cash to hire awesome talent to help me with the tough parts. I might argue this isn't a downfall, but it was mostly just unexpected.
I had to give up my seat on the jQuery UI development team. It was just too hard to generate revenue, launch startup companies and program open source at the same time. Datepicker was just consuming way too much of my time and I had to give it up. Though, I did review a book that is coming out soon on jQuery UI, so that was cool.

Reflecting on 2008 Goals
The goals I've made in the past have been fairly lofty, but all-in-all it is good to make them once and a while. As I've found out, it is incredibly hard to hit software development goals because things change and your focus can shift. It is hard to stick out projects to the end in this dynamic profession, but if you do stick it out you may get big rewards.
I've met more amazing people this year, and have continued to grow past work relationships stronger (thanks, Twitter). I know things will continue in the midst of the failing economy because I work with great companies who have strong client-bases. Each company has been chosen wisely.
Looking Forward
2009 will mark the pursuit of creating assets, jobs and reliable tools. Assets are things that have value without you being there. They generate (or hold) value without you having to attend to them. The rich generate assets and the poor and middle class generate liabilities (car, house, tvs, etc) and pay lots of taxes.
But this year isn't all about money. 99% of the time I talk about my career because this is what my website is about, but the "secret sauce" to my success is that I have a deep spiritual life that fuels and inspires me each day to be the best I can possibly be (and beyond).
So Happy Holidays everyone! I'm hoping you have a great 2009.
"Should I Use Dreamweaver to Code Websites?"
"Should I use Dreamweaver to code websites?" my short answer is, no - you should learn to use an editor that was made with coders as the main focus.
"But doesn't Dreamweaver have a code editor build into it?"
Yes, Dreamweaver contains a code editor. But my answer to why a coder should not use it goes back to the original intent of the application. The intent of Dreamweaver was to give people who don't know how to code websites the power to build websites. Today, Dreamweaver has changed quite a bit, giving coders some more tools to work with, but it hasn't lost it's original intent.
Adobe's focus with Dreamweaver is to create a website development tool that reaches the widest audience possible; which in-turn increases sales. Because of this goal, Dreamweaver has everything and the kitchen sink in it. Dreamweaver (in my opinion) suffers from feature bloat because it has such a wide target audience and the program is not 100% focused on the coder's needs.
Hats down to the Adobe Dreamweaver team for making a tool that reaches such a wide audience, but I will never use it because it doesn't have me (the coder) as the main focus. My advise for coders is to find a tool that is solely focused on you, the developer and leave the design / hybrid software behind.
Webisode #1 - Introduction
Today marks venturing into new territory, video. Although it felt weird to be in front of a camera, I managed to pull together this webisode which takes you through my office and a few projects I have going on. Enjoy!
MarcGrabanski.com Webisode #1 - Introduction from Marc Grabanski on Vimeo.
5 Tips for Better jQuery Code

I've been coding using jQuery since shortly after it came out, and well -- I've been using it almost every work day. Here is a few tips that have saved me time.
#1: Use data method instead of storing data inside the DOM.
The mistake I see people making all the time is this:
JavaScript:
$('selector').attr('alt', 'this is the data that I am storing'); // then later getting that data with $('selector').attr('alt');
Why is this a bad thing? Because "alt" has absolutely no meaning whatsoever, as well as HTML is not meant to store data.
Instead use the data method in jQuery. It allows you to associated data with an element on the page.
JavaScript:
$('selector').data('meaningfullname', 'this is the data I am storing'); // then later getting the data with $('selector').data('meaningfullname');
This allows you to store data with meaningful names and as much data as you want on any element on the page. It is a really amazing utility and something I've come to rely on.
#2: Take advantage of jQuery's built-in custom selectors.
jQuery has a plentiful amount of selectors that are beyond basic CSS selectors, so use them. Some that I use are:
:inputexample: get all the inputs on the page regardless if they are checkbox, textarea or select list - use:input[attribute=value]example: find an input with the name, "container" - useinput[name='container']:eq(index)example: get the fourth table on the page - usetable:eq(3)
#3: If you are Manipulating the DOM a lot, use livequery.
Note on November 16th, 2008: If you understand event delegation, use it as an alternative to using livequery for attaching events.
When you add elements to the page a lot, attaching events to them and running functions on them then use Brandon Aaron's livequery plugin. This way you can do things like:
JavaScript:
$('div.edit').livequery('click', function(){ //go into edit mode });
Then whenever you add a div to the page with class "edit" it will attach that click event. This works for all other events, as well as if you want to run a function on an element right when it is added you can do this:
JavaScript:
$('span.flag').livequery(function(){ // run this function when a span with class "flag" is added to the page });
#4: Use jQuery form plugin to submit files via Ajax.
If you use Mike Alsup's jQuery form plugin you can use it to submit files via Ajax. It uses a trick with an iframe to submit the data. Just put in an input type file, then use $(form).ajaxSubmit(); and you are good to go.
#5: Use classes as flags.
If you aren't storing data, but need to set a flag on an element use a class. What do I mean by a flag? Well, for instance if you are in "edit mode" of a form you might use the class, "editing". With jQuery you can add a class with the addClass method and then check later if an element has the class with the hasClass method.
