Apr 30, 2011

Don't Forget

Here are some resources I've been meaning to look at. When I have time, I'll take a look at them:

Meetups in the Twin Cities:

http://www.meetup.com/twin-cities-lean-startup-circle#calendar

http://www.meetup.com/Bootstrappers-Breakfast-Minneapolis

Good SEO resources:


http://www.seomoz.org/beginners-guide-to-seo

http://randfishkin.com/blog/50/what-i-learned-about-sales-but-foolishly-forgot-when-raising-vc

http://www.startuplessonslearned.com/2008/10/about-author.html

http://theleanstartup.com/

http://www.seomoz.org/blog/the-story-of-seomoz


Also don't forget:

St. Paul CoCo coworking space

Wordpress All-In-One SEO Plugin

Apr 21, 2011

Learn HTML5

Well I think it's inevitable that I'll have to learn HTML5 and CSS3 and break my old XHTML1.0 Transitional ways. I found an EXCELLENT resource online that explains everything you'd ever want to know about HTML5:

http://www.diveintohtml5.org/table-of-contents.html

Apr 16, 2011

SEO

I got a lot done in just a few hours today. First, I made some security enhancements to my database to make potential attacks against it much more difficult.

The bulk of my work centered on SEO. Rather than link building, I'm on a new project to add lots and lots of pages to my site which are optimized for very specific search terms. Patrick McKenzie has had great success with this method with his Bingo Card Creator software.

I was just able to create one such page today because much of my time was spent designing the layout. I now have a really good template to go off of, so I'd like to add more pages at the rate of about three per week.

I also started a new Adwords campaign. This campaign was specifically for keywords with very little competition that are very relevant to my site. Depending on how this goes, I have many more lists of similar keywords that I'll be trying.

The last thing to note is that I'm at the point where I really need to be tracking my conversions more closely. I'm getting traffic from Adwords, Microsoft Advertising, organic searches, and Facebook. I need a much better way to track where the sales are coming from. My next step will be to set up conversion trracking for each of these systems.

Apr 14, 2011

Focus

Last summer, this blog really helped me focus on my business. As a single founder, I don't have a boss to report to, but I still needed some accountability. Knowing that I had to update this blog every two days (a self-imposed rule) really motivated to actually get stuff done.

I launched my web app in January and am already turning a profit, not counting advertising expenses. The key to success will be perseverance over the long term. I think that three years from now, with slow and steady growth, the business will be in a really good place. Since three years will pass whether or not I decide to work on the business, it only makes sense to do it.

The school year has been very busy, allowing me to only make slow and incremental changes to the business. As long as this is done consistently, I don't see that as a problem. My FogBugz list is chock full of stuff that I want to get done this summer. I'd like to do a bit of consulting work this summer as well.

During the school year, I'll be lucky to post here every two weeks or so. This summer, though, I'm planning on regular posts again.

Dec 29, 2010

Business Ventures

I currently have two operating businesses:

bestattendance.com
This site just launched. My goal is to have 25 customers by June. This means getting five new customers per month. If my COCA is $60 or less, I'll be doing very well. Getting to this point will mean taking a loss at first, but there will be a payoff if I can get some loyal subscribers.

highschoolwebdesign.com
I'm currently selling downloadable lesson plans from this site and am seriously considering adding AdSense. AdSense could probably add $50 per month to my bottom line; this would help offset the costs of running bestattendance.com.

I have a few others in the pipeline:

The first one I can vaguely describe as a marketplace for food.

I'd like to start a juicing blog. This will motivate me to actually make juice every day with my new juicer. This might be monetizable or perhaps sellable.

Consulting might be something else I can try.

I'd like to greatly expand bestattendance.com beyond youth ministry into other market segments.

It will be a challenge finding time for all of this stuff; having the summer off will be very beneficial.

Dec 22, 2010

Launching January 1

Well, I definitely made some progress today. I fixed two bugs, one of which was due to an incredibly stupid mistake with PDO, and it was difficult to track down because it was intermittent. Got it though. I do think that the app could benefit from some more testing. I’m considering spending the extra $40 or so it would cost for 8 hours of functional testing. I think it would be worth it.

I do have the dashboard done, and everything in the app is generally production ready.

Today I spent some time researching tax issues for my business. I have the estimated and self employment tax all figured out. I got a state tax ID number so that I can collect sales taxes to subscriptions delivered to Minnesota customers. I probably won’t get any; my sales tax liability is extremely low, but I have the tax ID number now just in case I do get accounts from Minnesota.

Yesterday I was approved for a merchant account. My authorize.net account is all set up, and I just have to hook it up to my Chargify service. I have a checklist of things I need to complete before I launch, but it’s getting shorter. I’ve decided to finish the checklist before I start work on any new features. I won’t start advertising or collecting orders until after the new year. Partially this is to make the tax reporting and accounting easier; partially, it’s because sales in December for software are usually quite terrible.

Dec 5, 2010

Programming Is My Hockey

I love watching hockey games because it’s a chance to watch experts be awesome at something they love doing. The players don’t even have to think about skating; their legs just move naturally. Forward, backward, sideways, turnarounds, instant stops – their feet just naturally carry them. They are so comfortable. When they run out on the ice, it’s like, “I’ve done this a million times before, let’s go do it again, this is nothing.” As they skate around, they make these minor adjustments to their gear, and they stretch out, and they skate around, until everything is comfortable and just right.

And they love what they’re doing. They’re having fun and they’re completely focused on the game. This is a skill that took them a lifetime to master. They’re good at it and they know it. It’s their thing.

So yeah that’s sort of what programming is like for me.

Dec 2, 2010

Feature Complete

I have all of the features coded that I planned for my Phase 1 release, otherwise known as my MVP (Minimum Viable Product). The feature list is about fifty lines long, but here are the highlights:
- Members can sign themselves in at the computer
- Both events and members can be tied to multiple groups
- Five different attendance report views allow users to filter by date, group, and event type
- Private and public event calendar
- Email particular members, particular groups, or all members attending a particular event.
- Print sign-in forms, membership rosters, and reports from your browser.
- Cool, slick design and highly secure

There's a ton of stuff I'd still love to add:
- Recurring events
- Track families
- Track fines and fees
- Add one more layer of grouping for members (this is needed for stage managers)
- Online event registration
- Prearranged absences
- Bulk text messaging
- Event integration with Facebook and Google Calendar
- File sharing
- Documents tied to events (ex: agendas, minutes, performance report, rehearsal report)
- Print membership directories (with addresses) and mailing labels
- Plus a host of usability enhancements

But really, the bulk of the value people will get from this program is there. I started my first usability tests a month ago and am ready to start the second round while I fix some known bugs.

Next week I'll be opening a bank account and setting up my online payment gateway.

So in other words I'm getting very close to launching!

I think I'll postpone launching until after the holidays - my marketing campaign will be more effective then - and it will give me some time to maybe bang out a few more features on the list above.

Nov 18, 2010

Email email go away

My web host smartly disables php's fsockopen function, but this makes the Swiftmailer library I just downloaded not work. I might have to connect to my email provider with curl instead. Such joy, trying to navigate through other people's design decisions.

Nov 17, 2010

Email Buggy Joy!

In case you haven’t heard, sending email from web apps is a real pain. PHP’s mail() function is terrible for large numbers of emails because it opens a new SMTP connection for each message. My web host limits outgoing SMTP messages to 100 per hour. If one organization using my system has 50 members, two of their emails would already be exceeding the limit. Sendmail seemed like a good solution, but I found out that my web host even limits these to 200 per hour. I calculated that if I throttled the emails, I could send one email every 16 seconds (4800 per day) and still stay under the limit. But then people’s emails would be delayed, possibly by hours at peak activity times. Gmail also sets limits on outgoing SMTP messages, so I can’t use my account hosted at Google Apps, either.

Beyond the outgoing message limits, deliverability is a problem. You have to set up DKIM and SPF keys in your DNS record, and even then, some email providers will still block you.

I’ve spent the last two days research third party solutions. I’ve looked at basically everything out there: Postmark, Sendgrid, CrtiSend, Socket Labs, and others. I’m close to reaching a decision as to who I’ll go with. I spent a full day setting up my app to be used with Postmark only to figure out that their service will not meet all of my requirements. I’m really looking forward to getting past this bottleneck.

This afternoon I’m taking care of some business related items while I wait for my accounts to be set up with two of those email providers. I filed business name papers with the Secretary of State, and I’m going through about nine months of accounting backlog. Tomorrow, hopefully, I’ll be able to write some code again!

Nov 9, 2010

Should you check the user agent?

Checking the user agent on incoming requests to prevent session hijacking is sort of like putting scotch tape on your door to keep intruders out of your house.

But, it is one little extra barrier that an attacker will have to bypass, so I put it in my code. Then I was playing around on my site in IE8 one day, and just for fun I hit the Compatibility View button. And it broke everything.

Clicking this button toggles the user agent between IE7 and IE8 and thus breaks the whole thing. To make sure the site still works, I've taken the user agent checking completely out of the application.

This still won't allow anyone to hijack a session, because all traffic, including cookies, is sent only over SSL. There are a number of other security features built in, so the scotch tape can come off.

Nov 1, 2010

Beta Is Imminent

I have enough features coded to start beta testing. The software is still not complete; there are a few holes in the functionality, and there are a few known bugs, but I’d like to get a system up and running on the live web server at Dreamhost so I can iron out any deployment issues far in advance of the launch date.
Here are a few particular things I’ll be watching for:

Problems with SSL. I’m currently hosting jQuery and jQueryUI on Google, and those requests are non-encrypted, so I’m curious to see if that will work, or if I’d be better hosting jQuery locally.

PHP Configurations. I’m setting PHP configurations directly in my scripts; I’ll look into the possibility of installing PHP from binaries and configuring those settings directly in php.ini.

Performance. There are three concerns here. First, the wire transfer speed (what a technical term). I know that there are more HTTP requests on my pages than there needs to be. Combining CSS and JS, as well as using image sprites, will reduce the number of concurrent requests, but I haven’t done these things yet. Some pages are very JavaScript intensive and I’m interested in the client performance on older machines. Lastly, I have some rather complex SQL queries, and I’d like to see how the database performs when n gets big.

Usability. How easily will people be able to figure out how to use the software to perform specific tasks?

Unknown Bugs. I’m mainly looking for logic errors here. For example, today I just discovered that members cannot change their own passwords because they don’t have setSecurityRole permission.

File permissions. I want to make sure that users only have access to the files they need access to. On my development machine, all folders are writable, but that won’t be the case in production.

I just set up the SSL certificate on my server today. I anticipate launching beta by Wednesday!

I'd like to introduce my brother, the eminent psychologist, Niles Crane.

Frasier was eminent when my eminence was merely imminent.

FogBugz World Tour

Last Thursday, I had a chance to see Joel Spolsky at his Minneapolis stop on the FogBugz World Tour. I’ve been following Joel’s blog and businesses for the last ten years, and it was cool to see him speak in person. He was in town to pitch the latest version of his FogBugz and Kiln software.

I’ve been using FogBugz as a bug tracking and project management tool for the last six months, and I really like it. Luckily, I can get a free license as a one-person startup. Past that, it gets quite expensive. That shouldn’t be a problem, however, as I don’t ever anticipate adding employees.

I’ve been considering using distributed version control for a while. For development teams, there are no questions about its superiority to traditional version control systems. But I haven’t found a real need for any type of VCS yet. I keep daily backups of all of my projects, so I can go back in history to whenever I want.

The one thing that does get a bit more complicated is when I’ll have different versions of the codebase – one for dev and one for production. The branching capabilities of Mercurial would definitely help me out there, but I’m not sure it’s worth the half day investment it would take to configure and learn it. I’m pretty focused on my ship date at the moment, and this is one of those things that I feel can wait.

Oct 18, 2010

Six To Eight Weeks

I'm slowly but surely making my way toward beta testing. I have all of the core functionality for events done, and now I'm adding the polish. I'm taking the mantra, "do one thing extremely well," to heart. Attendance is the only thing the software does, so it needs to be an extremely polished experience all around.

I've added some really neat AJAX effects, so the past week has been spent learning AJAX and JSON, hitting some roadblocks, and finally getting the thing looking pretty polished.

I just need to add two quick validation rules to members and eventtypes to prevent XSS. All data is htmlspecialchars cleaned before it is printed to the view, but JSON data must be htmlspecialchars_decode'd, which means that I need to make sure the data itself is clean. Member names and event type names are sent in the clear as JSON objects, which is why the extra validation is needed.

There is one more thing I could do to improve performance. I'm currently loading JSON objects to populate the event calendar one month at a time. When the user navigates to a new month, it's a new AJAX call. But it would greatly improve performance if I loaded several months at once. That fix should not be too difficult, and it's definitely on my list. More polish.

It's all this polish that takes so much time, but is definitely worth it. The best part of my software is its simplicity and ease of use. This I can not compromise on.

The other thing that was on my mind today was that the signup form does not look incredibly enticing. I'm going to start looking at signup forms for other webapps to get inspiration on how I'd like to design mine.

I have decided that my marketing website does not need to look like the app itself. Most webapps have a completely distinct marketing site. I might even be able to keep my current template for my marketing page, and link people over to the signup page on my app when they click the signup button.

Oct 7, 2010

Tea, earl grey, hot.

The end is in sight on my web-based attendance software! I'm on track to start beta testing in December. I'm been blogging less in order to spend more time on development. I feel like I'm on the home stretch.