Get shit doneProgramming tips for startups
EnterpriseRequirementsArchitectureDesignImplementation
Software development process
Early stage startupRequi-rements
Architecture
Design Implementation
Architecture & Design
Keep pen and paper at handit's faster than iPad, Omnigraffle and Balsamiq combined
Technology: to learn or to do?If in doubt, go with whatever you are most familiar with
My technology choices
AndroidJava
PythonBash
JavaPlay
FrameworkBackbone.js
RoR
ClickNotifi
Unknowns firstfigure out parts you are least certain will work
# 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)
Framework masturbationBuilding framework is kinda pleasant but of little use
Implementation
Choose your featuresYou can't have everything
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
Is empty text editor scaring you?Start with whatever comes to your mind!
class ImportantLink
:original, \:company, \ :generated_link, \:name
end
Become StarShip programmer!Write Simple and Sound code
Simple
● Simple algorithms○ Temporal expression detection○ Siri○ Machine learning○ String matching
● One way to do things
● Make it obvious
Sound - eat with fork and knife
● use descriptive function and parameter names
cfoundp vs charFoundInBuffer
● use constants/variables for literals86400000 vs MILLIS_IN_DAY vs jobPeriod
Sound - be nice to teammates
● make methods read like a story
void loadForm() {loadData();enforceSecurity();adjustControls();
}
Sound - don't show off
● use Object Orientation sparingly○ shallow hierarchies○ carefully with polymorphism
● internal API
● conservative extensions
Isolate and iterateSmall methods = small problems
# vanilla guidself.guid = UUID.random_create.to_s# vanilla gid without dashself.guid = UUID.random_create.to_s.gsub("\-", "")# short & sweet url shortener-likeself.guid = ("%d%d" % [rand(1000),Time.now.to_i]).to_i.to_s(36)
Don't accept paymentsFake it till you make it
Your code is like weighted companion cubeBurn it as needed
The best solution is NOT most flexible one; nor most performant or feature-complete
Best solution is available NOW
Thank [email protected]
www.michalkostic.com