際際滷

際際滷Share a Scribd company logo
Get shit done
Programming tips for startups
Software development process
Enterprise          Early stage startup
Requirements     Requi-      Architecture
Architecture     rements
Design
Implementation
                 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          RoR
   Java        Play
  Python    Framework
   Bash     Backbone.js
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
Get shit done
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   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)
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

More Related Content

Get shit done

  • 1. Get shit done Programming tips for startups
  • 2. Software development process Enterprise Early stage startup Requirements Requi- Architecture Architecture rements Design Implementation Design Implementation
  • 4. Keep pen and paper at hand it's faster than iPad, Omnigraffle and Balsamiq combined
  • 5. Technology: to learn or to do? If in doubt, go with whatever you are most familiar with
  • 6. My technology choices ClickNotifi Android Java RoR Java Play Python Framework Bash Backbone.js
  • 7. Unknowns first figure out parts you are least certain will work
  • 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)
  • 9. Framework masturbation Building framework is kinda pleasant but of little use
  • 12. Choose your features You can't have everything
  • 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!
  • 15. class ImportantLink :original, :company, :generated_link, :name end
  • 16. Become StarShip programmer! Write Simple and Sound code
  • 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)
  • 22. Don't accept payments Fake it till you make it
  • 23. Your code is like weighted companion cube Burn it as needed
  • 24. The best solution is NOT most flexible one; nor most performant or feature-complete Best solution is available NOW