If you've got a great software idea and want to make it a reality, and you want to hire an experienced, innovative, independent software developer to write it for you, then you've come to the right place! Email me at email@example.com and we'll grab a coffee and discuss your idea.(If you're here because you're just looking to waste time on the internet, then please proceed immediately to XKCD, The Oatmeal, or the ultimate time-waster, Hacker News. I suppose you could also read on to see what I do and how I do it, in which case you must be really bored. My sympathies.)
The applications I write can run on the desktop, on the web, on your iPhone, iPad, or Android device. From the client perspective (that would be your perspective) the process involves a lot of talking, diagrams, walk-throughs, and using of the software. From the coder perspective (that would be my perspective), writing custom software applications is a fairly complex task, and every programmer I've met approaches the problem of managing project execution differently. The way I do it is with an iterative process where I create something quickly initially. It will suck. You look at it and give me feedback, and I will modify it to be a little better, and we repeat this until it's done, then we release it. See, simple!
'Making the right thing' is often a surprisingly organic process that involves a lot of communication between developer, customer, and user. People are very visual, and usually the conversation only really starts when people have a first version in front of them. So I aim to get that in front of them as soon as possible, usually about a week.
Some people feel better if they know more about the technical details of what goes on behind the scenes when I go off to create another software iteration. This rather long-winded section gives you a glimpse into the dark and mysterious topic of how I do software development.
My favorite tools are Meteor (which combines nodejs and mongodb together and adds some great tooling and infrastructure - if you haven't used it you should), Resig's jQuery (of course), Mike Bostock's D3 visualization library, and Simpatico, my own application framework. My swiss army knife includes OSX, the command line, Sublime Text 2, Chrome and WebKit Inspector. For hosting duties I turn to Google App Engine for Java, Linode for other application hosting (Ubuntu, Nginx for proxy, Postfix for mail), and Namecheap for name hosting. I use Freshbooks for billing. I use PhoneGap as a mobile shim for targeting iPhone and Android (although I have my eye on Sencha). I prefer JSON to XML these days. Git has version control duties (I love GitHub for Mac for visualizing branches!). I don't always code Java, but when I do I use Eclipse, Tomcat, and Maven, and try to avoid ORM if I can. I generally don't use Clojure or Scala for JVM programming but would like to! I have a real fondness for Wireshark, and a love/hate relationship with D3.
1990-1999: The early years
I've been programming for a very long time. When I was 14 I programmed an application in FoxPro for my parents small mobile medical diagnostics business to handle their paperwork. In college I worked toward a BS in physics while also working for the UCI Office of Academic Computing doing basic web design when the field was new. I also did some VBA programming for research credit with a biology professor, Joe Arditti. After college I went into business for myself doing MS Access programming for small businesses and individuals. This got me noticed by Silicon Valley recruiters during the first internet boom, circa 1999, when I worked as a contractor for TCI-BR. I liked Access a lot but was frustrated by its limitations, so I learned Java and was hired to work at HP Education, and then a (now defunct) SF startup called Spark Online. My focus was on desktop Java GUI programming with Swing interfacing with relational databases.
2000-2008: The Java years
Although my experience with HP doing Java was good, it was my connection with the LA Java User's group that got me a job with Citysearch when things really got going. Eventually I led a team of five developers there and re-architected several customer-facing and internal systems using a (then new) Java/Hibernate/Spring stack. Evite and Match were sister companies under Vivendi and housed in the same building, and those teams learned from my team's experience. Also, that architecture was chosen to replace the mod_perl based system for the consumer Citysearch site. Citysearch was when I added consumer-oriented webapps to my 'enterprise Java' repertoire.
I worked briefly for the Blizzard Entertainment (now horribly renamed ActivisionBlizzard) web team in 2008 doing more Java webapp stuff. (Being a gamer myself, I was really happy there, and the circumstances of my departure were rather sad - ask me about it some time over a drink.) I had another interesting work experience at JPL in 2011, where I worked on a Lucene project for the ISS, and a cloud-hosted image processing system that used a novel distributed continuation library from EC2 destined to be used for processing images from the Curiosity Mars rover. (Personally I thought Hadoop was a much better fit, if more boring, but it's hard to change JPL's mind once it's made!)
2009-Present: The Age of the Open Web
Updated: Jan 12, 2017, Josh Rehman