When

Where

Who

Resources

Important To get a permission
number for this course for Spring 2018, you need to do two things.
(1) fill in
the prior experience survey
, (2) email me
a request for a permission number afterwards. Use the Subject 394 Permission RequestNote: You must be logged
into your u.northwestern.edu Gmail account to access the survey.

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.

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 Fall.

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

80% 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 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 individual share of the team scores is affected by the level of your contribution
to the project as determined by
CATME reviews. Four CATME
reviews are done, at the middle and end of each project, but only the end of project
numbers are used. Contribution higher or lower than 1.0 will modify your share of the team
grade. 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 on most people,
except in cases
where someone repeatedly and significantly fails 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.
Your retrospective grade is the sum of your top 4 scores.
This will be added to your team score.

Programming Requirements

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

writing HTML, CSS and Javascript

setting up a backend server or cloud account

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.

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.

The current version of Ionic (Ionic 3) assumes you will be using
Angular for your
JavaScript code. This has a substantial learning curve. The team will
need to invest time making sure every member understands all aspects
those components of Angular used in your apps.

Mobile Hybrid Apps

The team project must be a hybrid app, using Ionic. This will prepare you for both hybrid and mobile web development.

The client project can be either hyrbid or mobile web, depending on what's needed
and what the client wants.

We do not do 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 iPhone, you must have a Mac

to update an app, you have to rebuild, redeploy, and reinstall the app

Because this is about rapid iterated development and testing, all apps are either
hybrid or mobile web. Such apps

only require knowing web technologies (JavaScript, HTML, CSS)

support iPhone and Android with one code set

support instant update of apps

Hybrid apps provide access to the device, such as camera, contacts, and so on.
To be prepared for the client project, which might need such features,
the team project must be hybrid, even if your app idea may not
require it.

Ionic has a live reload feature for development, and a viewer app
that clients can use to test the app on their own devices,
without going through an app store.

Push Notification Warning

Caution: Supporting push notifications
requires deploying standalone apps. You can do that with hybrid apps,
but you must have the same native development tools for
the platforms you want to deploy to that you would for
native development:

For iOS standalone deployment, you must
have a Mac with the current MacOS, a current version of Xcode,
an iPhone, and an Apple
developer license ($100 / year).

For Android standalone deployment, you must have
the Android System Development Kit (SDK), and at least
one Android Virtual Device (AVD) for emulation.

Creating standalone apps creates
a much longer develop and deploy cycle time. The requirement
for an Apple developer license and a Mac often means
only one member is able to compile and deploy, leading
to a bus factor = 1
problem.