How to Develop Code Faster

February 28, 2007

First, we’re not really looking to develop “code” faster.  What we really want is to develop a “product” faster.  There is a big difference.  Largely that difference is that someone will buy a product, and they won’t necessarily buy code.  My goal is to maximize the amount of money I make compared to the effort it takes to produce it.  We’re looking for a local maximum in the relationship between the earnings curve and the effort curve.  Here’s the List so far:

  1. Get rid of Not Invented Here syndrome.  This is important.  Other people are out there writing code; some of them are even good at it.  They, too, are trying to sell a product.  If you have a common task, there is some code out there that will help you complete that task.  Basically, if you are building someone a CRUD app, then there is some code out there to help you.  Most people think it’s easier to write things from scratch than to use someone else’s code.  Please believe me when I say that you are flat out wrong for anything more than a trivial case.  Purchased applications have already been tested.  They have phantom unit tests (hopefully!) of which you are not aware.  Also, the code is being sold at a fraction of the cost that it takes to produce, because they are selling more copies they can afford to lower the price per unit when compared to the production costs.  It takes less time and resources to learn some 3rd party control than it does to implement that control yourself.  Yes, the control costs $450 or whatever, but you can pass that cost onto the customer, and they’ll be glad you do because you didn’t spend hundreds (thousands?) of hours implementing something that you could have bought for $450 and had working in your application in 2 hours.
  2. Learn the customer’s business.  This helps in two powerful ways. First, if you know their business you can speak to them in terms that they’ll understand.  They can speak to you in their own terms.  The removal of that communication barrier is a fantastic improvement to productivity.  You know what they want, even if they haven’t said it.  Second, in knowing their business, you know what they don’t need.  We think we are programmers, but we really should be sculptors.  Sculptors remove from a project until the project is perfect.  So too should we.  You can save yourself a lot of work, the customer a lot of money and both of you a lot of time by simply removing that which is not necessary.  This is the fastest way to get a particular feature completed, simply don’t do it.  Bam!  That’s off the list of things to do now.  Knowing the business is key to being able to make those judgment calls.  Stop doing unnecessary work.
  3. Code to a product.  Make your project meet the minimum standard that will fulfill the job that it will be used for. Coding to a product gives you a goal.  Goal galvanize great programmers to finish.  Measure your progress.  Do this only for yourself, doing it for anyone else is a waste of time because it is then subject to “gaming.”  The measurement can only be honest if you are doing it as a self imposed measure.  Pick a metric that gets you coding to a product.
  4. Rest.  Sleep.  Vacation.  Take two months off once you have put out that product that took 8 months to create.  Exercise.  Make sure you are taking care of your body.

That’s all I have folks.  The more I think about it, the more I realize that the best way to get something done isn’t in a framework or a programming language or an operating system (though these things help), it’s a social exercise between you and your customer.  This is why dog-fooding your own product works, because you are then your own customer.


No Sleep ‘Til Brooklyn

February 28, 2007

I’ve only slept 3.5 hours out of the last 60.  That’s probably not good, right?  I am so tired, that I am now not even tired anymore.  I am just in a state of permanent zombie.  Coding in this state is another thing altogether.  I do not recommend it.  I do not recommend over bidding all kinds of work because you think you aren’t going to get it all — Murphy’s law says you will get it all, and then you’ll spend two months trying to dig through the avalanche of work you have to complete.  The side effect is you make good money, and you don’t spend much money, because you are always working.  Another issue is that people don’t understand what you mean when they ask you “so, what have you been doing?” and you respond “working.”  Normal people work 40 hours per week, hate their jobs,  and go home to do the things they are really interested in.

That’s the problem with programming.  I’m interested in it.  I don’t just stop coding, reading and learning about programming because the workday ends.  If you’re reading this, it’s highly likely that you have the same problem that I do.  Have you ever read your way to the bottom of the page, and then thought to yourself “crap, now I have to wait until tomorrow to read more.”  I’ve never programmed in Haskell (even for fun) and I have read at least 5 articles on monads.  Don’t even get me started on currying, or y-combinators — I’m reading that stuff everyday.

Thing is, I think everybody else is slacking.  The truly driven people don’t really need to be even exceptional at what they do because everybody else is so poor at it.

End of the Month

February 26, 2007

As a street walker contractor the end of the month is a very important and stressful time.  I spend much of it either trying to finish projects that are close to completion or following up on projects that are complete and need to be collected on.  Normally, I don’t have too much of a collection problem.  I either use an escrow account, or I get half up front which normally covers the cost of actually doing the project.  I find that the biggest factor in not having a collection problem is actually getting the customer something that solves their problem.  If their problem is getting solved, generally they are more than willing to pay you right then.  If you have solved their previous problem they now consider you a valuable “problem fixing” machine, and they want to make sure you are on board with them.  I’ve never had trouble with payment when I can demonstrate that I have solved their problem.

This month is completely off balance, because I have a very large project due on the 28th.  I’ve only collected ~$4,000 this month because I’ve been busy with this large project, which is worth ~$7,300.  I have another project that I want to finish in the next 48 hours as well that is worth $3,400.  Assuming I get these projects done and I get paid, February will obviously be a very good month.  If I don’t then February doesn’t look good at all, but I would expect March to look ridiculously good.  I would rather have two pretty good months than one bad one and one ridiculously good one.   So on this Monday I am up early after only sleeping about 3 hours so that I can grind away at my projects.  The mortgage is due; wish me luck.

P.S. Am I the only one having issues with Firefox today?  I got an update for it last night and now the damn thing is freezing on me and stalling on trying to load pages.  It’s very annoying when you need to get something done.  Normally, I have no trouble with their releases, so I am a bit surprised.  If they were dog-fooding their stuff they would find this problem in maybe 5 minutes, although determining the cause is likely much more difficult and time consuming.


February 24, 2007

No AJAX for me today; it’s back to working on my big contract for this month. This is the second half of a $14,600 contract to build an internally used application for a nationwide company. Technically, I am working for a company that is working for a nationwide company, but all the same, my software will be running in 1,400 locations across the country. I got paid half up front, and I get paid the 2nd half when I finsih, which has to be shortly because their is a presentation next week to the owners of the “beta” software. We’ll call that release candidate 1.

I cannot understate how useful findng code on the internet is. I think that finding, and in some cases buying, code on the internet has made me significant money with minimal effort. I know everybody has the “Not Invented Here” syndrome, but I am here to tell you that it is costing you money. You cannot possibly replace the functionality of a product that is for sale in the time you have to do the project. Hence, in the spirit of Greenspun’sTenth Rule:

“any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp.”

I present Shuad’s Greenspun Rule Ripoff:

“any sufficiently complicated contractual program contains an ad hoc informally-specified bug-ridden slow implementation of functionality that could have been purchased, learned and implemented at 1/20 the price.”

Think about that next time you dive into implemented a control that you know already exists (you checked if something like what you need exists, didn’t you?) and you could buy for $150, but charge your customer the amount that it would have cost them had you written crap version yourself. You get an easier path to a good program and make more money in less time. The customer doesn’t have to deal with your buggy, slimly tested crap implementation. GI Joe taught me, “knowing is half the battle.”

I am tired of Windows Apps

February 24, 2007

Yes, I have a lot of experience doing them. Yes, I have an entire “Rails-like” framework internally developed for doing them. Yes, they are very responsive from a UI standpoint. Yes, I never liked web applications either. Then, I went to install a small program I wrote on the LAN of one of my customers. Everything works fine on the server, and everything works fine on my LAN, but everything did not work fine on theirs. It’s something to do with security. Fast forward 3 hours. I still haven’t gotten it to work on their LAN and my customer is standing around wondering why this is taking so long, and it’s time for them to close. Now I have to find out what sort of security issue is causing it (is it .NET, SQL Server, a firewall, antivirus software?).

This is holding up getting me paid. I don’t like to wait for my money. Yeah, in this case it is only $600 (total job was $1,500, got 50% up front, and then gave him a 20% discount on the 2nd payment because of all the issues and it taking longer than originally planned, and yeah it really didn’t help when the security got in my way).

So, officially, I am becoming a web programmer. Yes, I am still going to serve my existing customers with their Windows based apps, but I am moving away from it for new development. I am in the market for a new platform. I checked out Flex from Adobe, which looks pretty good. I am also looking into Rails, Django and TurboGears and myriad of AJAX frameworks. More and more, I am finding that if I let someone else do the programming, I make more money. Frameworks are good, because they are existing tested code. Open source frameworks are even better because you can fix bugs in their code should you need to. I am finally waking up to the internet revolution.

I’ll report back on my findings with these various frameworks and technologies. First up is Flex. Wish me luck.

An Opportunity

February 22, 2007


I just read on that Google has launched a yearly subscription product that integrates all of their offerings, including: gmail, gtalk, their document and spreadsheets, search and others. Here’s a link:

I noticed at the bottom of the comparison list for the free and paid version of this service that it said something about 3rd party apps. Is this an opportunity? I checked and only about 8 companies are currently in that group. They offer a range of services that build on top of the Google offereings or in some way customize it. Long story short, Google is offering all of us microISVs a platform on top of which to build interesting products. An untouched platform, and they’ll give us technical support too. I can’t shake the feeling that this is a big opportunity for some smaller companies.

There is a drawback; the cost to get in is $10,000 per year. That’s what it costs to be a Google partner. Can we weather that cost? Do they realize that the people who can most easily make an impact on their fledgling platform are one man programmer shops that are looking to make a name for themselves? Why would they charge this much? It boggles the mind.

Still, I wouldn’t let a little thing like money stop me from seeing a good opportunity. Start your engines ISVs, there’s an entirely new world that we have to fill in with good product offerings.

I would rather be CEO

February 22, 2007


For 10 years, I have loved programming. I have learned and used Java, C, Scheme, C#, Python, Ruby, Boo and sometimes even PHP and Javascript. I have made a decent living out of it. Here’s the problem: I’m tired. I realized I can’t do it all myself, even if I make little minions out of code to do a lot of the work for me, even if I master the most powerful programming languages, the most powerful frameworks, the design patterns, the project management skills and read all the books.

I want to build something more than myself. I need other people for that. I need to trust other people for that. Therein, lies the journey. This blog will be about that journey.

I am currently about 12 months into running my own company. I went the easy way and have a sole proprietorship. I have a Nevada C-Corp coming into existence shortly. I’m still going to pay California taxes, but it just turned out to be easier to do it in Nevada. I have some things going for me. I have at least two reasonably steady clients. I am awash in offers for positions and one-time contracts. I have one pupil who is trying to learn the ropes, one who is coming back into the fold hopefully, and a part time ringer at my disposal.

What next? The plan is to work contracts and grow a small team so that I can transition slowly to becoming a product based company, instead of a contracing based company. This is a common plan. So far, it is not working for me. I don’t have time to work on my products because I am always chasing that next big job. I have worked everyday since Jan 6th. I will work everyday for at least another two weeks. I largely stopped bidding contracts on (the major source of work for my little one man company) on January 1st, because I already had too much work. Even now I am behind on some projects that I must catch up on. I have six concurrent projects going, several of which are quite large. I even have one for equity stake in the resulting company with a decent business partner.

I am purposefully keeping this blog anonymous (as much as possible) so that I can talk about money. I don’t really want competitors, potential customers and just any random Joe being able to connect my money with me. This anonymity gives me the chance to really put it all out there. Thanks for understanding.