I’m Building an App.

This is the first post in a series of posts which will illuminate my journey to becoming a Full-Stack JavaScript Developer.

Why do I want to become a developer?

It’s always been in my nature to create – I’ve written, produced and recorded music, and built small websites through WordPress for years – I’ve always been a creative person with a love for computers and the Internet. However, for the majority of my life I did not believe these two sides of me had a shared destiny; I did not believe that coding was creative. Now I know that Code is Poetry.

The Plan

Build a single, complete mobile app using JavaScript which demonstrates the competence and tenacity required to be a JavaScript Developer.

My goal is to be hired as a professional JavaScript developer before 2019 is over. I have already spent the first few months of 2019 learning the basics of JavaScript and Web Development, just enough to be able to start building something of my own. Rather than get caught in the infamous “tutorial loop”, that is, jumping from online course to course copying code from an instructor, I’m going to dive in and build a complete project on my own.

My plan is to progressively enhance the app into a fully complete app, allowing me to step-by-step learn important principles of development without overwhelming myself while at the same time practice my learning by applying them to a real app.

Why build just one app?

A lot of junior developers will have multiple projects to list off in their portfolio but will not have anything actually published to one of the app stores. After reading advice from senior developers it’s clear to me that a single, complete, published app tells more about an aspiring developer than several incomplete and unpublished apps.

After thinking critically about how to approach my JavaScript journey I’ve decided to build a single app and make it as complete as possible, then, publish it for users to download and use.

How will I do this?

By building my own app from scratch and progressively enhancing the app, learning and practicing core development concepts essential to becoming a professional developer.

What is the app?

The app will be a very simple “contacts manager” app which is designed to help keep all of your contact information in one place – address, phone, email, and birthday.

I have a terrible time remembering birthdays so I want a way to not only look them up but to be reminded of upcoming birthdays.

How am I building it?

The front-end architecture of the app will be created through React Native – an exciting and relatively new JavaScript framework which allows for building native mobile apps entirely using JavaScript.

The back-end architecture will be done using Firebase – a relatively easy-to-use development platform which can offload some or all of the server-side responsibilities an app would normally need. For this app I’ll be using the following from Firebase:

  • Firebase Auth – user creation, deletion, authentication, credential storage and password reset. This allows me to quickly add login/auth capabilities to my app without building my own totally secure backend server.
  • Realtime Database – storage and retrieval of data without using a separate query language. Realtime Database also has the ability to set access rules(authorization) to make sure that users can only access and modify their own data.

What are the core steps?

  1. Build the core of the app first. Add all of the necessary features to get the app working and get it to an MVP state.
  2. Spice it up. Add UX improvements such as input validation as well as adding hints to devices when to use specific types of keyboards. For example, when inputting a phone number, use the number keypad instead of the standard keyboard.
  3. Beef up the security. Prevent unauthorized data access/modification as well as prevent injection of unwanted or dangerous data into the app database.
  4. Reduce potential bugs. Allow me to more confidently refactor my code in the future by adding Unit Tests through Jest.
  5. Improve clarity. Help document the intent of functions/components by adding Typescript compiling. Help prevent accidental data mutation by adding static typing to variables, props, and state.
  6. Caching. Help reduce tight coupling to an active internet connection by adding caching for some amount of offline access. This will also speed up performance.
  7. Test performance. Use performance debugging to make sure it is smooth and has a native app feel. If possible, adhere to the 16 ms golden rule.
  8. Document the code. For readability, document the code within the app code itself. For longevity and ease of understanding, create a readme file and include it on GitHub.
  9. Publish. Most importantly, publish the app to an app store and have some people test it. Publish to GitHub.
  10. Feedback. Take feedback from #9 and refactor/fix issues.

What if I fail?

That’s not going to happen.

I will hit snags along the way. I will get stuck trying to fix a tricky bug. I will pull my hair out(what’s left of it, anyway) trying to resolve esoteric NPM errors. But I will not fail. I will not give up.

These blog posts are additional pressure I need to cross the finish line.

It’s not a question of

Can I become a developer?

It’s a question of

When will I become a developer?

5 responses to “I’m Building an App.”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: