x You must enable Federated Login Before for this application.
Google App Engine Control Panel -> Administration -> Application Settings -> Authentication Options

Blog Tiny Probe

Building a Startup Framework for AppEngine

Thu, 31 Oct 2013

by kordless

It's time I built a framework.

I code in Python and JavaScript and I'm decent at doing HTML layout and simple CSS design work. I'm familiar with JQuery and Bootstrap. I know how to use Webapp2 and Jinja. I was recently able to write an simple Oauth library for talking to Github.

AppEngine is a good choice for hosting infrastructure as it's fairly inexpensive, supports Python, includes methods for user authentication, and provides simple database storage. It's also exceedingly handy to have integration with a few other Google products including BigQuery and Compute Engine.

On the other hand, AppEngine requires a lot of work to implement federated logins, secure form handling, extensible templating, and tight integration with other services, like Github and Twitter.

In the past, I've used GAE-Boilerplate to implement several sites, including StackGeek, TinyProbe and Utter.io. Each time I do a new site, I think to myself how much easier it would be if only I had a slightly different framework at hand to quickly implement those sites. I started doing a small amount of contributing to GAE-Boilerplate last year, but became quickly disappointed with the lack of focus on core features for building features required by a startup site, and the ease of its setup.

Deciding to write a framework on AppEngine is one I'm doing primarily for personal reasons. Doing this will help me learn more about programming and hopefully give me the tools I need to quickly deploy and develop new ideas. A side effect is that it may also help other startups implement the first version of their product in a short amount of time.

All of this will be Open Source and available under the Pink Panthers project on Github. I'm naming after the Serbian crime syndicate, The Pink Panthers because, a) they are fearless badasses and b) they are clearly opinionated. Like me!

So, what does a startup need from a framework?

Let's take a look at a few features a software startup may need from a framework. BTW, when I use the term 'startup', I mean an early stage company, pre-product, with a few founders hammering out code. I'm definitely not referring to a later stage startup with B round funding, 1000 customers, and 120 employees! Those are not startups in my opinion.

An opinionated view of what features an early stage startup will need consists of the following:

  • a domain serving content
  • simple design for displaying content
  • simple way for non-technical people to create content
  • simple deployment methodologies, including testing
  • email registration for interested users
  • user registration for early beta testers
  • mailing list to email users periodically
  • forums to hold discussions
  • blogging framework for writing posts and making comments
  • social networking features
  • issue tracking via Github
  • source code versioning via Github
  • simple analytics dashboards
  • simple monitoring of the service
  • an A/B testing framework
  • an integrated payment system via Stripe

Installation

Installation, initial configuration, and creating a project on AppEngine will be done using a build script. A configuration webpage may be used for speeding up the installation. See Wordpress.

Installation documentation will be provided where scripts or GUIs cannot provide assistance in setting up the framework.

Installation should be able to be done by someone who has a marginal amount of technical expertise. It should be approachable by end developers who can do simple HTML editing and basic command line actions like checking out repositories via Git and editing content online at Github.

User Features

Features for managing users will be a priority. A startup depends on users for it's eventual success, and those users need ways of communicating with the startup and promoting the startup's offerings to other users. This means features such as blog posts, mailing lists, social media integration, commenting, analytics and A/B testing are available on the site from day one.

Code Layout

The layout and content of the framework should be made obvious with a sample site repo which others can clone and easily edit or repurpose within the limits of the underlying frameworks.

The content of the sample repo will drive the homepage page for Pink Panthers and the page it builds will contain blog posts and documentation for using the framework. The code for Pink Panthers will live inside the startup project's directory as a git module.

Dependencies which are being actively developed in their own git repos will live in git modules under the Pink Panther's repo. Dependencies which aren't updated regularly, or require custom modifications to work in the framework, will be cloned and added to the Pink Panther's repo.

Storage and Security

Content should be stored independently of any other service, with the exception of the startup's own Google account services and Stripe. Company critical data like user account information should be kept secure. Credentials or sensitive data like credit cards should have secure and simple methods for storage and processing.

Methods for backing up or exporting data should be readily available within the framework.

The code for the framework is Open Source, which allows it to be independently audited.

What else?

If you have any suggestions, it's time to make them in the comments below. I'll update this post as needed over the next few weeks time.

0 Comments