Book

Exploring Freelancing

Navigate freelancing as a developer; find clients, manage contracts, ensure timely payment, and learn from experiences!

June 4, 2018

I remember going through the WWDC website to watch the keynote on my MacBook Air.

I wished I could watch it live someday. So, during the intro music, I started exploring the site to understand how the developers get a ticket for it. It was $1,600 for a developer, based on a lottery system. Ummm, no. I scrolled down and found this on the homepage.

Scholarships — Students and STEM organization members can apply to receive a conference ticket, lodging, and one year of membership in the Apple Developer Program.

Ahh, this is what I am looking for!

But now I would have to wait for a year to apply. I went through the requirements, a full project on Xcode Playgrounds/Swift Playgrounds with some essays. I had just started iOS Development, and my experience with Playgrounds was limited to declaring a few variables. And only 350 students were selected from all over the world, ranging from school students to PhDs. This seemed difficult, and so I gave up.

Fast Forward to April 16, 2019

4:25 a.m.

Subject: You’ve been awarded a WWDC19 Scholarship.

Let me go through the process of how I approached this scholarship, from which you can derive some value for next year!

Rewinding Back to March 14, 2019

My mid-semester break starts, and I don’t want to waste it again.

And I realized the submission period would start soon! At this point, I had some experience with iOS but no experience with making games at all.

Apple required you to* create an interactive scene in a Swift playground that can be experienced within three minutes using Swift Playgrounds 2.2 or Xcode 10.1. Be creative.*

And a few essays.

Ten days were given for the submission, from March 14, 2019, to March 24, 2019.

I’ll write a detailed day by day break up of my thought process and how I approached the scholarship with a growth mindset and the resources I used.

I’ll also give an introduction to my submission so we can follow along with the process of creating it.

Introduction

My Swift playground was created for children who have autism spectrum disorder. It aimed to give a fundamental education in matching, identifying, and naming of colors and shapes using assistive games.

To accomplish this, I created two games for the child to play in 3D and Augmented Reality:

  1. Matching, identifying, and naming colors.
  2. Matching, identifying, and naming shapes.

This step-by-step teaching strategy is used by special educators.

Using text-to-speech, the color is announced with the same text color label. For the shapes, tiny representative forms are displayed alongside the colored text label to identify.

The 3D geometries are tossed on the screen, which the child would tap if it is the same color/shape as identified before.

For each correct match, the geometry explodes with correct naming. The child gets a star, and there’s a morale-boosting “yay” sound in the background. There is no penalty for an incorrect match so as not to demotivate the child.

After five stars, the screen shows a “Congratulations!” message on the screen, and the game can be played again with the same identity so that you’ll be able to learn the color/shape.

To try out another color/shape, simply click on the back button on the upper left-hand corner and click on “Match color/shape.”

I loved the colors in the official logo of WWDC 2019 and tried to incorporate them everywhere in the interactive scene.

This was my first experience with SceneKit and ARKit since all my previous production applications were related to UIKit and networking. With hours of hard work and going through the documentation, I built this complete game.

I initially started out with SpriteKit to create 2D matching images. But I shifted to working with SceneKit and ARKit because visualizing 3D objects is more fun.

My purpose behind this playground was to make learning interactive through gaming and augmented reality. The buttons and shapes are made visually bigger for easy identification. It can also be played by preschool children.

Technology used:

  1. For the introduction screen, I used CAEmitterCell for the background effect, CAGradientLayer for the shimmering effect on the text, and I added in the tagline, “Write code. Blow minds. Make a difference.” For scaling up, I used CoreGraphics.
  2. AVFoundation to play the background music, andAVSynthesizer to produce synthesized speech from text utterances
  3. To make the scene appealing, I preferred fade in/fade out using CoreAnimation.
  4. For creating the 3D geometries, SceneKit is used with physicsBody for realistic forces. The explosion is generated using SCNParticleSystem.

Source of Idea

In special schools, the course curriculum is carried out through the traditional method of blackboard teaching, which is problematic for my mother and her students.

  1. She invests time to write on the board to teach, and she uses teaching-learning materials (TLM) ​that take time to create and are also expensive.
  2. She’s not able to give special attention according to the level of teaching required by a particular student if they fall behind.

One day, my mother came back home tired of trying to give her full attention to each and every individual student. I felt I should work on solving this problem, and the idea of creating a game for children with autism to help learn struck me. And I started working on it, putting my soul into designing a solution. The opportunity to showcase my work came along with the launch of this scholarship.

I had no previous knowledge of using SceneKit and ARKit. And it seemed difficult in the beginning phase to learn to work with new libraries. I worked 10 to 15 hours a day in a “reality distortion field” to commit myself and make a difference with my code.

Special schools get a lot of funding — enough to buy an iPad for every student. And as the students can’t sit in one place due to attention deficit, creating an interactive scene for the iPad seemed a lot better option.

I’m happy to have come up with this proposition of an idea to think beyond.

Before continuing, I should mention that I won the scholarship only because of my mother and her support. Without her, I wouldn’t have submitted the application.

March 14

First, I decided that I want to be **one of the 350 students. I **want to be accepted.

Positive start.

I spend the day reading the article “Want to win a WWDC scholarship? Previous attendees give their advice” and fantasizing about how amazing it would be to win the scholarship. At this point, I had no idea what I was going to create. Absolutely no idea.

I had an Android phone back then.

Also, I created a private GitHub repository to document the process every day of the days given. That’s how I’m writing this article a year and a half later.

March 15

The goal for the day was to understand what a submission looks like and how to create a Swift playground. For the latter, I started with Paul Hudson’s “How to create live playgrounds in Xcode.”

The next step was looking at the previous year’s submissions from 2017 and 2018. I was fascinated and awe-struck by Nick’s submissions and wanted to create some animation that’s like 10% of it.

When I started out, my goal was to create a simple game with SpriteKit. I prototyped the idea on a paper where it was just some scenes and nodes.

March 16

By the end of the previous day, I realized I wanted to do something better and chose to work with SceneKit instead.

By the end of the day, I had a prototype ready that could do the following:

  • Three boxes that you could shoot and they vanished.
  • Create the introduction screen and add music.

The introduction screen was just small particles of different colors from the WWDC stickers and texts.

Write code. Blow minds.

It took me hours and hours to select the best introductory music, but the end result was worth the effort.

March 17

I always started the day with positive motivation like, “Today is going to be a great day! I will smash my goals like anything.”

Even though at this point in time, I was just 20% done with the project.
I also decided to use ARKit for my project.

The goal for today was to create the second screen consisting of four activities. Clicking on them would start the game and add Voice support. But I didn’t hit a single goal. I was disappointed but knew I had come a long way and there was no turning back. All I needed to do was give my best in the next week.

March 18

I had completed only 20% at this point in time and was panicking. I somehow calmed down and started thinking with a clear mind.

I wireframed the levels in the game.

Level 1 — Only one color [Two geometries]

**Level 2 **— Two colors [Three geometries]

Level 3 — Three colors [Four geometries]

**Level 4 **— Four colors [Five geometries]

Intro Screen → Game Menu Screen → Game Screens → Either 3D or AR. That was my final goal for the project.

I also had this ambitious aim to implement eye-tracking (which was implemented in Apple’s Voice Control). But due to the lack of a TrueDepth iPad, I gave up on that idea.

March 19

At this point, I was 40% done. The introduction screen was perfect. The Main screen was done. I added basic functionality for the Shapes and Color Game. But I wasn’t able to do much that day because of going to college and getting the travel assistance letter. And I didn’t get it in the end.

March 20

I was exhausted. I was working 10–15 hours and wasn’t progressing much. Slept 14 hours that day.

Quoting my own words:

I am not sure how I am going to do anything. I am stuck now. I don’t know where to progress from here.

In the remaining hours, I added some more features to the game.

March 21

I didn’t sleep. By 7 a.m. in the morning, I already had the whole game running in augmented reality. And I did a lot of stuff, including adding a segmented control for changing between the 3D and AR version of the game.

This was a pivotal day in terms of boosting my shattered confidence. I realized it’s actions that lead to belief.

I also made the geometrical nodes explode and a pleasant sound for the explosion. More than 72 hours were left, and I was 50% done with my project.

But the design was with hardcoded bounds, working only in landscape mode.

March 22

I implemented an explosion and two levels in the game. It was getting hard now, and I needed a hell of a lot of motivation to continue further.

Just needed to persist for the next 50 hours.

March 23

Second to last day. 52 hours left. Just about 60% of the work was done. I had to do the remaining 40% in 52 hours. Was it possible? For an average Rudrank, no.

Those were the most resilient 52 hours of my life. I somehow would survive it.

I always found out the way of doing it, one way or another.

March 24

The last day was the most hectic day of the submission timeline. I implemented “Play again” and “Try again” buttons. I also added the back button and the stars for the score. After every correct match, there is the same match to make the child happy.

Around seven hours before the submission, I found a critical bug that was breaking the whole game. I was too tired to fix it and didn’t even want to submit it for submission.

My mother gave me the motivation to go through step by step and cover all the edge cases.

It all worked in the end.

This was the first time I pulled off 110+ hours a week, and I believed it would be all worth it. My idea is powerful and the implementation is neat. I just told myself I deserved to win.

After submitting at around two in the morning when the deadline was 5:30 a.m., I was exhausted, but I knew I gave my best and wouldn’t regret it if I didn’t win.

Lesson Learned

As cliché as it sounds, the biggest takeaway for you is to believe in yourself even when everything looks impossible.

Book

Exploring Freelancing

Navigate freelancing as a developer; find clients, manage contracts, ensure timely payment, and learn from experiences!