One of the most exciting and challenging things about the capstone project is learning new technologies to integrate into your project.
Real-world projects are composed from a selection of specific technologies that each take care of some piece of the work necessary to have a production-ready application. The full set of technologies that are used in a project is known as the technology stack for that project. For your capstone project you'll need to determine what tech stack you should use, based on the needs of your project plan.
Every project's goals are different, and as a result its tech stack will be different. However, within the realm of web applications there are several major pieces that virtually every project requires:
- Back-end
- Web application framework
- Web server
- Database server
- Authentication framework
- Front-end
- JavaScript framework
- CSS library (or language)
- Internationalization (i18n)
- Mobile framework/language
- Web infrastructure
- Server hosting
- Content delivery network
- DNS hosting/management
- SSL certificates
- Code infrastructure
- Continuous Integration
- Code quality/linting tools
- DevOps systems
- Provisioning
- Orchestration
- Monitoring
We've already seen many technologies that fill several of these roles. For example, Rails is a Web application framework. It has a built-in Web server which we've used, however there are a number of alternatives including Puma which is now the default in Rails 5. What roles are filled by some of the other technologies we've used?
A couple of the technologies listed above are possibly new to you because we've not had to implement them for our projects so far. For example, both DNS hosting and SSL certificates were handled for us by Heroku when we deployed our Rails applications. In more complex deployment scenarios these, and many other, tasks must be handled by either the developers or a DevOps team working closely with them.
In addition to the technologies listed above other technologies are often added to a stack because of specific needs from the project.
For example, if the application allows users to pay for items or services (such as an e-commerce site) the technology stack would need to include a payment processing service such as Stripe. Here are some other technologies that are likely to be found in a web application tech stack:
- Service Oriented Architecture
- API/Web service protocol (REST, SOAP / WSDL, Apache Thrift)
- Message/Job Queue (Amazon SQS, Apache ActiveMQ, Apache Kafka)
- Service broker / repository
- External APIs
- Data stores (Socrata Open Data, data.gov, Seattle Open Data)
- Services (Google APIs, Twilio, Stripe)
- Real-time systems
- Data visualization & graphics
- Charts (High Charts)
- General purpose (D3, Processing.js)
- WebGL (Demo: Chrome Experiments)
- Data management
- Data storage (Amazon S3, Google Cloud Storage)
- Content Management System
For a more concrete understanding of how real-world tech stacks work, here is an example of a Rails web application stack in use today. Your capstone projects will not need to use as many technologies as this example has.
The PotBS Account Management Site Tech Stack:
- Back-end
- Ruby on Rails
- Unicorn web server
- PostgreSQL relational database
- Devise for user management & authentication
- Haml for views (instead of ERB)
- RESTful API
- XML API
- Front-end
- jQuery
- Foundation CSS framework
- Web infrastructure
- External APIs
- Proprietary account service API for PotBS game
- PayPal IPN API
- Mandrill transaction email service
- Code infrastructure
- CircleCI for continuous integration
- DevOps systems
- New Relic for real-time error monitoring
- Papertrail for production log collection
For your capstone project you will need to choose a collection of technologies that will comprise the tech stack for your application. The specific technologies you choose will depend upon the goals and requirements of your project plan, as well as your personal interests as a developer.
When choosing a set of technologies it can be helpful to think of it like putting together a puzzle. Each technology fits into a particular location in the stack, and it usually integrates with one or more other technologies in the stack. Think about what technologies have been used in your previous projects and how each of them have interacted with the other technologies.
If you had to extend one of these projects, for example bEtsy, what kind of technology would you use? Where would it fit in the stack, and what other technologies would it integrate with? These kinds of questions usually lead developers to conduct research on what specific technologies would be most applicable based on the technologies that are already in the stack.
Regardless of what technologies you choose for your stack, there are some general requirements for your Capstone:
- You must include at least three new technologies, that is technologies that you haven't used in any Ada projects
- For example if you create a Ruby on Rails project with PostgreSQL, then you should also include DNS management and Continuous integration if those technologies are new to you.
- With rare exceptions, your project will likely need to use a custom domain name.
- Depending on your project requirements you will probably need to use at least one technology from each category:
- For a web application project you should definitely have at least one technology from the Back-end, Front-end, and Web infrastructure categories.
- For a mobile application project you would probably use the same kind of stack as for a web application, but the Front-end category technologies would include a mobile framework instead of a JavaScript framework.
- For an embedded application project things work a bit differently, but it's still likely that your project would benefit from a Back-end technology
- All projects can use Code infrastructure tools like continuous integration
Instructors will verify that your technology stack choices are appropriate.