Sunteți pe pagina 1din 25

Get shit done

Programming tips for startups

Software development process


Enterprise Requirements Architecture Design Implementation Early stage startup RequiArchitecture rements

Design

Implementation

Architecture & Design

Keep pen and paper at hand


it'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
ClickNotifi Android Java Python Bash Java Play Framework Backbone.js RoR

Unknowns first
figure 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 masturbation
Building framework is kinda pleasant but of little use

Implementation

Choose your features


You 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 literals 86400000 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 iterate


Small methods = small problems
# vanilla self.guid # vanilla self.guid # short & self.guid (36) guid = UUID.random_create.to_s gid without dash = UUID.random_create.to_s.gsub("\-", "") sweet url shortener-like = ("%d%d" % [rand(1000),Time.now.to_i]).to_i.to_s

Don't accept payments


Fake it till you make it

Your code is like weighted companion cube


Burn it as needed

The best solution is NOT most flexible one; nor most performant or feature-complete

Best solution is available NOW

Thank you
michal.kostic@gmail.com www.michalkostic.com

S-ar putea să vă placă și