<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mayank Badola</title>
    <description>The latest articles on DEV Community by Mayank Badola (@mbadola).</description>
    <link>https://dev.to/mbadola</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F353527%2F076f5201-7448-4cde-aadc-c7aa2d1e7c6f.jpg</url>
      <title>DEV Community: Mayank Badola</title>
      <link>https://dev.to/mbadola</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mbadola"/>
    <language>en</language>
    <item>
      <title>Serving EC2 traffic over HTTPS</title>
      <dc:creator>Mayank Badola</dc:creator>
      <pubDate>Fri, 12 Jun 2020 13:10:21 +0000</pubDate>
      <link>https://dev.to/mbadola/serving-ec2-traffic-over-https-4mi7</link>
      <guid>https://dev.to/mbadola/serving-ec2-traffic-over-https-4mi7</guid>
      <description>&lt;h2&gt;
  
  
  Prologue
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;You may skip this section if you're aware of how a HTTPS connection works.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As developers, we need to ensure that interactive web applications can securely transmit data (HTTPS) over public network. Systems achieve this using &lt;strong&gt;T&lt;/strong&gt;ransport &lt;strong&gt;L&lt;/strong&gt;ayer &lt;strong&gt;S&lt;/strong&gt;ecurity (TLS), a successor to the widely known &lt;strong&gt;S&lt;/strong&gt;ecure &lt;strong&gt;S&lt;/strong&gt;ockets &lt;strong&gt;L&lt;/strong&gt;ayer (SSL) protocol.&lt;/p&gt;

&lt;p&gt;In crude terms, TLS (handshake) is an encryption mechanism, where participants &lt;a href="https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/#:~:text=During%20the%20course%20of%20a,together%20will%20do%20the%20following%3A&amp;amp;text=Authenticate%20the%20identity%20of%20the,after%20the%20handshake%20is%20complete" rel="noopener noreferrer"&gt;decide on a few parameters&lt;/a&gt; to setup a secure connection.&lt;/p&gt;

&lt;p&gt;So how do the actors (systems) make this decision? &lt;br&gt;
They do it by using a TLS certificate.&lt;/p&gt;

&lt;p&gt;A certificate is an integral part of spinning up a HTTPS server. Anyone can &lt;a href="https://www.openssl.org/" rel="noopener noreferrer"&gt;create a certificate&lt;/a&gt; and provision a HTTPS-complaint actor using it, but since no one is a trusted entity on the internet, using a &lt;a href="https://en.wikipedia.org/wiki/Self-signed_certificate#:~:text=In%20cryptography%20and%20computer%20security,a%20CA%20aim%20to%20provide." rel="noopener noreferrer"&gt;self-signed certificate&lt;/a&gt; to setup a secure connection is not recommended.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjgz919by4thm38ldk08d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjgz919by4thm38ldk08d.png" alt="Self-Signed Certificate Chrome Warning"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;To be able to serve HTTPS traffic, your server needs a TLS certificate signed by a certificate/certification authority (CA). These authorities perform the role of a trustworthy third party between two participants that don't trust each other.&lt;/p&gt;

&lt;p&gt;In this post, we'll look at how to generate and use TLS certificates from &lt;a href="https://letsencrypt.org/" rel="noopener noreferrer"&gt;LetsEncrypt&lt;/a&gt; and &lt;a href="https://aws.amazon.com/certificate-manager/" rel="noopener noreferrer"&gt;AWS Certificate Manager&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pre-requisites
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are student, check out &lt;a href="https://education.github.com/pack" rel="noopener noreferrer"&gt;this&lt;/a&gt; amazing initiative from GitHub. You should be able to setup the pre-requisites for free using the promotions available as a part of the student developer program.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Provision an EC2 instance&lt;/strong&gt;&lt;br&gt;
Follow &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html" rel="noopener noreferrer"&gt;this&lt;/a&gt; extensive documentation to create a compute resource on AWS.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For our exercise, you can select &lt;code&gt;t2.nano&lt;/code&gt; as the instance type (cheapest option, unless you qualify for the &lt;a href="https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&amp;amp;all-free-tier.sort-order=asc" rel="noopener noreferrer"&gt;free tier&lt;/a&gt; usage) and &lt;code&gt;Ubuntu 18.04&lt;/code&gt; as the AMI.&lt;br&gt;&lt;br&gt;
As you configure your instance, do not forget to setup/assign a &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html" rel="noopener noreferrer"&gt;security group&lt;/a&gt; policy that allows inbound connections to port 22, 80 and 443,  &lt;br&gt;
  &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fd0s2rirmjsl44e3mioqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fd0s2rirmjsl44e3mioqu.png" alt="Security Group Inbound Rules"&gt;&lt;/a&gt;  &lt;br&gt;
and make sure AWS launches your instance with a public IP address (verify on EC2 &lt;a href="https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#Instances:sort=statusChecks" rel="noopener noreferrer"&gt;dashboard&lt;/a&gt;).&lt;br&gt;
      &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1z8en23pl1wqhsvzdsoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1z8en23pl1wqhsvzdsoh.png" alt="Instance Description"&gt;&lt;/a&gt;  &lt;br&gt;
Keep the instance IP address handy, along with the SSH key you generated/assigned.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deploy an application&lt;/strong&gt;&lt;br&gt;
Refer to &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html" rel="noopener noreferrer"&gt;this&lt;/a&gt; document if you're not familiar with how to remotely access your EC2 instance. As an example, we will be deploying (executing) a "&lt;em&gt;hello world&lt;/em&gt;" node(js) web application using SSH.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are using a linux-based system for our exercise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open a terminal and execute the following command :&lt;br&gt;
&lt;code&gt;ssh -i /path/to/ssh-key-name.pem ubuntu@instance-public-ip-addr&lt;/code&gt;&lt;br&gt;
  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fv8dx2d7lwmrfp3ez40ti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fv8dx2d7lwmrfp3ez40ti.png" alt="EC2 ssh"&gt;&lt;/a&gt;  &lt;br&gt;
If you see something like the above screenshot, you've successfully connected to your EC2 instance. Let's run a few commands now, to deploy our example application.&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

# Update platform package manager
sudo apt-get update

# Install Node Package Manager
sudo apt-get install npm

# Download application codebase
git clone https://github.com/fhinkel/nodejs-hello-world.git

# Navigate into codebase directory
cd nodejs-hello-world

# Download application dependencies
npm install

# Execute the application
sudo npm start &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;

# Terminate connection to the instance
exit
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    If you were successfully able to execute the above commands, go ahead and open a browser on your system. Type in your instance's public IP address and trigger a search. What do you see?

&amp;amp;nbsp;&amp;amp;nbsp;
    ![Not Secure Hello World](https://dev-to-uploads.s3.amazonaws.com/i/cfdt71gearf6mjnozjd1.png)

- **Get a domain name**&amp;amp;#13;For demonstration, we will be using [Namecheap](https://www.namecheap.com/) as our [domain name registrar](https://en.wikipedia.org/wiki/Domain_name_registrar) but feel free to purchase your domain from any other provider. Just make sure to opt-out of any hosting add-ons as AWS is already the host for your application.

&amp;amp;nbsp;&amp;amp;nbsp;
## How To ([LetsEncrypt](https://letsencrypt.org/))

I'll be generating a LetsEncrypt-issued certificate for **_test.mayankbadola.com_** (managed through [Namecheap](https://www.namecheap.com/)) and use it to interact with our application over HTTPS. You can follow similar steps for your domain.

### Point your domain to the EC2 instance

&amp;gt; You might have to wait for upto one hour, as DNS entries takes time to propagate

- Get to domain management page
![Namecheap dashboard](https://dev-to-uploads.s3.amazonaws.com/i/orq8sh35ovz5o3ojwwb5.png)&amp;amp;nbsp;&amp;amp;nbsp;

- Open DNS settings
![Namecheap advanced DNS](https://dev-to-uploads.s3.amazonaws.com/i/f03zlhzfbk5sffw9cv37.png)&amp;amp;nbsp;&amp;amp;nbsp;

- Add a type "A" record with the value as the public IP address of your EC2 instance. The host field maps to the sub-domain, so I've put "test" there. If you're mapping the instance to your apex domain, put a "@" instead (or whatever your registrar interprets as the apex domain).
![DNS entry](https://dev-to-uploads.s3.amazonaws.com/i/jaoyrn65s1kyypig45i7.png)&amp;amp;nbsp;&amp;amp;nbsp;

- Visit your URL
![Hello world with domain](https://dev-to-uploads.s3.amazonaws.com/i/ag2rsu07ligcmlf0ruhm.png)

### Setup [Nginx](https://www.nginx.com/)
Nginx will serve as a reverse proxy, so we'll have to stop our application for a bit (as it is currently listening on port 80) and update it to start listening on port 8080.

Log into your instance using SSH and leverage the following commands to achieve the above.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Stop the application using the PID of your application
&lt;/h1&gt;

&lt;p&gt;ps -aux | grep node&lt;/p&gt;

&lt;h1&gt;
  
  
  root      8217  0.0  5.9 922544 29228 ?        Sl   09:26   0:00 node index.js
&lt;/h1&gt;

&lt;p&gt;sudo kill -9 [application_pid]&lt;/p&gt;

&lt;h1&gt;
  
  
  Use vim to update port (from 80 to 8080) for your application
&lt;/h1&gt;

&lt;h1&gt;
  
  
  You can choose any port which is not accessible from outside the instance
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Navigate to your codebase directory first
&lt;/h1&gt;

&lt;p&gt;vim index.js&lt;/p&gt;

&lt;h1&gt;
  
  
  Restart the application
&lt;/h1&gt;

&lt;p&gt;sudo npm start &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/p&gt;

&lt;h1&gt;
  
  
  Install and start nginx
&lt;/h1&gt;

&lt;p&gt;sudo apt-get install nginx&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![Insecure Nginx Welcome](https://dev-to-uploads.s3.amazonaws.com/i/uimcbxk9ztkrw5mdpted.png)

### Provision (and Install) the Certificate
We will use [Certbot](https://certbot.eff.org/) to issue certificates signed by LetsEncrypt.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Add certbot PPA
&lt;/h1&gt;

&lt;p&gt;sudo apt-get install software-properties-common&lt;br&gt;
sudo add-apt-repository ppa:certbot/certbot&lt;br&gt;
sudo apt-get update&lt;/p&gt;

&lt;h1&gt;
  
  
  Install certbot
&lt;/h1&gt;

&lt;p&gt;sudo apt-get install certbot python3-certbot-nginx&lt;/p&gt;

&lt;h1&gt;
  
  
  Get certificates and setup for use with nginx
&lt;/h1&gt;

&lt;h1&gt;
  
  
  When prompted, setup redirection of port 80 to 443
&lt;/h1&gt;

&lt;h1&gt;
  
  
  that will upgrade HTTP request to HTTPS
&lt;/h1&gt;

&lt;p&gt;sudo certbot --nginx&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
![Certificate](https://dev-to-uploads.s3.amazonaws.com/i/pxpok2rv0szmdq7b2ile.png)

Nginx should now be serving its static page over HTTPS, but we want to serve our application instead, so let's add a routing rule for that.

Open nginx configuration

`sudo vim /etc/nginx/sites-available/default`

and replace existing settings within the "location /" section of the port 443 listener, with the following :

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;proxy_pass &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;;&lt;br&gt;
proxy_http_version 1.1;&lt;br&gt;
proxy_set_header Upgrade $http_upgrade;&lt;br&gt;
proxy_set_header Connection 'upgrade';&lt;br&gt;
proxy_set_header Host $host;&lt;br&gt;
proxy_cache_bypass $http_upgrade;&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Save this file and restart nginx.

`sudo systemctl restart nginx`

At this point, you've installed a TLS certificate on nginx, added a redirection for port 80 traffic to port 443 and are forwarding port 443 traffic to port 8080.

Time to visit your secure application. Don't forget the _https://_ prefix!

![Secure Hello World with LetsEncrypt](https://dev-to-uploads.s3.amazonaws.com/i/uf756g7p4kbfdkduhxow.png)

### Retrospection
* Generating certificates using LetsEncrypt is hosting agnostic. If you have a public IP address, a domain and SSH access to your deployment environment, you can generate a TLS certificate for your application.
* We were using nginx because of the certbot nginx setup which renews certificates automatically and reloads nginx configuration. You can run a "https" server as well but then you'd miss out on the automated renewed certificate reload.
* This example works for a "hack" as having nginx on the same instance as your application is not a scalable setup. If you want to scale, better to provision an instance which uses nginx to do load balancing as well for your application stack.
* We had to do instance bootstrapping (run scripts) in order to enable HTTPS connectivity. There will be effort involved to automate all of those steps.


&amp;amp;nbsp;&amp;amp;nbsp;
## How To ([AWS Certificate Manager](https://aws.amazon.com/certificate-manager/))

In this exercise, we'll be generating an Amazon-issued certificate for **_*.mayankbadola.me_** (managed through [Namecheap](https://www.namecheap.com/)) and use it to interact with our application through **_https://test.mayankbadola.me_**. The (\*) implies that the certificate can be used to identify all of the sub-domains of **_mayankbadola.me_**. So, we can re-use this same certificate across multiple applications, as long as they are fronted by **_(\*.)mayankbadola.me_**.

### Provision Certificate
Visit [ACM dashboard](https://us-west-2.console.aws.amazon.com/acm/home?region=us-west-2#/) and "Request a certificate".

![Request a certificate](https://dev-to-uploads.s3.amazonaws.com/i/kpb95uo7kyntsq3cf7hz.png)

By default, you'll be provisioning a public certificate, which is what we want.

![Request public cert](https://dev-to-uploads.s3.amazonaws.com/i/vixt76fr4kg188ci9nj8.png)

**Step 1**
![Step 1](https://dev-to-uploads.s3.amazonaws.com/i/qji095w949d8q1roh0p9.png)

**Step 2**
![Step 2](https://dev-to-uploads.s3.amazonaws.com/i/txynbdonp7ganeawn3rw.png)

Finish the rest of the steps (fast-forward to Step 5), where ACM will provide you a "CNAME" record that needs to be added to your domain's DNS configuration.

![CNAME entry](https://dev-to-uploads.s3.amazonaws.com/i/6ctv959tzzkqdjf5atzm.png)

Visit your domain's DNS settings page and add the "CNAME" entry requested by ACM.

![ACM CNAME Record](https://dev-to-uploads.s3.amazonaws.com/i/fspmk3hjkrryv4rl3ewm.png)

The "Name" provided by AWS is actually a sub-domain ACM will use to verify that you own the domain you've requested the certificate for. As my domain (_mayankbadola.me_) is managed through Namecheap, while adding the CNAME record, I will take out the sub-domain prefix from the "Name" field (everything before ".mayankbadola.me.") to insert into the "Host" entry. The "Value" field will be copied over as-is.

Wait for the usual DNS propagation delays for the certificate status to change from Pending to Issued.

![Certificate ACM](https://dev-to-uploads.s3.amazonaws.com/i/kg4akw1ypc38e4raxi1l.png)

We will now install this certificate for use with your application.

### Create a Load Balancer and attach our EC2 instance to it
Let's [provision a load balancer](https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#LoadBalancers:sort=loadBalancerName) which will take care of managing a secure connection on behalf of our application and forward HTTP requests to our EC2 instance.

![Load Balancer Create](https://dev-to-uploads.s3.amazonaws.com/i/vsvshxzmyisuttq74s61.png)

For our exercise, we will create a classic load balancer.

![CLB](https://dev-to-uploads.s3.amazonaws.com/i/cyzjfp6gij08ufm2zxd3.png)

**Step 1**
Assign a name to your load balancer and update the incoming load balancer protocol (HTTPS) and the instance protocol (HTTP).

![LB Step 1](https://dev-to-uploads.s3.amazonaws.com/i/x6pgg08ucqa84gf1pzxr.png)

**Step 2**
Add a security group which allows inbound connections to port 443 (HTTPS) and outbound connections to port 80 (HTTP).

**Step 3**
Select "Choose a certificate from ACM" and assign the certificate we provisioned using ACM. For now, you can ignore cipher settings.

![LB Step 3](https://dev-to-uploads.s3.amazonaws.com/i/yjif405lp3tsqa4jindv.png)

**Step 4**
Just update the ping path to "/" and continue to the next step.

**Step 5**
Select the EC2 instance where your application is running.

![LB Step 5](https://dev-to-uploads.s3.amazonaws.com/i/kjoyiyzofkjnn0f6edxd.png)

Skip through the rest of the steps and submit the LB creation request. In a few seconds, you should have the load balancer ready.

![LB Created](https://dev-to-uploads.s3.amazonaws.com/i/veehtv41vp85le6qg5rp.png)

We now have to map our domain name to the load balancer's DNS name. You can find the DNS name within the description section for the load balancer.

![LB DNS name](https://dev-to-uploads.s3.amazonaws.com/i/ll4lrbnoejmysug55c42.png)

Create a CNAME record on your domain's DNS settings page mapping a domain entry to the load balancer's DNS name.

&amp;gt; I'm adding an entry for test.mayankbadola.me

![LB CNAME entry](https://dev-to-uploads.s3.amazonaws.com/i/7phevgcfuaocjhqh371w.png)

That's it! We've successfully setup a secure connection to our application using AWS Certificate Manager.

![Secure Hello World with ACM](https://dev-to-uploads.s3.amazonaws.com/i/uf756g7p4kbfdkduhxow.png)

### Retrospection
* ACM automatically renews certificates.
* Generating certificates using ACM is pretty straight-forward and doesn't need any bootstrapping effort. As ACM is free and it integrates well with AWS, I would recommend you to use ACM if AWS is your infrastructure provider.
* In our example, we've exposed our instance to internet traffic on port 80, which means that it is possible to by-pass our secure connection. Ideally, you have to make sure that the instances are not accessible from the outside world. That way, only the load-balancer will be the ingress point for public traffic for our application.
* You can automate all of these steps quite easily if your domain is managed through [Route53](https://aws.amazon.com/route53/).


&amp;amp;nbsp;&amp;amp;nbsp;
## Conclusion

I hope this post was able to explain briefly how "HTTPS" works and what does it take to enable it for your applications, although, be careful with using the exact setups shared in this post for your production applications.

Alternatively, if this is too much of an infrastructure hassle and you're a frontend developer, I recently got acquainted to [NextJS](https://nextjs.org/), which just might be the answer you need.

Thanks for your time and interest!

---



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>aws</category>
      <category>security</category>
    </item>
    <item>
      <title>Move slow, break free.</title>
      <dc:creator>Mayank Badola</dc:creator>
      <pubDate>Mon, 23 Mar 2020 16:50:37 +0000</pubDate>
      <link>https://dev.to/mbadola/move-slow-break-free-4n1k</link>
      <guid>https://dev.to/mbadola/move-slow-break-free-4n1k</guid>
      <description>&lt;p&gt;I’ve been lucky enough to experience a really strong growth trajectory 📈 at work, but that success also led me astray. It wasn’t until later that I realised the growth I was pursuing so relentlessly, was &lt;strong&gt;not my success&lt;/strong&gt; to begin with. I was conforming to peer perception and what being successful meant to the company; in my misplaced but ambitious pursuit of validation, I never defined what success meant to me.&lt;/p&gt;

&lt;p&gt;For a simple test, if your success makes you comfortable, then that’s a red herring. Comfort breeds complacency, and with that, you’ll fan the flame 🔥 of entitlement. &lt;/p&gt;

&lt;p&gt;I got lost in the rut of undefined success and regressed to the belief of being extremely competent and capable of investing into multiple career tracks, without any compromise; the unwavering trust that if I move fast in every possible direction, I’ll make it sooner to at-least one of them.&lt;/p&gt;

&lt;p&gt;A month back, I survived a lay-off at work, but the experience encouraged me to do a retrospection of &lt;strong&gt;my growth&lt;/strong&gt; as a developer. &lt;br&gt;
The process reminded of a valuable lesson I learnt during my undergrad; a lesson which shaped me into becoming a humble, passionate and resourceful developer at the end of my engineering program …&lt;/p&gt;

&lt;p&gt;I used to lean towards experiential learning, so while most of my classmates were focussing on theory, I was learning how to build websites, write APIs and contribute to open-source software. Folks in my college started to compliment me with how I’m preparing for the real world and will be extremely hireable, and somehow, my passion and persistence towards learning mutated into seeking that validation and status.&lt;/p&gt;

&lt;p&gt;In the sixth semester, my college decided to host a &lt;a href="https://en.wikipedia.org/wiki/Hackathon"&gt;hackathon&lt;/a&gt;. I had never participated in one before, but was of the opinion that it needed participants to have some hands-on skills, which was enough for me to assume that it’ll be a breeze.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"I was great at development".&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The day of the event, I didn’t seek inputs from the team and started forcing an idea too complex to be presentable within 24 hours. We had no prior knowledge and analysis to support the idea, and zero collaboration within the team. &lt;br&gt;
In my arrogance and obsession with my competency, I pushed hard to chase an unrealistic grand result, ending up with nada.&lt;/p&gt;

&lt;p&gt;I craved validation so much that I let down my team and missed out on learning from folks who’ve been participating in a lot of hackathons.&lt;/p&gt;

&lt;p&gt;That’s when the epiphany hit me; I had lost my way. 😕&lt;br&gt;
I drove fast and missed a crucial turn. &lt;br&gt;
In an attempt to juggle 🤹‍♂️ a lot, to protect the perception of my worth, I failed 💔 my passion ...&lt;/p&gt;

&lt;p&gt;It was back then when I decided to focus more on my personal growth and satisfaction. To do something each day, to keep me motivated for the next. &lt;/p&gt;

&lt;p&gt;It feels good to be reacquainted with that thought.&lt;br&gt;
After all, we’re all on a road trip, so let’s slow down and enjoy it while it lasts! &lt;/p&gt;

</description>
      <category>productivity</category>
      <category>growth</category>
      <category>life</category>
    </item>
  </channel>
</rss>
