# [REDACTED]’s Atlas Camp 2019 Talk Proposal
## Track: Advanced App Development
Collaborate and hear advanced topics around app development. For example Data Center/Server, testing, performance tuning, and scaling.
## Title:
Developing Cloud Apps with Serverless: The Essentials
## Abstract:
The quality and success of an app is not just measured by the number of satisfied customer reviews for every feature shipped. It is also measured by how well it was built from the ground up. They say it takes a village to raise a child. Similar with apps, it takes an efficient and healthy development environment to build a product of quality. We’ll explore some of the tools and approach used to make up an ideal development setup for building apps for Confluence Cloud the Serverless way.
## Outline:
**Description:** My presentation will walk the audience through the main criteria that makes an almost perfect development environment, from tooling to developer experience when building a Serverless app written in Javascript for Confluence Cloud leveraging services in the AWS ecosystem.
**Intended target audience:** Software Engineering or Product teams who are just getting started with building apps on the Atlassian platform especially Confluence Cloud and anyone else who might be interested.
**Why this topic might be relevant:** As part of a software engineering team that builds apps on Confluence Cloud with Serverless, we’ve experienced and improved on some pain points where it disrupts our development and productivity flow. We feel responsible to share what we’ve learned with others so they can use this as a foundation to continue or start building great Serverless apps in the Atlassian ecosystem.
**Will there be a demo?:** If time permits, I can show how I get my local development environment up and running on my machine for a Confluence Cloud app and making a small change on my code editor before seeing that change reflected on my Cloud instance.
**Estimated total live demo time:** 3 to 5 minutes.
**Requirement(s) for demo:** Stable internet connectivity.
### Talking points:
***Begin With The End In Mind:*** What would an ideal dev setup look like?
- A new engineer to the team should be able to just clone the project, read through some notes & instructions in README, run it, and start hacking under 5 minutes - whether its features, bug fixes or improvements.
**Okay, now that we know what it should look like, how do we get there?**
- ***Communication*** in the form of well-written Documentation
- Communicate known issues, pre-requisites, steps on processes, scope, commands, etc.
- e.g. Document steps on how to setup a Confluence Cloud dev instance.
- A well informed team on project specs gives confidence during app development.
- **Identify & Implement** necessary tooling
- Serverless framework
- project’s backbone
- serverless-offline plugin
- emulates AWS API Gateway and AWS Lambda locally
- serverless-dynamodb-local plugin
- installs DynamoDB locally
- serverless-webpack plugin
- bundle lambdas written in Javascript with webpack
- handle loading resources like stylesheets and static assets
- yarn workspace & lerna
- Dependencies & package management
- app/ & frontend/ as packages
- **Orchestrate all the things**
- Order of serverless plugins is important for them to work properly
- serverless-offline must be last!

- Utilise npm scripts to simplify long or chained commands

- An npm script which we’re proud of is yarn dev
- yarn dev: runs a script that opens a secured ngrok url to our localhost, builds and installs the app using UPM’s REST API on our Cloud instance with that url, which calls a lambda function that return the app's descriptor.
- **Revise, Improve & Reiterate**
- Continuously look for ways to improve developer experience so you don’t get bogged down with unnecessary overhead during app development
- e.g. We recently moved a common functionality that is used across multiple projects which generates and authenticates JWT tokens to a shared library to keep maintenance low & easy
- Implemented API Gateway Proxy Integration to solve NET::ERR_CERT_AUTHORITY_INVALID error when loading static assets from localhost.
**Key takeaways**
- ***Achieve more by doing less:*** A seamless development experience allows developers to focus on making a better experience for their users.
- Designing an ideal development experience for you and your team is just as important as writing tests to ensure code and app quality.
- You can first start out simple and manual like we did. Once you find a process or steps that you’re doing almost every time before you start hacking, seek to automate or simplify that step.