This document provides programming tips for startups, including:
1. Begin with pen and paper for architecture and design before using tools.
2. Choose technologies you are familiar with if uncertain.
3. Focus on unknown parts that are least certain to work.
4. Choose your features carefully - you can't have everything.
8. # Tweaking (2 days and counting)
* 49d6abb - preparation for deployment (3 days ago)
* 7fe3ff7 - changes in links (3 days ago)
* c8ea33e - proper handling of link update (3 days ago)
* 9d61962 - logout link (3 days ago)
* e2f0289 - click count mailing kinda works (but configuration still
needs to be checked how to disable deliveries) my links works(4 days
ago)
* e206708 - UI makeover of new link, links to "new link" and "new
recipient" shorter link guid (allows for 100s of concurrent links per
second but not truly globally unique) twitter menu header (4 days ago)
# Infrastructure (1 day)
* d59971d - user authentication via devise (5 days ago)
* 10313fd - mailing notifications, starting with devise (users)(5 days
ago)
# Core (24 hours)
* 0d35fd0 - extract guid from path request image from server (6 days
ago)
* 1a770c9 - serve gif file from url (6 days ago)
* d00d93a - fix: removed "-" from guid (6 days ago)
* 0e23473 - link tagging works, tagged link is saved to server, basic
form validation (6 days ago)
* 88319c5 - initial commit - standard CRUD is working, started working
on javascript functionality (7 days ago)
13. Features
¢ What do you want to achieve?
¢ Tweaks
$ UI
$ Refactoring
$ Performance
¢ Extensions
$ Strategic - script execution
$ User required - FTP
$ Fun - string search
$ Catching up - HTML highlighting
$ Bragging - GitHub client
14. Is empty text editor scaring you?
Start with whatever comes to your mind!
17. Simple
¢ Simple algorithms
$ Temporal expression detection
$ Siri
$ Machine learning
$ String matching
¢ One way to do things
¢ Make it obvious
18. Sound - eat with fork and knife
¢ use descriptive function and parameter
names
cfoundp vs charFoundInBuffer
¢ use constants/variables for literals
86400000 vs MILLIS_IN_DAY vs jobPeriod
19. Sound - be nice to teammates
¢ make methods read like a story
void loadForm() {
loadData();
enforceSecurity();
adjustControls();
}
20. Sound - don't show off
¢ use Object Orientation sparingly
$ shallow hierarchies
$ carefully with polymorphism
¢ internal API
¢ conservative extensions
21. Isolate and iterate
Small methods = small problems
# vanilla guid
self.guid = UUID.random_create.to_s
# vanilla gid without dash
self.guid = UUID.random_create.to_s.gsub("-", "")
# short & sweet url shortener-like
self.guid = ("%d%d" % [rand(1000),Time.now.to_i]).to_i.to_s
(36)