Bootstrap’d Update01:40:43
Jun0
So, it has been over a week since my last update on what is/was supposed to be a daily log of my goings-on. Clearly my strategy needs to be re-thought.
There are a couple of factors that play into this situation:
- I have been busy doing stuff.
- Writing takes a lot of time and energy out of me.
The good news is, I have been busy working; both on freelance projects and on my own projects. I usually end my work days late at night (or very early in the morning), at which point I can no longer think clearly and the thought of writing a summary of the day is furthest from my mind. The bad news is, I don’t write many posts because of this.
Quite honestly, in the last week I have been focusing my time on development of products and not so much on the business-administration side of things. It would be pretty boring to write (and for you to read) about “I wrote a bunch of code today. The End.” Nothing really significant happened, and so I decided not to report on “making license plates” (a Cryptonomicon reference meaning the basic activities needed to keep a business going).
The process of writing takes a great deal of time and energy from me. I know I will never win a Pulitzer for my writing, but I do take great pride in what I do write. I like to proof-read every post at least twice, checking for spelling and grammar errors. Nothing bothers me more than reading articles (read: blog posts) online that contain easy mistakes, so I try not to do the same. I can sit and write code for hours and hours and days and days, but when it comes to prose I am good for about an hour before I feel drained.
So, instead this blog may become more of a weekly summary with major business-related posts in between… or it could be lots of smaller posts that come more frequently. I am still trying to decide, but I am deciding right now that I am not going to fool myself (or you!) into thinking that this will continue to be updated daily (at least in the near future). I’d rather concentrate on doing what I love (coding and product development) than continue to feel guilty about not writing the previous night’s post.
Ok, I feel better for having written that. Thanks for reading along. I’m definitely not going away, just trying to improve the overall quality of the content here.
Popularity: 35% [?]
Day 12 – TweetGrid Fights For Its Life20:30:29
Jun5
Editor’s Note: Day 12 was Friday, June 12, 2009.
After a very productive previous day, I decided to sleep in just a little bit and then keep the momentum of my progress going. Unfortunately that plan went out the window the second I woke up. I awoke to messages in my inbox and on Twitter asking me “Why is TweetGrid down?” and “When do you plan to bring it back?”
TweetGrid has had some hosting issues before; it would be down for a few minutes or so and then things would go back to normal. About six weeks ago I got a phone call from GoDaddy saying that TweetGrid was using too many resources on its Shared Hosting server and it would be moved to its own server for one month while I was supposed to figure out how to fix it. If the problem was not solved by then, my account would be suspended. Well, that’s great, but they didn’t tell me what the actual problem was, much less how to fix it. This left me utterly confused.
Some stats:
- TweetGrid has about a total of 24 MB of source code and images that comprise the entire site. I am allotted something like 150 GB of space on a Shared Hosting account, so I am using 0.016% of my quota. So, that isn’t the problem.
- My Shared Hosting account is allotted 1.5 TB (1,500 GB) of bandwidth usage each month. I have never even reached 50% bandwidth usage in any given month. So, that isn’t the problem.
What’s going on then? After some prodding I was able to learn that for some reason TweetGrid was using 3 GB of RAM on the server and using a “disproportionately high” percentage of the server CPU cycles.
There really was nothing I could do to change anything about the situation (except for moving the site to another host; which can be an expensive and time intensive process). The site had been running fine for over 6 months without incident. Growth was steady, but it wasn’t exponential. What was going on?
A month passed, and the site continued to run normally. I thought things had sorted themselves out and I had averted a crisis. Then about two weeks ago I get another phone call. The problem had not gone away, and it was time for me to either upgrade my account to a dedicated server (very very expensive) or remove TweetGrid from my account. After reminding them of my disk usage and bandwidth stats, I argued that getting a dedicated server would be overkill, and that I couldn’t afford it. They got back to me and asked if I would mind trying their new Grid Hosting offering. The normal price is something like $19.99 per month (still about 4x more than I was paying for my Shared Hosting plan, but much less than a dedicated server), but while Grid Hosting is in Beta it would only be $4.99 per month. That sounded like a good deal to me, so I said sure let’s try that.
That night they migrated the site over to their Grid Hosting servers. I really have no idea how their Grid Server implementation works, but I was told that I would have 100% of the grid CPU cycles (which seemed like a non-sequitur to me), and I wouldn’t have to worry about excessive CPU cycle usage anymore. TweetGrid + GoDaddy Grid. Sounded like a perfect match. I logged into the administrative panel and saw that there were, in fact, several nodes running the site. This still didn’t exactly explain how it all works, but at least there was an actual grid I could look at.
Flash forward to Friday. TweetGrid was down. And it stayed down. I logged into the administrative panel at GoDaddy, and all of the nodes I had seen before had vanished. Not good. I called support.
“Hello, I’d like to know if you have any information about the state of my Grid Hosting account?”
“One moment please, let me call the Grid department and see what I can find…” Insert hold music for about 5 minutes. “Hello, sir. I was told that there is a known issue with the Grid and that they are working on it.”
“Any other details? ETA on a fix?”
“No, sir. It will be back as soon as possible.”
“Ok, thank you.”
At this point I was basically at the end of my rope with GoDaddy’s hosting of TweetGrid. Having played around with several server instances on the Rackspace Cloud, I decided to just host TweetGrid there and maintain the server administration myself. I spun up a server and quickly installed a LAMP stack on it. I transferred all of TweetGrid’s files to the new server from my computer (I have a complete mirror backup of the site at all times) and started testing the new site to make sure everything worked.
When I was satisfied with the new server’s functionality I was prepared to update the DNS entry to point all of the traffic there. As soon as I was about to hit the button I started seeing messages that “TweetGrid is back!” Sure enough, the site was alive again on the GoDaddy servers. I held off updating the DNS entry to see if things would actually settle down and become stable again. Hosting TweetGrid in the Rackspace Cloud would cost about $22.00 per month, but at least I would have total control over everything. I was happy to see the site come back to life, but I left the new server running as a hot stand-by just in case. That was a smart decision.
Twenty minutes later GoDaddy’s servers were down again. My head exploded. I clicked the “Update DNS” button so hard I think I broke my mouse. Seconds later I started seeing traffic pour into the new server and the site was live once again.
That was all well and good, but the most frustrating part came several minutes later when I had the ultimate epiphany.
The TweetGrid Widget gets several million pageviews per month. Yes, millions. I still cannot believe this number, but I have to admit it’s pretty cool to see it pop up around the internet. The widget is just one 20KB javascript file, but it gets served over, and over, and over, and over… Since I host the file on TweetGrid’s server itself, I get the traffic and bandwidth hit from all of the other sites using it on their pages. This has pros and cons, but the biggest advantage of the other sites letting me host it is that they get upgrades to the widget automatically. I don’t have to tell anybody how to upgrade their widget or tell them to install the newest version. I just update the code on my site, and they get the newest version without having to think about it.
When it first launched, I hosted TweetGrid on my home computer. I had been hosting websites long enough to know that if you are going to have a high traffic website that only serves a few files per page load, you are better off disabling HTTP KeepAlives and only responding to requests with the HTTP/1.0 protocol instead of HTTP/1.1. This means that when somebody loads a file (a page, an image, or the widget), the server closes the connection immediately (HTTP/1.0) instead of leaving the connection open to listen for more requests (HTTP/1.1). This can have a HUGE impact on web server and site performance. If you have a file that gets served over and over and over (the widget in my case), it’s better to turn KeepAlives off to avoid tying up precious server resources that could be better spent serving other requests.
When I setup my new cloud server to host TweetGrid, I disabled KeepAlives instinctively before flipping the switch. When traffic started to come in, I was very curious to see how much RAM would actually be eaten up by the amount of traffic as well as how much CPU was being used by the server, especially to compare with the GoDaddy stats.
The numbers were alarming:
- Total amount of RAM used by the webserver processes: 77 MB
- Total CPU utilization: < 1% (meaning, the CPU is over 99% idle).
I could actually host the site on a 256 MB computer with a 500MHz processor with no problem if I wanted.
That’s when it dawned on me. GoDaddy must be using KeepAlives. I never had a reason to know or care before now, so I never really checked. Everything had worked and it didn’t matter. Now I had to find out.
Sure enough, I did a raw socket connection to another one of my GoDaddy hosted sites. The response header came back with “HTTP/1.1″ in it. Then I tried to force a HTTP/1.0 connection by specifying it explicitly in the GET request. The response still came back “HTTP/1.1″. That must have been the problem. With the frequency of connection requests for the widget, it must have been chewing up connection resources on their server and thus creating a memory and CPU hog on the shared server. I’m still not sure what the issue with their Grid was, but since it is in Beta I’ll chalk it up to early stage technical issues.
I am going to see if there is a way to ask them to put me back on a shared server with KeepAlives disabled (since that is not an option anywhere on their hosting administration panel), but I am not very optimistic about their response.
Long story short, I basically burned all of Friday battling with this. However, this story has a silver lining. I was encouraged by the fact that it is pretty darn easy to get a cloud server up and running and that my Linux admin chops are good enough to get it done. This will most certainly come in handy when I am getting ready to launch other sites with Rackspace that will most definitely need more than 77 MB of RAM and 1% CPU to run the backend of the sites.
TweetGrid has been running in the RackSpace Cloud since Friday with no issues. I am not sure if it will live there permanently as that is a business cost/revenue decision I will have to make. For now, I am just happy to have the stability and happy users once again.
Popularity: 94% [?]
Day 11 – Working at Panera Bread19:02:01
Jun0
Editor’s Note: Day 11 was Thursday, June 11, 2009.
Thursday marked the official start of my freelance gig after several days of phone conferences. The schedule is tight but won’t require my full-time attention to complete by the deadline. I am thinking of how to handle the daily scheduling. I will try to dedicate the morning hours to this task and then work the afternoons/evenings on my personal projects. If that needs to change, then it will.
I spent the afternoon with my web designer (Daniel) at a Panera Bread location between our homes (and had a very nice lunch, to boot). The wifi wasn’t incredible, but it was good enough to allow us to work there for quite a while (until our laptop batteries ran out). Since I couldn’t do any heavy duty coding while I was there, I took the time to research some of the technologies I am using and learn more about them. Since Daniel was doing graphics design on his laptop the wifi issue was not much of a concern to him. After I described the direction of my first product, he set about creating some concept designs and got the creative juices flowing. The initial draft is pretty cool, and I can’t wait to see how it matures.
We both learned something during our stay at Panera. They have a daily schedule wherein a server will wander around the store with free samples of different items on the menu. This happens every 30 minutes or so. During the course of our work session, we sampled Strawberry Smoothie, Frozen Lemonade, and Frozen Mocha beverages. They were all very good, but the Mocha was so good I was enticed to actually go buy one. I shelled out an extra $4.00 for something I didn’t even know I wanted. That was a marketing win for Panera. This little experience was a good reminder for me that free samples and free trial periods really do work in the real world. As I go about thinking how I will market my products and how to introduce them to the public, I need to keep an open mind about free trials… something about which I’ve been a bit skeptical.
Daniel and I parted ways from Panera. I arrived home for a short break and then dinner. After that was a nearly all-night coding session using the information I had learned from my research at Panera. I stopped myself at 4 am and forced myself to go to sleep. I can easily flip my sleep schedule upside-down, something I need desperately to avoid. The code I wrote that night has been running stably, and I am about to add another few layers on top of it tonight and tomorrow.
All in all, it was about a 16 hour work day; the first of many to come, I’m sure. That would not have been so bad unless I had known what was to come Friday morning… You’ll have to read the Day 12 summary for that epic tale.
Popularity: 53% [?]
Day 10: Search for a UPS23:55:41
Jun1
I left off yesterday declaring that I would go out and buy a UPS battery backup first thing this morning. What I soon learned was that I didn’t know anything about UPSs (UPSes? UPS’s?). I also learned that retail clerks don’t know anything about them either. I came home and decided my time was better spent researching UPSs online and probably ordering one from NewEgg. I’ve narrowed my choices down between two models, but I haven’t pulled the trigger yet. The prices are definitely cheaper online, and NewEgg’s free shipping would be worth the wait (forecast is for sunny skies for the next several days).
This next topic is goofy, but I think it’s cool. I’ll tie it in with the whole starting-a-company thing in a minute. For my birthday, my parents gave me a series of 5 bowling lessons with the pro at my local lanes. I can’t really explain why, but I love bowling. It probably has to do with all the physics involved, and being a nerd, it was one of the few sports I was pretty good at as a kid. I called the pro today and scheduled my first lesson for next Monday. He said the lessons are usually scheduled two weeks apart and that I should practice between lessons. Makes sense to me.
How does this relate to business stuff? One word: distraction. For the last 10 days I have done nothing but eat, sleep, drink, and breath this new company. That is, of course, to be expected. However, if I don’t come up for air once in a while I will surely drown in it. Having these bowling lessons, and then taking the time out between them to practice a bit, will provide a healthy break from the work. Sometimes you need to let your brain switch gears and let your subconscious focus on things for a while. Ever wake up in the middle of the night remembering the name of the band that sang that song on the radio earlier in the day? That’s your subconscious sorting things out while your brain rests. I certainly have plenty to think about with this company, and I fully trust my subconscious mind to figure out the really hard stuff.
So, long story short, I’m excited about the lessons. If you need me next Monday at 3pm, I’ll be unavailable.
I played with some new server technologies for web apps today (the tech isn’t new itself, but it was the first time I had learned about them). This took the bulk of my day. I left several things on my ToDo list undone today, and this was the reason why. I felt it was worth it, though. It prompted me to spin up another VM image to mirror my cloud server so I can do local testing before pushing things into production.
That’s about it for today. I’m calling it quits earlier than normal tonight becuase I’ve started to stay up too late working on things. If I had my druthers, I would sleep all day and work at night. Alas, that won’t work when I have to interact with other people. Looking forward to meeting with my web designer tomorrow.
Popularity: 57% [?]
Day 9: Coming Along Nicely23:55:02
Jun1
Today was, as predicted, a full day. Woke up for my morning client call which gave the official go-ahead on the freelancing project. We exchanged contracts and signatures, and I will officially begin work for that project on Thursday. It has a tight (but manageable) schedule. It should be fun to work on something with a quick turn around time.
As noted yesterday, I got my Small Business American Express card in the mail and ready for use (more about my planned first purchase in a moment). The entire process for the AmEx went something like this:
I applied online in about 15 minutes. This was made smoother by the fact that I have a personal account with AmEx already. At the end of the online application I was told to call an 800 number to get a final decision. I called up, was on hold for about 2 minutes, talked to a representative who cheerfully exclaimed “You’re approved!” and said I would have my card in the mail ASAP. After waiting four days I had the card in my hot little hand.
I also applied for a Visa card last week (for use exclusively when AmEx is not accepted). I also did the application online with a bank of which I am already a member and have a personal credit card. Having not heard any updates from the bank about my application, I decided to call and ask about the application status. After going through phone menu purgatory, I managed to speak to a Live Person. The Live Person (who was actually quite pleasant) informed me that she accessed the application and that, “No decision has been reached yet.” (I submitted the app 6 days ago) Silence. I thought she might volunteer more information, but apparently it was my turn to talk.
“When will you have a decision?”
“In about 10 to 14 business days.”
“Then will they notify me?”
“Yes, then if you are approved we will send you a letter in the mail.”
“Postal mail?”
“Yes.”
So, they will send me a “letter” if I am approved. Does that mean it will contain the card? Or will it say “Congrats! Your card will arrive in 10 to 14 business days!” This is a tad frustrating. Just let this be a lesson that you may have to deal with juggling personal and business credit cards for a while. I can deal with it, but sheesh!
I also looked into getting some business cards printed. I found a lot of resources and good info. I’ll write an entire post about the different options when I finally order some. Right now I am leaning toward getting some nice Moo Cards – http://moo.com/ – and a big stack of regular, plain cards to hand out depending on the person/event/etc.
I received an email today that Mosso, er The Rackspace Cloud, would now be rebranding their name from Mosso, er The Rackspace Cloud, to The Rackspace Cloud. Also, they are changing their website from http://mosso.com/ to http://rackspacecloud.com/ effective next week. The email also politely asked if we (the current users) would mind changing the links from http://mosso.com/ to http://therackspacecloud.com/ on our websites, blogs, etc… So, I have done my part of the deal. I have changed all references of Mosso to The Rackspace Cloud in all previous posts (excpet ToDo lists). I’m sure they will be pleased.
As for actually working on the product today, I managed to make a lot of progress – probably more than I have on any other day. I am quite happy with the way things are coming along. I was getting a bit discouraged by the aforeposted bug, but making this much progress in one shot makes me want to continue further and faster. The mini-demo I have created to show my web-designer is pretty cool (sorry, you can’t see it yet). I have all day tomorrow to develop it further before our meeting on Thursday.
While I was taking my break tonight, there was a massive thunderstorm in our area. The power went out. I ran upstairs to my office to bring all of my servers back up. I brought up my main test server and got everything running again and made sure the demo still worked. I started tweaking a few lines of code. Then the power went out again. Then I brought everything up again. Lucikly the storm started to pass at this point. This is a very traumatic experience when it happens. However, I did take advantage of the situation to plug my new Kill-A-Watt into the wall where all of my surge protectors converge so I can actually see how much power is being drawn from my various machines. Right now I have 3 (of many) computers running, and they are drawing about 300 watts of power. That’s about 100 watts per computer, which isn’t bad considering two of them have older inefficient power supplies.
You may be asking yourself, why doesn’t this idiot have a UPS in his office?? (No, not the shipping company, an Uninterruptible Power Supply, also known as a battery backup.) That’s a good question, and I am vowing to go out and buy one first thing tomorrow morning. They are quite expensive for the amount of power I would need to last through some electric-grid downtime, and frankly having one wasn’t very critical before. But, now the game has changed, and having one has all the sudden become extremely critical. Plus, I can now write it off as a business expense. This shall be my first real business purchase!
I think I will work a bit more on the code before I go to bed.
Popularity: 61% [?]
Day 8: Something Witty Goes Here23:55:37
Jun0
You’ll notice that each of my summary posts is miraculously posted at 23:55 each night. Actually, it’s usually like 3 or 4 AM when I write these summaries, but to make the post align with the correct date, I backdate it ever so slightly.
Speaking of dates… what happened to Day 6 and Day 7? Oh, they happened. They just happened to be the weekend. I fully expect to be working on the weekends, but I have made the decision that I will be taking a break from posting on the weekends. If something big happens I will write about it, but usually I will just be coding (which was the case for this past weekend).
Today I finally got in contact with my underwriter for the merchant account. He verified my account information and clicked the approved button to make everything official. Now I just have to go through PCI compliance to actually start accepting credit cards on websites. But, seeing as I do not yet have a product, I’m in no huge rush to do all that. What is PCI compliance, you ask? Have no fear. In my “Merchant Account Posts To End All Posts” post, I’ll give all the fun little details.
I spent a good hour on the phone with a very nice fellow by the name of Sean from TweetPhoto. He emailed me last week asking if I was considering adding any photo posting cabailities to TweetGrid, and if I would consider adding TweetPhoto as the primary site. We setup a call for today to talk about some of the details. It was also a good conversation because TweetPhoto just launched as a business entity only a few short weeks ago, and it was a good opportunity to ask him about building a business on top of Twitter, etc, etc. I gained a few good nuggets of information which I will tuck away for later use (more on that much later, I’m sure). I am planning to add TweetPhoto support to TweetGrid by the end of the week, time permitting. It shouldn’t be too hard; their API is fairly straight forward, and I’ve written some previous code which deals with image file uploading. I’m hoping it will take an hour or so to make it happen (famous last words).
For the last week I have been grappling with an interesting bug in one part of the code for my first product. This bug is particularly frustrating because it centers around network coding and internet protocols. Now, I went to school to learn how to think about such problems and specialized in networking as part of my computer science degree. I even have a Cisco Certification which states that I am Good At Networking. Right now I just feel like an idiot. I have a workaround in place, but I still feel like I have not solved the problem. I was heartened to find out that I was not the only person having this problem, but I still feel like it should be solvable. The problem, now, is that I have spent the last three whole days trying to get to the bottom of it to the detriment of working on any other code. I think I am going to have to learn that there are some times when having a workaround is “Good Enough” and I can come back to it later if it really needs fixing.
Tomorrow morning I have a call with one of my freelancing clients which should give me the official go-ahead for the project. At least this will force me to get my mind off of the current problem and work on something a little unrelated.
I also have a meeting scheduled with my web designer on Thursday. I want to have a simple working demo ready to show him by the time we meet; this will force me to get the other sections of my code built up to create a whole system that actually works. So, I can no longer fester over this one small (yet unbelievably annoying) bug.
In the next couple of days I am planning on writing out some goals with concrete deadlines. Having a daily ToDo list is nice for day-to-day things, but I need to know where I am heading and make sure I can get there on time. I don’t need to, oh, for example, waste three days on a bug that isn’t critical. I am not yet sure if I will post these goals/deadlines publicly or not. I still need to think that over.
I now officially have a corporate credit card (with a whopping credit line of $3,000 (yes, that was sarcastic)). Also, apparently the intro APR period is only 6 months and not 12 as the offer stated (bait and switch?). I have never carried a balance on a credit card, and I don’t intend to start. But, I am willing to carry a small balance if the APR is 0% to get things started in the beginning. Right now I don’t have any purchases that I need to run out and make (thankfully), but I will probably start moving over the charges for services I’ve already started (like Freckle and Rackspace Cloud) onto this new card and off of my personal card.
Tomorrow should be a busy day. Oh look, it’s only 23:55 so I can get plenty of sleep!
Popularity: 56% [?]
Day 5 – Still Feeling Good About This18:37:42
Jun7
Thus ends my first 5-day week of being Chief Cook and Bottle Washer of my nascent company. I heartily expect to be working all sorts of odd hours and especially weekends as things move forward, but I think I’ll declare this week over right now and go celebrate with a humble pizza.
Today went pretty smoothly except for a few minor bumps. My GoGrid server has been up and down like the stock market during the last two months, and I’ve just about had it. I fully expect to be migrating to my Rackspace Cloud server early next week (or over the weekend) to avoid this mess. I had a dialog with a GoGrid employee about the situation, and he is going to find out if my server can be moved to a more reliable rack or something. As I await those details I will be creating my backup server in case I just have to cut the cord.
I had a very constructive conversation with Twitter today about the problems I was seeing yesterday with parts of the API. I really appreciate the time they took to talk with me directly, answer my questions, and consider my feedback. Using this information I was able to continue working on my product while they went back to check on a few things themselves.
I ran a few errands in the afternoon and noticed that my car still had a full tank of gas after filling up a week ago. I guess one major upside to working from home most of the time is that I will use little gas.
About a month ago, I received an email from the Consumer Electronics Association – http://ce.org/ – inviting me to present TweetGrid in a booth during CES 2010 in January. I was very excited at this prospect. I have always wanted to attend CES, and I have never been to Las Vegas. Now I was being invited to be part of CES? This was too good to be true. Well, there was a slight catch: it will cost me a little upwards of $5,000 to get a booth, plus travel and lodging. They will take a down payment of 60% to reserve a booth, with the rest payable later in the year. But, that’s still around $3,000 I would need to cough up to get my foot in the door. I have been exchanging emails with them over the last few weeks getting more details and asking about financing options. I talked with them a little more today about my options. I think that this would be a great opportunity to showcase my company (if it is still in existence in January), and really $5,000 would not be a huge sum of money compared to the amount of attention (and potential press) I would get out of it. The problem, however, is coming up with the funds right now. If I don’t hand over some cash soon the opportunity will vanish. I am still grappling with this. Now I am thinking that since my new business credit card(s) come with an introductory 0% APR I could charge it there and pay it off before the normal APR kicks in. I just have to wait for the cards to arrive, which should be early next week. More on this as it develops.
So far I am really enjoying this; both the actual work and writing about it. Thanks for reading along! Let me know if there is any way for me to make this more interesting or entertaining for you.
Popularity: 100% [?]
Day 4 – Finally Writing Some Code23:55:55
Jun1
I didn’t quite finish all of my ToDo list items today. I know that I can’t expect to finish my list everyday, and that very often I will have items that will necessarily take longer than one day to complete, but I can’t help but feel a little pang of guilt for not getting everything finished.
Some things I have no control over completing. For example, my merchant account underwriter apparently does not answer his phone. Ever. I got an email saying my gateway was activated, and I went through the setup process, so I’m not sure what else needs to happen. I will continue to call him until I get a live person, because now I’m just confused more than anything.
I was also notified that the merchant fees will now be billed effectively immediately. So, the $100 sitting in my business account will vanish soon if I don’t infuse it with some cash. My plan is to do the official “Bootstrap” in the next week or so where I actually give myself the funding I need to get off the ground. I have yet to decide the actual amount with which I will start, but I will post when the time comes.
In other news, I did some scoping for one of my freelance projects for about an hour or so. Then I finally got to work on the code for one of my first real products. It turned out to be a bit frustrating because I am working on one of the Twitter related products. At this point I feel I should state my piece about developing on top of Twitter.
In the event that any employees of Twitter should happen upon this blog and read this, I just want to preface it with this: I have been developing applications on top of the Twitter API for over two years, so I obviously enjoy it, but I am going to be honest with my opinions. I have personally met several employees at Twitter, especially the API team, so please don’t take this personally.
Developing to the Twitter API is like shooting a moving target with a Nerf gun. Twitter could change their product, service, or API at any time, for any reason, and be well within their rights. The developers that choose to build something on top of their service are at their complete mercy, and really have no right to complain if something changes (though lots of them do anyway). Using Twitter’s API is completely free, so there is no contract, SLA, or TOS between Twitter and the developer community.
Dozens (no, hundreds (no, thousands!)) of Twitter applications have sprung up all over the internet. All of them are slightly different, and most of them add some feature(s) on top of Twitter that Twitter’s site itself does not provide. When the developer community senses a feature that the user community desires (but Twitter itself does not have), the developers move quickly to cater to the users in order to attract traffic to their apps.
The danger (of which most developers are keenly aware) is that Twitter might one day decide to implement this whiz-bang new feature themselves, thus eliminating the need to use another application to do the same thing. Why would I (as a user) want to use two sites to do something when I could do it on one?
The API itself is ever changing, usually in a positive direction. There have been a couple uproars along the way, but everyone moved on whether they wanted to or not. Those that adapted came out on top.
This is further complicated by the fact that Twitter currently does not have a concrete business model. If somebody (hopefully me!) creates a Twitter application or service that makes a ton of money, what’s to prevent Twitter from implementing it themselves and putting me out of business? Maybe they would be benevolent and acquire or license the technology, but there’s always the chance that they won’t.
I’ve heard a rumor that the API team is working on a Developer Bill of Rights, which should spawn a very interesting discussion on the developer mailing list.
So, why was today’s coding frustrating? Twitter is still struggling with uptime and growth issues (which is a “good problem” for them, but somewhat of a pain for developers). I guess I was testing my code during one of these “brown out” periods when the API can be a little unreliable. This made it hard to determine whether my code was actually working or not. Eventually I was able to get enough information to be satisfied for today, but it just felt slow-going.
The future destiny of Twitter and 3rd party applications built on their API is yet to be determined, but I’m hoping to enjoy the ride while it lasts and hopefully profit from it. If things do go south for some reason, I still have my other ideas in the hopper.
Popularity: 69% [?]
Day 3 – Phone Tag, You’re It!23:55:17
Jun0
While wrapping up my daily summary post yesterday, I optimistically stated:
No calls scheduled for tomorrow, and not so many administrative things to take care of either…
Haha, wrong!
Turns out that I had more calls today than the previous two days combined. I am just going to accept the fact that I will be making a bunch of phone calls everyday and move on. At my previous job we lived and died by email and IM. I had a phone in my cubicle, but I used it maybe 3 times in as many years. I am not one to talk on the phone much, especially not for chit-chat. I think of the phone as a way to exchange information. Luckily, phone calls for business related topics are chock full of “get to the point” conversations, so I’m not too worried about having to do this.
One call was for another potential freelance gig (this brings me up to 3, which I think will be my limit so I can actually have time to focus on my official projects). One call was to my merchant account underwriter to confirm creation of the account (he didn’t answer, so I left a voicemail… he hasn’t called back). Three calls were with GoDaddy customer service about TweetGrid.com taking up too much CPU time on the shared server and that I would need to move to a dedicated or grid-based server. Luckily we were able to work something out and it should be resolved in the next 48 hours, but time will tell.
When I wasn’t burning through my cell phone minutes, I did manage to hack around with some code. Whenever I have an idea for an application I break it down into its fundamental functionalities and write little proof-of-concept applications to make sure I know what I’m doing. I learned a couple new tricks today which will come in handy for several of my projects, so that was very productive indeed.
I decided to meet up with a few friends around 10pm at a sports bar downtown to take a break and do some socializing. One thing I am still getting used to is the sheer social isolation to which I am subjecting myself by working from home. I am pretty introverted by nature, and I don’t foresee this being a big problem. That said, I do like hanging out with my friends when the opportunity arises.
By the way, most people have misconceptions about the meaning and difference between introverts and extroverts. I would encourage everyone to read this excellent post about introverts. I am much more socially outgoing that I used to be, but I still draw my energy from having time to myself.
While my credit card gateway account has been approved and activated, I am far from being able to actually accept credit card payments online. I plan to devote an entire post (or perhaps a small series) about the whole process, so please stay tuned for that.
So far I have been overwhelmed by the number of comments I have received. Some have been good questions, some have been great info on topics that I needed to research, some have been words of encouragement. Thank you! I hope I am doing a satisfactory job of keeping your attention and writing things of interest.
Popularity: 54% [?]
Day 2 – More Administrivia11:55:49
Jun2
The astute among you will note that my one uncompleted task from today’s ToDo list was “Actually write some code.” Apparently I had underestimated the amount of “sign up for this,” “apply for that”-type stuff I would need to do to get started.
I won’t give a play by play of the entire day, instead just a few quick notes.
I opened a couple business credit cards so that I can keep my personal and business finances completely separate (well, until I start paying myself a salary at least). I am not sure how I will transfer over business expenses to my company’s books for things that I have already charged to my personal cards while waiting for the company cards to arrive. For that I will seek an knowledgeable CPA. Applying for business credit cards is something for which you must have an EIN (depending on the issuing bank), further reinforcing Lesson 1 from yesterday.
Since I will be doing some freelancing work to start out, I decided to open an account on Let’s Freckle – http://letsfreckle.com/ – which aims to keep the process of timetracking as dead simple (and fun, as they claim) as possible. I really like their data entry system. Everything is a text field. No drop down boxes or radio buttons or selections. Just type in the stuff, hit tab, repeat. Dead simple. Their reporting graphs are pretty slick as well. I look forward to keeping up with my time using this tool. For $12/month for a 1-user account, it already seems worth it. In fact, I just logged an hour of work and didn’t loose my train of thought. Brilliant.
Some (or all) of my products will be hosted in the cloud. That may seem like an overused buzzword (…it is), but I can’t think of a better way to say it without sounding like I’m trying to be intentionally standoff-ish. I opened an account with GoGrid – http://gogrid.com/ – about 2 months ago to start playing with VPS (Virtual Private Server) hosting solutions. I am moderately satisfied with their service so far (lots of server reboots in 2 months seems like lousy uptime), but not satisfied enough. I will keep that account for a while, but in the mean time I have opened an account with Mosso – http://mosso.com/ The Rackspace Cloud – http://rackspacecloud.com/ (formerly Mosso) – which is Rackspace’s offering in the VPS space. It is identical to Slicehost’s technology (Rackspace acquired Slicehost), except that The Rackspace Cloud’s data center is hosted in Texas (Slicehost is in St. Louis), and the pricing scheme is a bit different than Slicehost. Why Rackspace doesn’t just choose one version and run with it I’m not sure, but it’s not my decision to make. I chose to go with The Rackspace Cloud over Slicehost because The Rackspace Cloud offers more utility-style billing whereas Slicehost has a fixed monthly billing schedule. Depending on your needs one may be better than the other, but for me The Rackspace Cloud is the way to go for now. I have not fully recreated my GoGrid setup on my Rackspace Cloud server yet; I need something to do tomorrow, right?
The two customer calls went well, and I think one might generate a bit more freelancing work soon.
All in all, another full day. No calls scheduled for tomorrow, and not so many administrative things to take care of either, so maybe I’ll get to check off that “Actually write some code” task eventually!
Popularity: 58% [?]