Quick review of prior material Databases IDE Comparison Database model Notepad++ Entity relationship model NetBeans SQL Visual Studio Database Engines Backend Programming RDBMS Truly requires clarification of ideas MYSQL Complexity SQL Server Programming Languages APIs Programming example (calculator) Application Programing Interface Backend integration with frontend Precautions ASP.NET SDK = Software Development Kit Error validation Technology Stacks Principles of Programming Many different options in different layers Some code is better than others LAMP = Linux Apache Mysql PHP Mistakes have a high cost WINS = Windows IIS .NET SQL Server
What is Hosting? Where you store the code Makes the website publicly-accessible What you’re paying for: Physical components Disk space (space in GB) Memory (RAM) Processing power (CPU) Datacenter costs Electricity Cooling Network Bandwidth Administration (technical skill)
What is a server? Physical machine Usually horizontal, 1-2 inches tall Designed and built for reliability, not features Lots of redundant components
What is a data center? A.k.a. Server farm Lots of computers Room gets hot… Lots of fans, very loud High security
3 most common hosting options 3 most common hosting options Dedicated Hosting Shared Hosting Virtual Private Server (VPS) Other hosting options Colocation Cloud hosting
Dedicated Hosting Means you rent a physical machine provided by the host Hardware options provided by the host, you pick one Tends to be around $200-1000/month per machine, depending on quality Great option for almost-total control When is it right? If you need lots of power and control. However, costs can be high.
Shared Hosting You “share” a dedicated host with other customers (you don’t know who they are) Share CPU-power Share network connection Sometimes, share IP address You have limited access to the computer, so less flexibility When is it right? Generally a poor choice for startups Better choice for small business websites
Virtual Private Server (VPS) Virtual Private Server = “virtual machine” Like having a dedicated server, except that there isn’t a physical machine you own. Your machine is a “virtual” machine, that lives inside of a physical machine. • When is it right? • Low cost way of having lots of control. • Great option to start
Colocation Means you buy your own physical machine Much more expensive than consumer machines… generally costs at least $4,000, easily $10,000 In addition to monthly fees to data center You choose the hardware Maximum flexibility regarding the hardware used (e.g. fancy servers and storage configurations) You manage everything. Requires more effort and management compared to cloud and managed When is it right? Best for maturing startups that can afford costly servers and hire staff to manage them
Cloud Hosting “Pay as you go”, pay-for-use Amazon EC2, S3 Good for starting out when server needs are unknown and it’s easy to scale up and down quickly Best for environments that have differing scale needs on a regular basis (e.g. imagine you normally need 20 servers but for a few hours each night you need 100 servers to crunch data) When is it right? Great low-cost way to start, but limitations can be frustrating Excellent choice if sudden scale is needed
Comparison Managed (dedicated, Colocation Cloud shared, VPS) (aka colo)Cost at first Average Very high Very lowCost at scale Average-high Low Very highFlexibility Medium Very flexible Not flexibleManagement Depends on host You manage Harder to manage
Tools for hosting Who is hosting a website? http://www.whoishostingthis.com Note that high-traffic websites run their own data centers
Try Buying Hosting Cheaper and lower-quality options Your domain registrant Bluehost, dreamhost, etc. Better and more expensive options Rackspace Softlayer
Deployment Deployment = Release = Shipping The process of getting a website from your local machine to the host Once it is on the host, it’s viewable by the public
FTP File Transfer Protocol Very old way of transferring files We’ll use Filezilla
Practice Deploying FTP Connect to 18.104.22.168 Username class Password: same password as classroom computers Create a folder with your name (lowercase, one word) Upload your HTML files Test it at http://class.testing.startupv8.com/yourname
Multiple Environments Risks of single-environment Accidental deployment Very hard to recover in production High cost, high pressure, lots of “site is down” time Dev > QA > Staging > Production The “build” process Automated tests Automatic documentation and/or release notes Automatically moving from one stage to another “latest build”, “nightly build”, “build 142”
Advanced Deployment Tools Beyond Compare (like FTP, but highlights line-by-line differences) Custom programs Write your own script that copies files Available software xCopy / robocopy MSDeploy UrbanCode www.urbancode.com
Release Planning and Cycles Planning process of what to deploy and when MVP Version 2 Version 3…
Tools for Project Management FugBugz BaseCamp Trello Pivotal Tracker
Budgeting Very hard to budget new development projects How much does it cost to build a house? It depends Do a bottom up estimate, not a top down estimate A 2-story house in a specific subdivision with a garage and 3 bed 2 bath with the same interior that all the other houses in the subdivision have?
Good project management Setting milestones Hitting the milestones Lots of communication Don’t change the features Go through the design process
Tips on Shipping Stick to a feature-set, and build it. Adding developers doesn’t always make the project finish sooner “The mythical man-month” Q: How does a large software project get to be one year late? A: One day at a time!
Deploymentson closedplatforms E.g. Apple App Store Unclear requirements Time consuming and frustrating
Hiring Developers Hiring full time developers Very hard, very expensive Part-time developers (freelancers) Tends to be the best option for startups Difficult even for engineers to assess skill in an interview Developers are almost never effective on joining a project… always takes training time
Managing Developers Great developers are very self-motivated They like to work on things they think are important They like to solve interesting problems Constant pressure is annoying
Extreme Programming A subtype of agile development Adds some elements Pair programming Extensive unit testing Flat management
Code Reviews Engineers look over each other’s code as a “second pair of eyes” Tends to result in much better code Also enables peer-to-peer training
Outsourcing Tends to be very difficult for startups Low quality work Offshore companies do not design And they produce low-quality code Poor communication The takeaway: tempting, but usually a net loss
Homework Individual, read the following: Read Michael Wolfe’s answer... http://www.quora.com/Engineering-Management/Why- are-software-development-task-estimations-regularly-off-by-a-factor-of-2-3 Mythical man-month… http://en.wikipedia.org/wiki/The_Mythical_Man-Month (Team) Deploy your application If there’s no backend, that’s OK (Team) Keep Going!! Keep programming Keep working on the pitch deck Keep marketing your new startup Occasionally review the market research data (Google Analytics, etc.)
A particular slide catching your eye?
Clipping is a handy way to collect important slides you want to go back to later.