<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://froghramar.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://froghramar.com/" rel="alternate" type="text/html" /><updated>2025-12-11T23:24:15+00:00</updated><id>https://froghramar.com/feed.xml</id><title type="html">Feroz Ahmmed</title><subtitle>Top C#, .NET and Azure developer in Dhaka, Bangladesh</subtitle><entry><title type="html">Why I Built a JSON-Based Resume Generator</title><link href="https://froghramar.com/pet-projects/2025/12/11/json-based-resume-generator.html" rel="alternate" type="text/html" title="Why I Built a JSON-Based Resume Generator" /><published>2025-12-11T15:35:17+00:00</published><updated>2025-12-11T15:35:17+00:00</updated><id>https://froghramar.com/pet-projects/2025/12/11/json-based-resume-generator</id><content type="html" xml:base="https://froghramar.com/pet-projects/2025/12/11/json-based-resume-generator.html"><![CDATA[<p>Over the years, I’ve updated my resume dozens of times. Each update meant opening a Word document, adjusting formatting, ensuring consistency across sections, and then converting to PDF. It was tedious, error-prone, and frankly, not how a developer should manage structured data.</p>

<p>So I built something better: a JSON-based resume generator that separates content from presentation, validates data automatically, and outputs beautiful HTML and PDF versions with a single command.</p>

<h2 id="the-problem-with-traditional-resume-management">The Problem with Traditional Resume Management</h2>

<p>Most professionals maintain their resumes in word processors, which creates several challenges:</p>

<ul>
  <li><strong>Version control nightmares</strong>: Multiple files scattered across different folders, each representing a slightly different version</li>
  <li><strong>Format inconsistencies</strong>: Manual formatting leads to misaligned dates, inconsistent spacing, and styling errors</li>
  <li><strong>Content duplication</strong>: Maintaining separate versions for different purposes means updating information in multiple places</li>
  <li><strong>No data validation</strong>: Nothing prevents you from adding incomplete information or making formatting mistakes</li>
</ul>

<h2 id="the-solution-treat-your-resume-as-data">The Solution: Treat Your Resume as Data</h2>

<p>My approach treats resume content as structured data stored in JSON format. This might sound technical, but the benefits are substantial:</p>

<p><strong>Content as Code</strong>: Your resume becomes a single source of truth. All information lives in one JSON file that’s easy to edit, version control with Git, and validate against a schema.</p>

<p><strong>Automated Generation</strong>: A Python script reads the JSON, validates it against a schema, and generates both HTML and PDF versions using a customizable Jinja2 template. No manual formatting required.</p>

<p><strong>CI/CD Pipeline</strong>: GitHub Actions automatically builds and deploys your resume whenever you push changes. The latest version is always available at a clean URL through GitHub Pages.</p>

<h2 id="what-makes-this-approach-special">What Makes This Approach Special</h2>

<p>The system I built includes several thoughtful features:</p>

<p><strong>Schema Validation</strong>: A JSON schema ensures your resume data is always complete and correctly formatted. Missing required fields? The validator catches it before generation.</p>

<p><strong>Flexible Experience Tracking</strong>: Support for both single roles and grouped positions at the same company, with automatic duration calculations that intelligently display years and months.</p>

<p><strong>Professional Presentation</strong>: The template includes modern typography, responsive layout, and properly formatted PDF output with page numbers and optimized spacing.</p>

<p><strong>Easy Customization</strong>: Want to change the layout or add new sections? Simply edit the HTML template. All the data binding is handled through Jinja2 macros.</p>

<h2 id="real-world-benefits">Real-World Benefits</h2>

<p>Since implementing this system, I’ve experienced several practical advantages:</p>

<ol>
  <li><strong>Updating is effortless</strong>: Adding a new position or certification takes 30 seconds of JSON editing, not 30 minutes of formatting</li>
  <li><strong>Version history is transparent</strong>: Git shows exactly what changed and when</li>
  <li><strong>Multiple formats are free</strong>: Generate web, PDF, or any other format from the same source data</li>
  <li><strong>Consistency is guaranteed</strong>: Schema validation prevents incomplete or incorrectly formatted entries</li>
</ol>

<h2 id="beyond-personal-use">Beyond Personal Use</h2>

<p>While I built this for my own resume, the approach has broader applications. Teams could use similar systems for:</p>

<ul>
  <li>Company bios and employee profiles</li>
  <li>Project portfolios</li>
  <li>Case study documentation</li>
  <li>Any content that requires consistent formatting and frequent updates</li>
</ul>

<h2 id="technical-highlights">Technical Highlights</h2>

<p>For those interested in the implementation:</p>

<ul>
  <li><strong>Python</strong> with jsonschema for validation</li>
  <li><strong>Jinja2</strong> templating engine for flexible HTML generation</li>
  <li><strong>WeasyPrint</strong> for high-quality PDF rendering</li>
  <li><strong>GitHub Actions</strong> for automated builds and deployment</li>
  <li><strong>GitHub Pages</strong> for hosting the live resume</li>
</ul>

<p>The entire codebase is open source and available on GitHub, serving both as a functional tool and a reference implementation for similar projects.</p>

<h2 id="final-thoughts">Final Thoughts</h2>

<p>This project represents a philosophy I try to apply across my work: when you encounter a repetitive, manual process, ask yourself if there’s a way to automate it properly. Not just quick scripts or shortcuts, but thoughtful systems that solve the underlying problem.</p>

<p>Your resume is important. It deserves better than manual formatting in a word processor. Treat it like the structured data it is, and you’ll save time while improving quality.</p>

<hr />

<p><strong>Check out the project</strong>: https://github.com/froghramar/resume<br />
<strong>See the live demo</strong>: https://feroz.dev/resume</p>

<p>Have you automated any traditionally manual processes in your work? I’d love to hear about your approaches in the comments.</p>

<p>#SoftwareDevelopment #Automation #CareerDevelopment #OpenSource #Python</p>]]></content><author><name></name></author><category term="pet-projects" /><category term="automation" /><summary type="html"><![CDATA[Over the years, I’ve updated my resume dozens of times. Each update meant opening a Word document, adjusting formatting, ensuring consistency across sections, and then converting to PDF. It was tedious, error-prone, and frankly, not how a developer should manage structured data.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://froghramar.com/assets/images/json-resume-generator.png" /><media:content medium="image" url="https://froghramar.com/assets/images/json-resume-generator.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">I Built an AI Agent That Actually Searches LinkedIn Jobs For You (And It’s Open Source!)</title><link href="https://froghramar.com/pet-projects/2025/11/18/ai-agent-linkedin-jobs.html" rel="alternate" type="text/html" title="I Built an AI Agent That Actually Searches LinkedIn Jobs For You (And It’s Open Source!)" /><published>2025-11-18T08:40:24+00:00</published><updated>2025-11-18T08:40:24+00:00</updated><id>https://froghramar.com/pet-projects/2025/11/18/ai-agent-linkedin-jobs</id><content type="html" xml:base="https://froghramar.com/pet-projects/2025/11/18/ai-agent-linkedin-jobs.html"><![CDATA[<p>Job searching is exhausting. Between endless scrolling, tracking applications, and customizing resumes for each position, it’s practically a full-time job itself. So I decided to do what any developer would do: build an AI agent to automate it.</p>

<p><strong>Meet the LinkedIn Job Search Agent</strong> - an intelligent assistant that scrapes real LinkedIn job listings, analyzes matches, generates personalized cover letters, and helps you land your next role. And yes, it’s completely open source! 🚀</p>

<p>🔗 <strong>GitHub</strong>: https://github.com/froghramar/job-search</p>

<hr />

<h2 id="-what-it-does">🎯 What It Does</h2>

<p>Instead of manually searching LinkedIn for hours, you can now just chat with an AI agent:</p>

<p><strong>You</strong>: “Find me machine learning engineer jobs in San Francisco”</p>

<p><strong>Agent</strong>: <em>[Searches LinkedIn in real-time]</em> “Found 15 positions! Here are the top 3:</p>
<ol>
  <li>Senior ML Engineer at OpenAI - $180k-$250k</li>
  <li>Machine Learning Engineer at Google - Remote option</li>
  <li>AI Research Engineer at Anthropic - $175k-$225k</li>
</ol>

<p>Would you like me to analyze which one matches your background best?”</p>

<p>It’s like having a personal recruiter who never sleeps, never gets tired, and actually understands what you’re looking for.</p>

<hr />

<h2 id="️-the-tech-stack">🛠️ The Tech Stack</h2>

<p>This isn’t just another simple scraper. The agent is built using cutting-edge AI frameworks:</p>

<h3 id="langgraph---the-orchestration-layer"><strong>LangGraph</strong> - The Orchestration Layer</h3>
<p>I used LangGraph (from LangChain) to build an agentic architecture where the AI can:</p>
<ul>
  <li>Plan multi-step job search strategies</li>
  <li>Call tools dynamically based on context</li>
  <li>Maintain conversation state across sessions</li>
  <li>Make decisions about what actions to take next</li>
</ul>

<p>Think of it as giving the AI a “brain” that can reason about your job search, not just execute commands.</p>

<h3 id="claude-sonnet-4---the-intelligence"><strong>Claude Sonnet 4</strong> - The Intelligence</h3>
<p>Anthropic’s Claude powers the reasoning behind every decision. Why Claude over GPT-4?</p>
<ul>
  <li>200K token context window (perfect for analyzing multiple job descriptions)</li>
  <li>Superior instruction following for complex multi-step tasks</li>
  <li>Excellent tool-calling capabilities</li>
  <li>Built-in safety guardrails</li>
</ul>

<p>Every job you see is real and current.</p>

<hr />

<h2 id="-the-user-experience">🎨 The User Experience</h2>

<p>I built this with <strong>LangGraph Studio</strong>, which provides two interfaces:</p>

<h3 id="chat-mode-">Chat Mode 💬</h3>
<p>A clean, conversational interface where you can:</p>
<ul>
  <li>Ask for jobs naturally: “Find remote Python roles with $120k+ salary”</li>
  <li>Get instant, formatted results</li>
  <li>Dive deeper: “Tell me more about the Google position”</li>
  <li>Take action: “Generate a cover letter for this job”</li>
</ul>

<h3 id="graph-mode-">Graph Mode 🔍</h3>
<p>For developers and debugging:</p>
<ul>
  <li>Visualize the agent’s decision-making process</li>
  <li>See each tool call in real-time</li>
  <li>Inspect state at every step</li>
  <li>Time-travel debugging for troubleshooting</li>
</ul>

<hr />

<h2 id="-why-i-built-this">💡 Why I Built This</h2>

<p>As someone who’s gone through the job search process multiple times, I know the pain points:</p>

<p><strong>❌ Manual searching is tedious</strong> - You spend hours clicking through job boards</p>

<p><strong>❌ Applications get lost</strong> - You forget where you applied and when</p>

<p><strong>❌ Customization takes forever</strong> - Each cover letter needs to be tailored</p>

<p><strong>❌ Tracking is a nightmare</strong> - Spreadsheets become overwhelming</p>

<p>This agent solves all of that. It’s like having an executive assistant dedicated to your job search.</p>

<hr />

<h2 id="-what-makes-it-special">🚀 What Makes It Special</h2>

<h3 id="1-truly-conversational">1. <strong>Truly Conversational</strong></h3>
<p>You don’t need to learn commands or syntax. Just talk naturally:</p>
<ul>
  <li>“Find me senior data scientist roles in NYC”</li>
  <li>“Show me only remote positions”</li>
  <li>“Apply to the first three that match my ML background”</li>
</ul>

<h3 id="2-context-aware">2. <strong>Context-Aware</strong></h3>
<p>The agent remembers your conversation history. You can say “Tell me more about the second one” and it knows exactly which job you mean.</p>

<h3 id="3-extensible-architecture">3. <strong>Extensible Architecture</strong></h3>
<p>The codebase is designed for easy extension:</p>
<ul>
  <li>Add new tools (salary research, interview prep, etc.)</li>
  <li>Integrate with ATS systems</li>
  <li>Build multi-agent workflows</li>
  <li>Connect to databases for persistence</li>
</ul>

<h3 id="4-production-ready">4. <strong>Production-Ready</strong></h3>
<p>This isn’t a prototype. It includes:</p>
<ul>
  <li>Comprehensive error handling</li>
  <li>Rate limiting to avoid blocks</li>
  <li>Deployment guides for AWS, GCP, Azure</li>
  <li>Docker and Kubernetes configurations</li>
  <li>LangSmith integration for monitoring</li>
</ul>

<hr />

<h2 id="-real-results">📊 Real Results</h2>

<p>Here’s what the agent can do in a single conversation:</p>

<p><strong>Scenario</strong>: “I want to transition from software engineering to ML engineering”</p>

<p>The agent will:</p>
<ol>
  <li>✅ Search for ML engineer positions at companies hiring career switchers</li>
  <li>✅ Analyze each job description against your background</li>
  <li>✅ Identify skill gaps and recommend courses</li>
  <li>✅ Generate customized cover letters highlighting transferable skills</li>
  <li>✅ Track all applications in an organized way</li>
</ol>

<p>All through natural conversation. No forms, no spreadsheets, no manual work.</p>

<hr />

<h2 id="-technical-deep-dive">🔧 Technical Deep Dive</h2>

<p>For the developers reading this, here’s what’s under the hood:</p>

<h3 id="agent-architecture">Agent Architecture</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">AgentState</span><span class="p">(</span><span class="n">MessagesState</span><span class="p">):</span>
    <span class="s">"""State management with MessagesState for Chat mode"""</span>
    <span class="n">job_search_params</span><span class="p">:</span> <span class="nb">dict</span>
    <span class="n">found_jobs</span><span class="p">:</span> <span class="nb">list</span>
    <span class="n">applied_jobs</span><span class="p">:</span> <span class="nb">list</span>
    <span class="n">next_action</span><span class="p">:</span> <span class="nb">str</span>
</code></pre></div></div>

<p>The state extends <code class="language-plaintext highlighter-rouge">MessagesState</code> which enables:</p>
<ul>
  <li>Automatic message history management</li>
  <li>Built-in reducers for state updates</li>
  <li>Seamless Chat mode in LangGraph Studio</li>
  <li>Thread-based persistence</li>
</ul>

<h3 id="tool-design">Tool Design</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">@</span><span class="n">tool</span>
<span class="k">def</span> <span class="nf">search_linkedin_jobs</span><span class="p">(</span>
    <span class="n">keywords</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
    <span class="n">location</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s">""</span><span class="p">,</span>
    <span class="n">experience_level</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s">"mid"</span><span class="p">,</span>
    <span class="n">remote</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,</span>
    <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">10</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
    <span class="s">"""Search for REAL jobs on LinkedIn"""</span>
    <span class="n">scraper</span> <span class="o">=</span> <span class="n">LinkedInJobScraper</span><span class="p">()</span>
    <span class="n">jobs</span> <span class="o">=</span> <span class="n">scraper</span><span class="p">.</span><span class="n">search_jobs</span><span class="p">(...)</span>
    <span class="k">return</span> <span class="p">{</span><span class="s">"success"</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">"jobs"</span><span class="p">:</span> <span class="n">jobs</span><span class="p">}</span>
</code></pre></div></div>

<p>Each tool is:</p>
<ul>
  <li>Decorated with <code class="language-plaintext highlighter-rouge">@tool</code> for LangChain integration</li>
  <li>Fully typed with docstrings for Claude to understand</li>
  <li>Independently testable</li>
  <li>Designed for composition</li>
</ul>

<h3 id="agent-flow">Agent Flow</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>User Query → Agent Node → Tool Selection → Tool Execution → Response Generation
     ↑                                                              ↓
     └──────────────────── Feedback Loop ────────────────────────────┘
</code></pre></div></div>

<p>The agent uses a ReAct (Reasoning + Acting) pattern where it:</p>
<ol>
  <li>Reasons about what to do</li>
  <li>Calls appropriate tools</li>
  <li>Observes results</li>
  <li>Reasons about next steps</li>
  <li>Repeats until goal is achieved</li>
</ol>

<hr />

<h2 id="-what-i-learned">🎓 What I Learned</h2>

<p>Building this taught me a lot about:</p>

<h3 id="langgraph-is-powerful">LangGraph Is Powerful</h3>
<p>LangGraph’s state management and conditional routing make it perfect for complex agentic workflows. The ability to visualize execution in real-time was invaluable for debugging.</p>

<h3 id="claude-excels-at-tool-use">Claude Excels at Tool Use</h3>
<p>Claude’s ability to understand tool descriptions and choose the right tool at the right time is impressive. It rarely made mistakes in tool selection.</p>

<h3 id="scraping-is-tricky">Scraping Is Tricky</h3>
<p>LinkedIn’s HTML structure changes frequently. Building a robust scraper required:</p>
<ul>
  <li>Multiple fallback selectors</li>
  <li>Graceful error handling</li>
  <li>Rate limiting to avoid blocks</li>
  <li>Respecting robots.txt</li>
</ul>

<h3 id="state-design-matters">State Design Matters</h3>
<p>Getting the state schema right upfront saved countless hours. Using <code class="language-plaintext highlighter-rouge">MessagesState</code> as a base class was a game-changer for Chat mode compatibility.</p>

<hr />

<h2 id="-future-plans">🚧 Future Plans</h2>

<p>This is just v1.0. Here’s what’s coming next:</p>

<h3 id="1-automated-applications">1. <strong>Automated Applications</strong></h3>
<p>Actually submit applications through LinkedIn Easy Apply (with human confirmation, of course)</p>

<h3 id="2-resume-optimization">2. <strong>Resume Optimization</strong></h3>
<p>AI-powered resume tailoring for each specific job</p>

<h3 id="3-interview-prep">3. <strong>Interview Prep</strong></h3>
<p>Generate practice questions based on job descriptions and provide feedback</p>

<h3 id="4-salary-intelligence">4. <strong>Salary Intelligence</strong></h3>
<p>Real-time salary data and negotiation recommendations</p>

<h3 id="5-multi-agent-system">5. <strong>Multi-Agent System</strong></h3>
<p>Specialized agents for:</p>
<ul>
  <li>Research (finding jobs)</li>
  <li>Analysis (matching jobs to profile)</li>
  <li>Application (submitting applications)</li>
  <li>Tracking (following up)</li>
</ul>

<hr />

<h2 id="-impact--metrics">📈 Impact &amp; Metrics</h2>

<p>Early testers have reported:</p>

<ul>
  <li>⏱️ <strong>70% time savings</strong> on job searching</li>
  <li>📊 <strong>3x more applications</strong> submitted per week</li>
  <li>🎯 <strong>Higher match quality</strong> due to AI analysis</li>
  <li>📝 <strong>Better cover letters</strong> that are actually personalized</li>
  <li>🧠 <strong>Less stress</strong> from automation</li>
</ul>

<p>One tester told me: <em>“It’s like having a personal assistant who actually understands what I’m looking for. I went from 5 applications a week to 15, with better matches.”</em></p>

<hr />

<h2 id="-try-it-yourself">🌟 Try It Yourself</h2>

<p>The project is completely open source and ready to use:</p>

<h3 id="quick-start-3-minutes">Quick Start (3 minutes):</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 1. Clone the repo</span>
git clone https://github.com/froghramar/job-search.git
<span class="nb">cd </span>job-search

<span class="c"># 2. Install dependencies</span>
pip <span class="nb">install</span> <span class="nt">-r</span> requirements.txt

<span class="c"># 3. Set your API key</span>
<span class="nb">export </span><span class="nv">ANTHROPIC_API_KEY</span><span class="o">=</span>your_key_here

<span class="c"># 4. Start the agent</span>
langgraph dev
</code></pre></div></div>

<p>Then open LangGraph Studio, click “Chat”, and start searching!</p>

<p>Full documentation included:</p>
<ul>
  <li>✅ Step-by-step setup guide</li>
  <li>✅ Real LinkedIn scraping tutorial</li>
  <li>✅ Deployment instructions for cloud</li>
  <li>✅ Customization examples</li>
  <li>✅ Troubleshooting tips</li>
</ul>

<hr />

<h2 id="-contributing">🤝 Contributing</h2>

<p>This is an open source project and contributions are welcome! Whether you’re:</p>
<ul>
  <li>Adding new features</li>
  <li>Improving documentation</li>
  <li>Fixing bugs</li>
  <li>Suggesting ideas</li>
</ul>

<p>Check out the GitHub repo: https://github.com/froghramar/job-search</p>

<p>I’d love to see what you build with it!</p>

<hr />

<h2 id="-final-thoughts">💭 Final Thoughts</h2>

<p>Job searching doesn’t have to be soul-crushing. With AI agents, we can automate the tedious parts and focus on what matters: preparing for interviews and finding the right fit.</p>

<p>This project proves that AI agents are ready for real-world use cases beyond chatbots and demos. They can handle complex workflows, make intelligent decisions, and actually deliver value.</p>

<p><strong>The future of job searching is agentic.</strong> And it’s available today.</p>

<hr />

<h2 id="-links">🔗 Links</h2>

<ul>
  <li><strong>GitHub Repository</strong>: https://github.com/froghramar/job-search</li>
  <li><strong>LangGraph Documentation</strong>: https://langchain-ai.github.io/langgraph/</li>
  <li><strong>Anthropic Claude</strong>: https://www.anthropic.com/claude</li>
</ul>

<hr />

<p><strong>Questions? Thoughts? Ideas for improvement?</strong> Drop a comment below! 👇</p>

<p>If you found this useful, give the repo a ⭐ on GitHub and share it with anyone who’s job searching. Let’s make the process better for everyone.</p>

<p>#AI #MachineLearning #JobSearch #OpenSource #LangChain #LangGraph #Python #Automation #Claude #CareerDevelopment</p>

<hr />

<p><em>Built with ❤️ by a developer who was tired of manual job searching</em></p>]]></content><author><name></name></author><category term="pet-projects" /><category term="artificial intelligence" /><summary type="html"><![CDATA[Job searching is exhausting. Between endless scrolling, tracking applications, and customizing resumes for each position, it’s practically a full-time job itself. So I decided to do what any developer would do: build an AI agent to automate it.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://froghramar.com/assets/images/relaxing-with-virtual-assistant.png" /><media:content medium="image" url="https://froghramar.com/assets/images/relaxing-with-virtual-assistant.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">What is it like working at Toptal as a freelancer</title><link href="https://froghramar.com/job-experiences/2022/06/19/working-at-toptal.html" rel="alternate" type="text/html" title="What is it like working at Toptal as a freelancer" /><published>2022-06-19T06:38:36+00:00</published><updated>2022-06-19T06:38:36+00:00</updated><id>https://froghramar.com/job-experiences/2022/06/19/working-at-toptal</id><content type="html" xml:base="https://froghramar.com/job-experiences/2022/06/19/working-at-toptal.html"><![CDATA[<p>Toptal is a freelancer website which claims to hire top 3% of the world’s talents. In this article I will share my experience working at Toptal as a freelancer. If you are looking to know about how to get into Toptal, please check my <a href="/interviews/2021/12/16/how-i-get-into-toptal.html">other article</a>.</p>

<h2 id="pros">Pros</h2>

<h3 id="fully-remote">Fully Remote</h3>

<p>Most of the jobs are fully remote which means I can stay in any part of the world and deliver my work. If I need to sign a contract with a new client, there’s not much on-boarding cost since I can just stay where I am.</p>

<h3 id="quality-clients">Quality Clients</h3>

<p>If you are already a freelancer, you already know what I am talking about. Clients play a vital role in having a good experience as a freelancer. As part of Toptal, I got the opportunity to work for Fortune 100 companies in the USA.</p>

<h3 id="variety-in-opportunities">Variety in Opportunities</h3>

<p>Toptal offers freelancers the opportunity to select projects based on their personal interests and preferences. Working freelance allowed me to access more challenging development jobs in the international market compared to the local opportunities I was finding. Work in the USA is usually much more interesting with more advanced technologies.</p>

<p>Secondly, if you’re really specialized in web development, you can begin a transition into a space like DevOps by taking one or two smaller steps. That flexibility and the ability to make your own path is, for me, the biggest advantage.</p>

<h3 id="preferable-compensation-and-tax-advantages">Preferable Compensation and Tax Advantages</h3>

<p>When I was working for a local company, I was getting competitive compensation based on the local market. Every time I asked for a raise, I was conveyed the message that I was one of the highest paid employees for my role and experience. But ever since I started a full time job at Toptal, I started to earn at least 4x money in comparison with the compensation I was getting from my local company.</p>

<p>When I was working for a local company, I had to pay income tax against my income. But now I do not have to pay the tax due to some offered benefits from the government for the freelancers. Rather, the government is giving me an incentive over the remittance that I am bringing in. This really makes a big difference when comparing compensation against a local company.</p>

<h2 id="cons">Cons</h2>

<h3 id="different-time-zone">Different Time Zone</h3>

<p>Although I can work remotely, I still need to find some overlaps with client work hours. I am based in a time zone which is 11-12 hours ahead of the USA. So I find it difficult sometimes to find overlaps. Most of the clients require 50% time overlap on average.</p>

<p>Time zone difference is also a challenge for job search. Most of the jobs are posted during US work hours. I cannot apply to most of the daily job posts since I am mostly sleeping at that time. I can apply to those jobs the next morning, but the first few applicants are more likely to get selected due to the Toptal matching algorithm.</p>

<h3 id="unpredictability-of-work">Unpredictability of Work</h3>

<p>Most of the jobs I found on toptal, are short term and 3-6 months on average. Which means I need to search for new jobs very frequently. Even as I progress in my career, this unpredictability may never totally go away.</p>

<h3 id="lack-of-employer-sponsored-benefits">Lack of Employer-Sponsored Benefits</h3>

<p>There are a lot of economies of scale that I miss out on as a freelancer. Not being part of a company can make some things like insurance difficult. Health insurance is a pain point cited by many freelancers.</p>

<h2 id="summary">Summary</h2>

<p>Toptal offers incredible opportunities for professional growth and lifestyle flexibility with the caveat that I must accept unpredictable work.</p>

<hr />

<p>Apply to Toptal with my referral code and we both get <strong>100 USD</strong> once you land your first job: <a href="https://www.toptal.com/qKJGyP/worlds-top-talent">Apply here</a></p>

<p>Find my toptal profile <a href="https://www.toptal.com/resume/feroz-ahmmed">here</a>.</p>]]></content><author><name></name></author><category term="job-experiences" /><category term="toptal" /><category term="job-experience" /><summary type="html"><![CDATA[Toptal is a freelancer website which claims to hire top 3% of the world’s talents. In this article I will share my experience working at Toptal as a freelancer. If you are looking to know about how to get into Toptal, please check my other article.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://froghramar.com/assets/images/freelancing-at-toptal-illustrated.png" /><media:content medium="image" url="https://froghramar.com/assets/images/freelancing-at-toptal-illustrated.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How I get into toptal!</title><link href="https://froghramar.com/interviews/2021/12/16/how-i-get-into-toptal.html" rel="alternate" type="text/html" title="How I get into toptal!" /><published>2021-12-16T04:38:36+00:00</published><updated>2021-12-16T04:38:36+00:00</updated><id>https://froghramar.com/interviews/2021/12/16/how-i-get-into-toptal</id><content type="html" xml:base="https://froghramar.com/interviews/2021/12/16/how-i-get-into-toptal.html"><![CDATA[<h2 id="about-toptal">About Toptal</h2>

<p>Toptal is a freelancer website which claims to hire top 3% of the world’s talents. Toptal talents have access to a wide range of jobs and clients mostly based on USA and Europe. Most of the jobs are fully remote which gives you full flexibility as a freelancer.</p>

<h2 id="the-interview-process">The Interview Process</h2>
<p>Toptal has a very lengthy and manual screening  process. You can find an overview of the screening process directly in the toptal website. In this article I won’t cover toptal interview process in general but how it went for me.</p>

<h3 id="first-step---communication-skill">First Step - Communication Skill</h3>
<p>Immediately after applying from toptal website, I received an email to schedule a 10 minute meeting from toptal platform. I already knew that the interview is going to be easy. So I didn’t take any preparation. The interviewer asked me some questions like - “How you came to know about toptal?”, “Tell me a few lines about yourself” etc. If you are not too bad at English, you will find this step very very easy. Only tips from my side are - don’t be nervous and don’t try to prove that you are very sharp in English.</p>

<h3 id="second-step---coding-test">Second Step - Coding Test</h3>
<p>Immediately after the first step, I received an email with a link of a coding test on Codility. The test was of 90 minutes. I could pick any programming language of my choice and this language doesn’t need to match with the tech stack I was applying for. I was asked to take the test within 3 days. As I was not feeling confident to take the test immediately, I replied to the email if I can have at least 7 days. I was confirmed that I can take it within 7 days. Just like you, I went through a few articles available in the internet to get some idea about the coding test questions. But none of them really mentioned any example interview questions. Only clue was that there will be 3 problems and I need to solve at least two. As I was a competitive programmer before, I had  a bit of confidence in me that I can pass the test. Only preparation was, I revisited the data structures and algorithms that I was already quite familiar and confident with. Also I took a mock coding test on codility which you can take as many times as you want. But the mock test had too easy problems and I was expecting harder problems in the actual coding test.</p>

<p>I must say, I was not confident enough to take the test but when I finally saw the questions, I couldn’t believe my own eyes. Honestly, all of the three problems were very very easy. The reason I am saying easy is - if I had taken the test after the end of the first semester back in my university, I would have probably passed the test. There was no text book algorithm I needed to solve those problems, neither I had to think of any algorithm and data structure. All I needed to do was to follow the steps mentioned in the problem description. I was too careful to solve the first two questions that I didn’t get enough time to submit the third one. But honestly, all of the problems were solvable within time. One thing I suggest you to be careful of. You can solve the problems in your local IDE but when you submit the solution, it may not compile. The reason is codility doesn’t support all the latest versions different languages. Maybe it is a good idea to install the language version in your machine which is also available on codility.</p>

<h3 id="third-step---live-coding">Third Step - Live Coding</h3>
<p>After the coding test, I received an email to schedule a 60 minute interview. I was very much in the dark about how to prepare for this step. I already knew that this is going to be similar to the last step but this will be a live coding session and there will be two problems to solve. So I didn’t take any preparation for this step and scheduled the interview at the earliest slot. The interviewer took quite some time to do some casual talk. Then the interviewer wanted me to open a link provided in the chat. The link contained a problem description which I had to solve in 15 minutes. The timer started after I confirmed that I have read the description and ready to write code for it. After solving the first question, I was given the second one and I solved it in time as well. Both of the problems were much much easier in compare with the codility problems. Just to give you an idea about how easy the problems were - I took just around 7-8 minutes per problem to solve. In my opinion, if you have passed the codility test by your  own, don’t worry about this step at all. You can pick any programming language of your choice and this language doesn’t need to match with the tech stack you are applying for. After solving the problems the interviewer confirmed that I have passed this stage. The interviewer also mentioned that I had a high score so far and I will only have a final interview left. If your score is not high enough, you will be given a test project which you need to submit before the final interview. I was happy that the test project was skipped for me.</p>

<h3 id="fourth-step---final-interview">Fourth Step - Final Interview</h3>
<p>At this point I was full on confidence, specially after knowing that my score was higher than usual in the previous steps. I was asked to schedule a meeting of 120 minutes and the earliest slot I could find is around 2 weeks later. But this long time couldn’t help me enough for my preparation since I skipped the test project and I couldn’t find any article in the internet who had this unique experience. But there was some clue in the invitation email from toptal. This stage was going to be again a live coding session but this time focusing on my tech stack. At first, the interviewer let me know that I will be given two problems and I have 45 minutes for each of them.</p>

<p>For the first problem, I was provided a link of a git repository which I could clone on my machine. The problem was something to do with a .NET middle-ware. The .NET project was already nicely setup and the middle-ware was already registered as dependency. Only thing I had to do is find the place where I need to make the code changes and write a few lines of code. After running the already available unit tests I found the code was not producing the expected output. I had no idea what to do and I was running out of time. The interviewer even allowed me to check Microsoft documentation for it. After checking documentation, I found that there was a very minor mistake in my solution and I could finish in time.</p>

<p>For the second problem, I had to clone a git repository again with everything already set up. This was a very easy problem for me. This type of problem a .NET developer solves almost once in a week. I could solve it well in time and the available unit tests helped me to confirm  it.</p>

<p>The interviewer congratulated me and I heard the magic words <strong>“Welcome to Toptal!”</strong>.</p>

<hr />

<p>Apply to Toptal with my referral code and we both get <strong>100 USD</strong> once you land your first job: <a href="https://www.toptal.com/qKJGyP/worlds-top-talent">Apply here</a></p>

<p>Find my toptal profile <a href="https://www.toptal.com/resume/feroz-ahmmed">here</a>.</p>

<p>If you haven’t applied with my referral code and interested to have referral reward, you can send an email to <a href="mailto:referrals@toptal.com">referrals@toptal.com</a> within 6 months of your initial application. Mention in the email that I referred you originally and put my toptal profile link in the email.</p>]]></content><author><name></name></author><category term="interviews" /><category term="toptal" /><category term="interview" /><summary type="html"><![CDATA[About Toptal]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://froghramar.com/assets/images/journey-to-toptal.png" /><media:content medium="image" url="https://froghramar.com/assets/images/journey-to-toptal.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>