What would be a dream way of creating apps?

Apps are marvelous. But the way apps are created is still stuck in the dark ages. Apple recently announced Swift, but at the end of the day is this anything more than a catch up with the rest of the industry? The three main hurdles of learning Xcode, understanding how to program and learning the Cocoa Touch framework are still there. As is the lack of any change to how designers and developer can better work together. What would be a genuine game changer?


No environment to set up (Just works).

With Android and even iOS, getting to the point where you can write a line of code, let alone see something run on a device is torture. Setting up a developer environment is countless gigabytes of downloads. Even with Google and Stack Exchange to consult, getting a working setup with all the right SDK's, plugins, certificates and other junk it a chore. 

It shouldn't have to be this way. Everyone should not suffer just to appease developers that want to be able to tinker with everything. Nor should it be acceptable to leave these issues unfixed just because developers are willing to spend a lot of time and effort getting a working setup. 

The dream would be a system as easy as downloading and using a new Twitter client. It should be possible to download a tool and have some code running on an actual device in less than five minutes. This would both make starting to develop apps accessible to ordinary people and also free millions of developers from having to go through the same horrible setup process.


Bring designers and developers together (Tools for app creators).

For historical reasons mobile apps are created by separate designers and developers. There is a lot of nonsense that these separate roles are fundamentally separate and even require different tools. This in turn has had the effect of cementing in place this absurd difference. The question should not be how can we make designers or developers happy? The questions should be what can we do to make app creation as easy as possible? Give everyone working on apps a shared toolchain dedicated to the problems of app creation.


Don't dumb it down (No tinker toys)

The best solution to creating dynamic logic in an app is a modern programming language. Provide just that and a great editor to compliment it. On the other hand the best way to create a visual layout and animations are visual tools. Don't listen to developers so stuck in their ways they want to do everything in code and don't listen to the designers so terrified of coding that this side is hidden away. Give smart people the best possible tools. Also the code and visual side should play together seamlessly. Don't hide the code away or have visual tools that generate un-editable code. Instead of sticking with a fantasy that apps can ever be created without code fix the main problems with writing code and make it more accessible to all. 


Get designers hands on.

It is 2014 and it is crazy that for most mobile apps every UI elements is positioned by a developer. If a designer wants to adjust how pixel perfect a button placement is, or tweak a font they have to ask a developer to do it. In the time it takes to reach an understanding countless other tweaks could have been made. The problem is even with tools such as Interface Builder it is far too hard for designers to get hands on. Editing the code often seems impractical. But if designers can hand edit a web site, there is no reason we couldn't have a system where they could get hands on with the real app design.


A language for thinking about user experiences.

Back in the 70's the first object orientated languages were created to enable the Graphical User Interface. Code objects had the potential to map to real objects in the interface. Over 40 years on this way of developing User Interfaces still dominates and it sucks. When designers run away screaming from the idea of coding this is one of the main culprits. These languages don't allow you to think in terms of what you want. You don't directly express concepts such as text, images, buttons, animations and visual effects. Instead you describe how an abstract engine running on a computer should serve these up. You spend ages translating the 'what' into a 'how' and it gets in the way of coming up with a great design.

The dream would be a language that along with the ability to handle complex logic, would also allow the direct expression of the user experience in terms of what is needed, not how the machine should serve it up. It should provide the basic elements needed to allow people to easily break down even the most complex design into manageable and understandable pieces. Just as with the developer  environment, all the scary stuff should just be abstracted away and all the common parts of a user experience should just work without configuration.


So productive it renders separate prototypes pointless.

There is an idea that fundamentally you cannot try out ideas (prototype) with the same language and tools as used to ship the production version of an app. Instead separate tools and scripting languages are used where you can create prototypes which vary in fidelity. But there is no law of computer science that states it has to be this way. Maybe as engineers are all masochists there has been little pressure to address these problem. But think of the benefits if a production ready software environment was as approachable and productive as the ones for making prototypes. Currently so much work goes into throw away prototypes and then duplicate work goes into recreating them again with the actual shipping technology. The prototypes often cheat and hide designs that cannot be implemented for real. Designers can be found wasting valuable time fixing issues that are part of the prototyping tool, and not the real app. There is often no access to real device functionality in these tools. No real HTTP and network support. No using cool features such as the camera, accelerometer or location features. Often even text input has to be faked. Then there is a lack of access to real data. You can make an amazing video of zippy animations using After Effects. But then the real app has to contend with network connections and they types or real content people own, not the glossy stock photos demos often use. If you could design with a real device and real data these problems would no longer go hidden till late in the design process.


See a design run on a mobile device as fast as you can think it (Live development)

There is this magical yet horrifying point during an apps development. After weeks of design effort a developer creates the first real version of the app. This is then deployed to a phone or tablet, you put finger to glass, and... your app sucks. It should have been obvious, but somehow when the design lived on paper on in a contrived fake prototype obvious problems were hidden. Then you ask for a change and the cycle starts again. Even the simplest change to an iOS app takes about 30 seconds to build and deploy back to a phone. This stop start process makes it expensive to iterate and can try the patience of even the most hardened engineer.

The dream would be seeing your ideas appear instantly on a real mobile device. The speed of thought is perhaps unobtainable, but how about at the speed you can type?


Capable of delivering the absolute best of the best apps (Performance)

The App Store and even the Play Store are brutal places to compete. Just good enough does not cut it. What are the best apps? They are the ones that don't drain the battery, that don't crash due to hogging memory. They open instantly and have the silkiest smoothest most responsive user interface possible. Sixty frames per second with no dropped frames or stutters isn't an aspiration, it is the bare minimum. Not only is performance important but so is the ability to get the best out of the current generation of smart devices which often have amazing graphical power that has gone untapped.


An environment like this would make teams far more productive. It would change the dynamics of how designers and developers work together. It would also be a really great way for people to learn how to write software and turn their own app ideas into reality. Now this would be a game changer. But right now it doesn't seem to be happening.