These are slides from a class I presented alumni and incoming students at the Austin Center for Design. The goal was to provide an over view of software application development (architecture, languages, frameworks), how to augment your development with other people of shops, and some basic techniques for scaling up.
1. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Rolling Up Your Sleeves
jesse@thesourcespring.com
www.thesourcespring.com
1
2. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Class Structure
Part 1 - Options: A whirlwind tour of languages and frameworks (30 mins)
Part 2 - Help: Getting development assistance and managing it (30 mins)
Part 3 - Scaling: Success is a risk (30 mins)
Part 4 - Q&A: Pick my brain (30 mins?)
2
3. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
About Me
3
4. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Who Are You?
Introduce yourself.
What experience in software development do you already have?
What are you hoping to get out of today?
4
5. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
{let’s do this}
5
6. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Options
A whirlwind tour of languages and frameworks
6
7. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Architecture for client/server apps
7
8. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Languages
Client-side vs Server-side
Interpreted vs Compiled
8
9. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Languages
Perl
PHP
Javascript (client-side)
Node.js (server-side Javascript)
Java
Python
Ruby
C / C++ / Objective C
C#
9
10. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Frameworks: terminology
What is a framework?
DRY (Don’t Repeat Yourself)
MVC (Model–View–Controller)
ORM (Object Relational Model)
Front Pattern (Routes)
10
11. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Frameworks: server-side
Ruby on Rails
PHP + Symphony
PHP + Wordpress
Python + Django
Node.js + Express.js
Java + Spring/Hibernate/EE/???
C# + .Net
11
12. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Frameworks: client-side
Javascript + JQuery / Ember / Angular
Objective C + iOS SDK
Java + Android SDK
12
13. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Frameworks: mobile hybrids
HTML5 in a wrapper
PhoneGap
Titanium
Adobe AIR
13
14. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Databases
SQL
Postgres, MySQL, Oracle
NoSQL
Mongo, Couch, Cassandra
Keystore
Memcache, Redis
14
15. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Hosting
Bare Metal
Rack ’em up
Virtual Servers
Rackspace, Amazon
App Platforms
Heroku, Appfog, Railyard
15
16. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Considerations
Performance (Speed vs Latency)
Agility
Maintainability
Cost of ownership
Owning your platform
What you know
What you can learn
Where you can learn it from
Your developers’ knowledge
Ease of finding developers
16
17. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
{breathe}
17
18. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Help
Getting development assistance and managing it
18
19. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Options
DIY
Technical Co-Founder
Hiring FTEs
Hiring Contractors
Outsourcing
(NB: This may or may not mean offshoring)
Volunteers
Open Source
19
20. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Considerations
What you can offer: cash vs equity
Your savviness
Your ability to manage
Need for agility (how much work can you do
up front?)
20
21. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Agreements
Statement of work
Intellectual property
Equity or cash
Warranty and maintenance
Handling disputes
Documentation
21
22. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Finding Developers
Friends, LinkedIn and Facebook
AngelList, GitHub
ODesk, Guru, VWorker, ELance
Head hunters
Craigslist
22
23. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Process
Agile / Scrum
The sprint cycle
Writing stories and documenting them
Velocity and points
Test Driven Development
Behavior Driven Development
23
24. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Version Control
Why?
SVN vs Git
Github, Mercurial, Bitbucket, Sourceforge
24
25. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
QA
Painful: they will not do it all for you
Bug tracking
Automated testing
Continuous integration
25
26. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
{breathe}
26
27. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Scaling
Success is a risk
27
28. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Serving Assets
Minification
CDNs - Content Distribution Networks
28
29. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Caches
Browser Caching
Page Caching
Fragment Caching
Data Caching (memory, Memcache, Redis)
In-database Caching
29
30. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Background Tasks
Why do now what you can do later?
30
31. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
More Concurrency
Remember hosting?
Bare metal: add more servers behind a
load balancer
Virtual servers: add more virtual servers
behind a virtual load balancer
App platforms: press a button (in theory)
Failover
Geographic redundancy
Sticky Sessions
31
32. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Database
Add indices
(or remove them)
Find and optimize slow queries
Avoid the N+1 problem
Eager loading
Add databases:
Master and slave (and slave and slave)
Clusters
Vertical partitioning
Horizontal partitioning (sharding)
32
33. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Case Study
Instagram
http://www.slideshare.net/iammutex/scaling-instagram
33
34. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
{breathe}
34
35. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Want more?
Startup Engineering: https://www.coursera.org/course/startup
UT on Rails: http://schneems.com/ut-rails
Contact me and ask about deep dives on other topics:
HTML, CSS, SQL, Rails, PHP, Wordpress, payment processing...?
35
36. source spring — jesse jack — jesse@thesourcespring.com — 2013 CC licensed
Thanks! Any questions?
jesse@thesourcespring.com
www.thesourcespring.com
Liked this class? Please connect with me on LinkedIn and endorse me for teaching!
http://www.linkedin.com/in/jessejack
36