This is a class about learning to develop HTML5 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 recommended 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.
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
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. If you have trouble committing to the meetings below, contact me now. You may need to drop the 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.
80% of your grade is your team grade. This is based on how you did on your various team reports, and how you did with your client, 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 80%, but it takes work. A client should never be disappointed or surprised with what they get, because a good team keeps the client accurately informed about what's doable and why.
Your share of the team scores is affected by the level of your contribution to the project as indicated by the CATME 360° reviews. I use the maximum of the contribution levels indicated in the final team and final client reviews. If your contribution is higher or lower than 1.0, your share of the grade is affected. Note that CATME deliberately caps contribution at 1.05, so as not to reward over-achievers taking control of a project. In practice, CATME has a very small effect, except in cases where someone repeatedly and significantly fail to contribute.
The other 20% comes from your ability to demonstrate to me your individual ability to apply agile thinking creatively and appropriately to real world development issues. This year, as an experiment, the bulk of this grade will come from the weekly retrospective reports.
I assign 1 to 5 points on each retrospective. 4 is good, 5 is very rare and means impressive Eric Ries-level analysis. Your retrospective grade is the sum of your top 4 scores. This will be added to your team score.
Substantial prior programming experience is required. I assume you already know or can quickly get up to speed with
- coding in one or more modern languages, e.g., C++, Java, PHP, Python, Ruby, ...
- version control, such as git or svn
- setting up and querying a database
- setting up a web server, such as PHP, Django, Rails, ...
The class discussions and assignments focus on development processes, not programming technology. Work is done in teams but 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.
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.
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, by a developer for developers, to agile software development.
Mobile Web Apps
The recommended target architecture, at least initially, is what are called mobile web apps:
- Server-side: Rails, Django, PHP, or other rapid development web server framework, OR cloud-based back-end such as parse.com
The advantages are
- Nothing new to learn for most people
- Deployment to virtually all smart mobile devices and well as desktops
- Instant updating for high-speed development and testing
- Access to orientation and geolocation sensors
- Offline mode using HTML5 caching and local storage
- Graphics available using HTML5 canvas
The disadvantages are
- No access to camera or other sensors
- No access to calendar, contacts, etc
Once you have a good prototype, and need these or other features, you can either
- re-implement the design natively in Objective-C (iOS) or Java (Android)
- re-implement in other languages using (mostly commercial) development tools
- integrate the web page into a hybrid environment such as PhoneGap
Caution: As soon as you go beyond mobile web:
- You must
meet the development requirements for
the platforms you want to deploy to.
- For iOS native app development, you must have a Mac with the current MacOS, an iPhone, and an Apple developer license ($100 / year).
- You will have a much longer develop and deploy cycle time.
- If only one member is able to compile and deploy, you will have a bus factor of 1.