Overview
Course in brief
This course will teach you what Device-Agnostic Design is, what has led to the emergence of Device-Agnostic Design, and what the present issues and challenges in Device-Agnostic Design are.
The focus is on hands-on practice, where you will learn to design, implement, and test applications that work on multiple devices. When working on software, we use Dart and Flutter, a modern programming language and a modern framework for building software for multiple devices from a single codebase.
This version of the course has been deprecated in favor of the updated version at https://fitech101.aalto.fi/courses/device-agnostic-design/. This course version is no longer supported.
The big picture

In our big picture (see Fig. 1), Device-Agnostic Design is included in the over-arching field of research called Cross-Device Interaction, while Device-Agnostic Design is introduced as a design philosophy to reach wide range of different devices from a single design and single code base.
Device-Agnostic Design aims to allow service delivery in a machine-independent manner. The way Device-Agnosticism is enabled in a design of course depends of the technology framing of the development and deployment environments. Nowadays for ubiquitous, all-encompassing online services the de facto go-to design approach has for more than a decade been Responsive Web Design (RWD). The actual implementation of services still relies on common markup and scripting languages and layout style sheets and themes.
In the following section we will look in for more details on these concepts, while at the same time you will learn the basics of web programming using Dart and Flutter.
Learning objectives
The high-level learning objectives of the course are as follows.
You understand the broad history and evolution of devices as well as the evolution of how software has been designed and developed for a wide range of devices.
You understand the concept of device-agnostic design and knows the key milestones and evolution of techniques used for device-agnostic design.
You understand the principles of designing user interfaces and interactions for a variety of devices.
You understand the key challenges in designing and developing software for a variety of devices.
You can design and create applications that work on multiple devices.
For each chapter in these learning materials, we will also outline specific learning objectives.
Prerequisites
To succeed in this course, basic know-how of programming is required. Understanding of object-oriented programming, databases, server-side applications, and browser-based applications is highly beneficial (see e.g. the course on Web Software Development).