Important: To get a permission number for this course for Winter 2025, you need to (1) log into your u.northwestern.edu Gmail account (2) fill in the prior experience survey , (3) email me your request for a permission number, using the Subject 394 Permission Request.
Interested in being a client for CS 394 in spring? See what's involved.
This is a class about learning to develop JavaScript-based mobile and web app products using modern sustainable practices that deliver value as quickly as possible to users, clients, developers, and the development organization. These practices usually go under the name of "agile" or "lean agile."
This course is not recommendeded for first and second year undergraduates. It assumes significant prior programming experience, in multiple languages, and, even better, some industry experience.
This course is about much more than programming. It's about software development. It's about delivering high quality code early and often. It's about being efficient, using modern lean agile practices. It's about constant reflective analysis and improvement. The focus is on your growth as a reflective software practitioner and the team's growth as a cross-functional efficient, effective, and supportive community.
What you'll be doing a lot of in the next 10 weeks:
- working meetings with your team, client and me
- coding and teaching yourself new technologies
- learning and applying agile ideas, in projects and discussions
Required Meetings
This class involves a great deal of work with your team, your client and me. That means frequent face to face meetings. These are a requirement of the course. Do not take this course if you can't commit these meeting, especially Saturday client meetings in the winter edition of this course.
All meetings should lead directly to deliverables, designs for deliverables, or specific steps to take to improve your development process. If a meeting doesn't do this, it was a waste of time.
Grading
75% of your grade is your team grade, adjusted if necessary by your level of contribution. The team grade is based on how the team managed and improved over both the team and client projects, in terms of delivering value every week, and managing expectations through frequent and clear communication. Most teams do just fine on this part and get the full 75%, but it takes work. A client should never be surprised with what they get, because a good team keeps the client accurately informed about what's doable and why.
Y our team grade is based on how your team mates evaluate your contribution and engagement with the development of the apps and the team. The data is gatherer from weekly self reflections and team reviews.
The other 25% comes from your ability to demonstrate to me your individual ability to apply agile thinking creatively and appropriately to real world development issues. How this will be done this quarter to be determined.
Programming Requirements
Substantial prior programming experience is required. I assume you already know or can quickly get up to speed with
- coding mobile applications with React
- version control with git
- working with a persistent data store, relational or otherwise, e.g., Firebase
- deploying to the cloud
The class discussions and assignments focus on development processes, not programming technology. Work is done in teams.All team members are responsible for all parts of the application.
Prior mobile development experience is not required. The ability to pick it up on your own is.
Development computer
You need to have either a Mac, PC, or Linux machine suitable for software development, with plenty of memory and gigabytes of disk space. Laptops are best because they can be brought to the meetings to do demos and development.
Textbook
The text for agile software development is The Agile Samurai by Jonathan Rasmusson. Don't be fooled by the casual style. This is a sound introduction to agile software development, by a developer for developers.
Tools
The following tools are either required, or have proved very very useful to previous teams in this course.
- Required: a github account
- Required: React -- used from day one of the class
- Highly recommended: Visual Studio Code -- provides smart editing for JavaScript, breakpoints, running a local server, etc.
React and related libraries such as Cypress and Firebase have substantial learning curves. The team will need to invest time cross-training each other to be sure every member can debug and extend any part of your app.
Most work will be done building React-based web apps. These are the easiest to rapidly iterate, deploy to clients, and test with users.
We do not do pure native apps in this class, because
- to support both iPhone and Android, you have to learn two languages (Swift and Java) and write two versions of an app
- to develop for iOS, you must have a Mac
- to test with users, you have to do a fairly lengthy build and deploy process
Using React
- only requires team members to learn web technologies (JavaScript, HTML, CSS)
- supports web, iOS, and Android with one codebase
- supports instant update of apps
- supports rapid iterative developlment