DEV Community

Cover image for Software Imagineering
Joshua Nelson ✨
Joshua Nelson ✨

Posted on

Software Imagineering

If you work at a Disney theme park, you might be what they call an Imagineer.

“Imagineer is a portmanteau of imagination and engineering, and the term was coined to describe a role that blends these two concepts. Imagineers design the theme park’s rides, attractions, and overall experience – but they also engineer them.

The process starts off with what is known as “blue sky speculation, or as I’ve heard it referred to, “going to crazy town”. This part of the design process is pure imagination – no limits, disregard reality. Just ask “what if?”

For instance: imagine a ride that could truly convince people that they were flying. No rails, no strings attached. What would it feel like? What would the deal experience be? But, how would this ride actually work? Where are people going to sit? If I can see the ride, I’m not going to be convinced that I’m flying.

Delay any questions or doubts that you might have in your mind. Think about the ideal experience.

I am a developer on the design team at Atlassian. When I joined the team, I didn’t know what I was getting into – I liked front end development, and my team sat under the design umbrella. I bought a few books on design, but I had no idea what I had signed up for.

design week photo

Aundray Cheam, flickr

Part of my job is taking designs from the Atlassian Design Guidelines, and transforming that into a user interface library for our developers to use. I see the discrepancy between imagination and reality every day. The experiences our designers imagine are fantastic, but I often see designers and engineers unable to compromise when it comes to implementing the designs. If compromises cannot be made, it leads to bad, buggy implementations, or clunky experiences that do not match the user’s needs.

It’s imperative that our designers work closely with engineers, and the engineers with designers, in order to make educated and conscious compromises where necessary.


Large scale implementation of design is hard. Developing for web applications and the front end is particularly fraught with difficulty. In theory, we’d be able to tweak design by just changing CSS rules, but reality is not so simple. Overrides, hacks and edge cases are plentiful, and engineers need to be perpetually conscious of these in order to maintain a bug-free experience.

Software engineers are trained to think of edge cases for the software they design. When it comes to talking to designers, this type of thinking can easily influence our conversations. Engineers need to be realistic, but they should also know when the feedback is appropriate, and how to give it.

I recall an instance where a designer did some conceptual work for a new user experience in one of our products. The end result was amazing – it included automatic discovery and running of tests and intelligent repositories that set everything up for you. My feedback for them poked holes in the idea though – I asked, “How would this work? This isn’t what reality is like at all. This cannot
be done”.

Later though, I realised that this was not the point of the exercise – and I approached giving the feedback in the wrong way. I was thinking about the engineering work (my own experience), when I should have been thinking about the end user’s experience. Approaching the idea from the perspective of a user, it’s a fantastic idea. Thinking about the user’s experience first, I would have been able to compromise to achieve the same goals that the designer had – the best possible experience for our users.

design week photo

Aundray Cheam, flickr

Similarly, designers need to be aware of engineering concerns when it comes to their designs. Often these concerns are technical limitations. A good designer is not afraid of constraints though – if the designer is willing to compromise, and to understand the technical constraints fully, the designer and the engineer can create a better user experience for all users.

During this type of conversation, both parties must be aware of each other’s goals, and know when it’s sensible to compromise. The way to achieve this is through empathy – designers must be willing to understand the goals, concerns, and fears of engineers, and engineers should know why designers create the designs they do. Ultimately, engineers and designers should care about the experience of the user.

The imagineers at Disneyland were able to create a ride that simulated the sensation of flying. This ride is called “Soarin’ Over California”. The ride is constructed with a large screen in front of the participants, completely encompassing the field of vision. They sit in elevated chairs that move as the ride progresses.

soarin over California

Josh Hallett from Winter Haven, FL, USA – Soarin’ – Disney California Adventure

An idea like this is a compromise between engineering and design. Participants don’t actually fly – they don’t even move. However, the core experience, the sensation of flight, was maintained throughout the design and its implementation, and the ride’s users are happier for it.

Design and development, or imagination and engineering, are often thought of as opposed forces, or a line across which a tradeoff can be made – but if both disciplines are willing to fully understand the goals and constraints, we can make better products, experiences, and theme park rides for everyone.

Joshua Nelson

Developer at @Atlassian


Top comments (0)