
Getting started with new technologies is usually a huge pain. Often I stumble around for hours trying to get an app's toolchain setup correctly. Instructions are usually like:
  
![][1]

Things get worse when I lead workshops for hundreds of enterprise developers where many are on Windows machines and not very comfortable with `cmd.exe`.

Experiencing this pain over-and-over is what led me to create [Typesafe Activator][2] as a smooth way to get started with Play Framework, Akka, and Scala. Developers have been thrilled with how easy taking their first step with Activator is but I never finished polishing the experience of the second step: App Deployment.

Over the past few months I've been working on a set of tools that make the roundtrip between deployment and local development super smooth with zero-CLI and zero-install. Check out a demo:
<iframe width="705" height="470" src="https://www.youtube.com/embed/Pa_FTRdqRuk" frameborder="0" allowfullscreen></iframe>  

Here is a summary of the "from scratch" experience:

  1. [Deploy the Click, Deploy, Develop][3] app on the cloud
  2. [Download the app's source][4]
  3. Run gulp from a file explorer to download Node, the app's dependencies, and Atom and then launch the Node / Express server and the Atom code editor
  4. Open the local app in a browser: <http://localhost:5000>
  5. Make a change in Atom to the `app.js` file
  6. Test the changes locally
  7. Login to Heroku via Atom
  8. Deploy the changes via Atom

That is one smooth roundtrip!

For more detailed docs on this flow, checkout the [Click, Deploy, Develop][5] project.

> Great dev experience starts with the simplest thing that can possibly work and has layered escape hatches to more complexity.

That kind of developer experience (DX) is something I've tried to do with this toolchain. It builds on top of tools that can be used directly by advanced users. Underneath the smooth DX is just a normal Node.js / Express app, a [Gulp][6] build, and the [Atom][7] code editor. Here are the pieces that I've built to polish the DX, creating the zero-CLI and zero-install experience:

  * [Gulp Launcher][8] - Bootstraps a Gulp-ready environment from nothing
  * [download-heroku-source][9] - A web app that lists your Heroku apps and downloads the source as a zip
  * [gulp-heroku-source-deployer][10] - A Gulp plugin that deploys sources on Heroku
  * [gulp-atom-downloader][11] - A Gulp plugin that downloads Atom
  * [atom-heroku-tools][12] - An Atom package that adds a menu for logging into Heroku

I hope that others find this useful for helping to give new users a great roundtrip developer experience. Let me know what you think.

Note: Currently [gulp-atom-downloader][11] does not support Linux because [there isn't a standalone zip download of Atom for Linux][13]. Hopefully we can get that resolved soon.

 [1]: https://i0.wp.com/seths.blog/wp-content/uploads/2014/01/6a00d83451b31569e2019aff29b7cd970c-450wi.jpg?ssl=1
 [2]: https://www.typesafe.com/get-started
 [3]: https://heroku.com/deploy?template=https://github.com/jamesward/click-deploy-develop
 [4]: https://download-heroku-source.herokuapp.com/
 [5]: https://github.com/jamesward/click-deploy-develop
 [6]: http://gulpjs.com/
 [7]: http://atom.io
 [8]: https://github.com/jamesward/gulp-launcher
 [9]: https://github.com/jamesward/download-heroku-source
 [10]: https://github.com/jamesward/gulp-heroku-source-deployer
 [11]: https://github.com/jamesward/gulp-atom-downloader
 [12]: https://github.com/jamesward/atom-heroku-tools
 [13]: https://github.com/atom/atom/issues/7102

