Hire Web Developers In 72 Hours

Flexiple is a network of top Web developers, engineers, and architects with hourly rates ranging from $30 to $100. Hire Web developers from Flexiple for a few weeks to a few years and join 100+ teams who have built amazing products!
VLADISLAV POZNIAK

VLADISLAV POZNIAK

Senior Web Developer

WORKED AT

Comedy Central
MIA ARX

MIA ARX

Web Developer

WORKED AT

Amazon
TAYLOR CHEN

TAYLOR CHEN

Web Developer

WORKED AT

VillageMD
JUDE DIKE

JUDE DIKE

Senior Web Developer

WORKED AT

Teller Finance
LOUIS YE

LOUIS YE

Senior Web Developer

WORKED AT

Shopee

Flexiple spent good amount of time understanding our requirements, resulting in accurate recommendations and quick ramp up by quality developers.

Narayan Vyas, Senior PM (YC S12)

Overall Flexiple brought in high-level of transparency with quick turnarounds in the hiring process at a significantly lower cost than any alternate options.

Esther Hersh, Co-founder ('17 NYU Grad)

Flexiple has been instrumental in helping us grow at a fast pace. Their vetting process for engineers is top notch and they connected us with quality talent quickly.

Tanu V, Founder (#1 Salesforce Leads App)

Work With Flexiple's Expert Web Developers!

Be a short-term or a long-term project, don't compromise on the quality of talent you work with. Flexiple handpicks only the Top 1% through a 6-stage screening process.
  • JAROSLAW BOGULAK
    JAROSLAW BOGULAK
    Django Angular Laravel

    Jaroslaw (Jarek) is a developer with over 10+ years of experience. He has a vast array of knowledge ranging in multiple languages & frameworks and ... Jaroslaw (Jarek) is a developer with over 10+ years of experience. He has a vast array of knowledge ranging in multiple languages & frameworks and loves taking complex business challenges and designing optimal solutions. He has worked with startups from different industries including Blockchain, FinTech, E-commerce, etc. Jarek is a seasoned professional dedicated to his craft and developing the best product. Read MoreRead Less

    Worked at homely

    Hire Jaroslaw
  • SAMUEL APPIAH-KUBI
    SAMUEL APPIAH-KUBI
    Java NodeJS Django

    Samuel is a young fullstack developer in the software industry. He has a Bachelor's in Computer Science from Duke University and is a very proficient ... Samuel is a young fullstack developer in the software industry. He has a Bachelor's in Computer Science from Duke University and is a very proficient developer. He has a strong knack for picking up new technology and has hands-on experience in developing mobile applications. With strong communication skills and an exemplary work ethic, Samuel is a passionate developer, driven to find the best solution. Read MoreRead Less

    Worked at Microsoft

    Hire Samuel
  • LAYO FOLARANMI
    LAYO FOLARANMI
    Web HTML/CSS VueJS

    Layo is a skilled software engineer focused on full-stack web development. He has over 3 years of experience in creating solutions for various types of ... Layo is a skilled software engineer focused on full-stack web development. He has over 3 years of experience in creating solutions for various types of enterprises and projects. He is a quick thinker and a fast learner with an ability to apply and implement new technologies. He has knack for problem solving and is a competent developer with extensive experience in PHP, JavaScript among many others. Read MoreRead Less

    Worked at Secure Staffing LLC

    Hire Layo
  • MIA ARX
    MIA ARX
    Web PHP Vanilla JS

    Mia is a full stack developer with over 7 years of experience in the industry. Mia is an observant and articulate specialist with a passion ... Mia is a full stack developer with over 7 years of experience in the industry. Mia is an observant and articulate specialist with a passion for the projects and technologies she works on. Software according to Mia, is a form of art with which anyone can make a difference in the world. A competent professional, Mia has a vast skillset ranging from PHP, Node, MySQL, Nginx among many others. Read MoreRead Less

    Worked at Amazon

    Hire Mia
  • ROHIT AGARWAL
    ROHIT AGARWAL
    Web Android PHP

    Rohit is a full stack developer with 7+ years of experience. He is a competent specialist with expertise in frontend, backend as well as Android ... Rohit is a full stack developer with 7+ years of experience. He is a competent specialist with expertise in frontend, backend as well as Android Development with various tech stacks. Rohit is a creative innovator who enjoys the development process of building products from scratch He is a capable professional with a deft ability to harness his skillset and create custom applications suitable for the business needs. Read MoreRead Less

    Worked at WedMeGood

    Hire Rohit
  • TAYLOR CHEN
    TAYLOR CHEN
    Web ReactJS GraphQL

    Taylor has been working in web development since 2012, during which he's worked in big consultancy companies as well as start-ups. He is a motivated ... Taylor has been working in web development since 2012, during which he's worked in big consultancy companies as well as start-ups. He is a motivated and self-taught professional who likes to solve problems. He is an adept developer with a versatile skillset with expertise in Fullstack, AWS, and Blockchain. A seasoned professional with a strong work ethic, Taylor can help you turn your vision into reality. Read MoreRead Less

    Worked at VillageMD

    Hire Taylor
  • JUDE DIKE
    JUDE DIKE
    NodeJS Python PHP

    Jude has an engineering degree in Computer Science from the University of Lagos and has been programming for over 5 years. An avid learner of ... Jude has an engineering degree in Computer Science from the University of Lagos and has been programming for over 5 years. An avid learner of new technologies, he has worked on projects with companies in Nigeria and Canada across varied skill sets spanning VueJS, NodeJS, Ethereum, Solidity and Machine Learning. Currently his expertise lies in Quantitative and Decentralised Finance. Read MoreRead Less

    Worked at Teller Finance

    Hire Jude
  • AMIT CHAURASIA
    AMIT CHAURASIA
    NodeJS Python VueJS

    A seasoned web professional with 12 years of experience in the industry, Amit is an accomplished Architect as well as a hands-on coder. He has ... A seasoned web professional with 12 years of experience in the industry, Amit is an accomplished Architect as well as a hands-on coder. He has had experience in the areas of UI/UX and service side design and development, entailing development lifecycles, quality assurance and enterprise architecture covering web & enterprise apps. Having worked on solving complex problems for start-ups as well as giants like Morgan Stanley, he has recently started his freelance journey. Read MoreRead Less

    Worked at Publicis Sapient

    Hire Amit

Flexiple Helps You Hire Quality Web Developers, Handpicked For You

  • Work only with the best

    Our developers are selected through a 6-stage screening process. As a result, our developers have an average of 5-years industry experience and are ready to immediately contribute on projects.
  • Work with Role-specific Developers

    Save time and energy lost in manually sifting through profiles. Our solutions expert along with our Director of Technology will handpick developers who are a perfect match for your requirement.
  • Work Risk-free & Start within 2 Days

    With immense confidence in the quality of our developers and the accuracy of our recommendations, we are happy to offer you a 2-week trial where you pay only if you are satisfied.

Find The Perfect Web Developer For Your Team At The Right Price

  • Individual Contributor

    $
    /year
    $30-50
    /hour
    • 1-3 years of experience
    • Mostly worked on a single stack
    • Top Individual Contributor
  • Multi-faceted Contributor

    $
    /year
    $50-80
    /hour
    • 3-7 years of experience
    • Expertise in multiple stacks
    • Worked on niche skills
    • Mentors Junior Developers
  • Leader & Diverse Contributor

    $
    /year
    $80+
    /hour
    • 7-10+ years of experience
    • Worked across stacks, products
    • Multiple niche skills
    • Led multiple teams in the past

How We Select the Top 1%

45.4%pass rate

Depth in past work

Flexiple Developers are reviewed on their experience and complexity of products built. Those who display depth and have worked on end-to-end projects are given an introductory call.

14.6%pass rate

Good communication and motivation

Over a call, the developer’s ability to communicate in an articulate manner is tested. A deeper understanding of the candidate’s technical experience and also motivation to freelance is achieved.

3.1%pass rate

Strong technical abilities

Over one or more F2F interviews, the developer’s involvement and performance in building complex software products are assessed. This sets the platform to delve deeper into technology-specific discussions.

1.5%pass rate

Keen problem solving and coding

Developers' mental agility and problem-solving abilities are tested through a coding test involving algorithmic as well as skill-specific problems. A mixture of live evaluation and timed coding tests is used.

1.2%pass rate

Splendid reviews in background check

The live experience of working with developers is verified by reaching out to past clients and/or employers. Inputs on various qualitative factors such as reliability, punctuality, communication and responsiveness are received.

1%pass rate

Consistent exemplary performance

Performance during each engagement is continually assessed. Our developers are expected to maintain Flexiple standards across all engagements with our customers.

Hire Web Developers Within 72 Hours!

Our simple process gets you working with the right freelancer quickly and seamlessly

Don't Just Take Our Word For It!

(Y-Combinator S12 and Andreessen Horowitz-backed Company)

Quality product launched on schedule by a team of 8 engineers

"Flexiple helped us hire quality developers across technologies - Node, Rails, PHP, Python. They spent a good amount of time understanding our requirements, resulting in accurate recommendations and quick ramp up by developers. We also found them to be much more affordable than other alternatives for the same level of quality."

Narayan Vyas,

Senior Product manager, Plivo Inc

(Incubated at the European Space Agency)

Helped set up and scale tech team on demand

"Flexiple has exceeded our expectations with their focus on customer satisfaction! The freelancers are brilliant at what they do and have made an immense impact. Highly recommended :)"

Henning Grimm,

Founder, Aquaplot

(Acquired by Unicorn, Hike Messenger)

Saved 30% costs with 2 software products delivered

“Overall Flexiple brought in high-level of transparency with extremely quick turnarounds in the hiring process at a significantly lower cost than any alternate options we had considered.”

Kislay Shashwat,

VP Finance, CREO

('17 NYU Graduates)

Found a perfect new member for its globally distributed team

"Working with Flexiple has provided us with partners who are providing us with the required technical support for our growth and success!"

Esther Hersh,

Co-founder, Peblio Inc

(Y-Combinator S18)

Hired the first remote engineer to work directly with the CTO

"It has been great working with Flexiple for hiring highly talented and hardworking folks on contract. We were looking for a suitable developer on the back-end and we got to know Ankur through Flexiple. We are very happy with the commitment and skills he brings to the job and we will be working with Flexiple going forward as well after this positive experience. I recommend them highly for any freelancing talent you are looking to hire!"

Neil Shah,

Chief of Staff, Prodigal Tech

(#1 Lead Routing App for Salesforce)

Helped scale the product with a team of engineers

"Flexiple has been instrumental in helping us grow at a fast pace. Their vetting process for engineers is top notch and they were able to connect us with quality talent quickly. The team put great emphasis in understanding our requirements and getting to know us which ensured that we were matched with folks who were a great fit not only technically but also culturally."

Tanu V,

Founder, Power Router

(Acquired by Reliance for $100 million)

Delivered 2 high quality products forming a long partnership

"The engagement with Flexiple and their community members has helped us get work done in a timely manner and helped us go above and beyond."

Swapan R,

Co-founder, Haptik

(Acquired by PayU for $70 million)

Built their first remote tech team of a frontend and backend engineer

"Highly responsive team with prompt support and willingness to go the extra mile. Powered by technically brilliant personnel on board, we have happy results – all this at an affordable price!"

Sajith N,

Product Manager, Wibmo Inc
star-rating
Client Rating  4.5 | Our Clients 

Frequently Asked Questions

  • How To Find The Best Web Developers For Hire?

  • Web Development is the designing, creating and maintaining web applications or web pages for the internet, or an intranet. It has a vast scope ranging from web designing, web programming to database management. There are a wide variety of tools used by developers to carry out different tasks in the world of web development.

    If you’re looking to hire web developers, this guide will come in handy. We’ve included everything you need to know about hiring a freelance web developer.

    1. Let's introduce Web development to you

    • The World Wide Web (WWW) was invented by a British Scientist Tim Berners-Lee while working at the European Council for Nuclear Research (CERN) back in 1989.
    • Berners-Lee along with his colleague Robert Cailliau created the first web pages, developed the first web client (browser), wrote the first web server.
    • On 30th April 1993, CERN released the Web to the world as open source software and by late 1993, new websites for the mainstream public began opening up on the web.
    • Through the 1990s and well into the 2000s the internet started getting popular with the public and tools such as JavaScript, Flash, CSS (cascading style sheets) emerged for web development.
    • With the rise of smartphones, a new avenue emerged in web development through mobile browsers. We now see a rise in hybrid technology combining mobile and native web applications where languages such as JavaScript, HTML, CSS are still used.

    2. Why is Web development widespread?

    • Over the past couple of decades, the rapid rise of technology and the internet all over the world has made it an omnipresent factor in our everyday lives. Behind all of this technology there is some form of web development.
    • In today's tech-centric world, web development serves as a backbone for all businesses- big and small. With the massive popularity of the web as a platform, its importance is not confined to any geography or size of operation.

    3. What are the tools used by Web developers?

    The following are some of the tools used by Web developers at various stages of development:

    1. Chrome DevTools

    Chrome DevTools is a set of web authoring and debugging tools built directly into the Google Chrome browser. It allows a developer to create, test and debug software.

    2. Lighthouse

    Google Lighthouse is an open-source, automated tool for measuring and improving the quality of web pages. It has audits for performance, accessibility, progressive web apps, SEO, and more.

    3. Sketch

    The sketch is the all-in-one platform for digital design. Its main usage is UI and UX Design for mobile, web, desktop, and wearables. It is vector-based, thanks to this, all graphics are easily scalable.

    4. Adobe Experience Manager

    Adobe Experience Manager (AEM) is a content management solution for building websites. It makes it easy to manage the developer's marketing content and assets.

    5. Sublime Text

    Sublime is a cross-platform text editor for code, markup, and prose with tons of plugins. It supports many programming and markup languages.

    6. Figma

    Figma is a cloud-based vector graphics editor tool that helps developers to create anything: websites, applications, logos, and much more.

    4. Writing the job description to hire Web developers

    Below are some key points that we at Flexiple have learned through trial and error - a process of filtering through over 15,000 developers. You can use these in your process to hire web developers

    • Years of Web development experience: Be specific about the technology you’re looking for and the number of years of experience needed. A proxy to years of experience can be the number of production-level apps worked on.
    • Type of products built in the past: Based on the type of product you are trying to build and your requirements for the job, you can prioritize certain developers over others- Full stack, Front-End, Back-End, etc
    • Exposure to specific industries: Developers who have built products in certain industries will already know key aspects of laying the foundation for a great product and will be able to predict possible problems.
    • Experience working remotely: A developer with past remote work experience is an added advantage as they would have first-hand experience of everything - right from how contracts work to streamlined communication, as well as timelines and deliverables.
    • Strong communication: An essential thing to look at when hiring a freelancer is excellent communication skills. Since all the interaction happens online, a freelancer should be able to effectively communicate to ensure a streamlined execution of all work.

    5. Interview Questions to hire Web developers

    Now that you have made a quality JD, it can still be tricky to evaluate the skills of your applicants when you hire web developers. To help you with that, we have created a pool of questions that a good Web developer should be comfortable with. You can check out some interview questions related to web development here.

    It is important to note that the ability to answer these questions doesn't imply that you have a top quality candidate. But it definitely is a big step in that direction.

    To help you navigate through these questions, we’ve categorized the interview questions in 3 parts:

    A. Basic concepts: Includes all basic concepts used across languages.This will give you an understanding of how strong their programming foundation is.

    B. Advanced concepts: Includes all concepts that someone with higher expertise should know.

    C. DS/Algorithm questions: To test the logical capability of the candidate.

    A. Basic concepts

  • While installing npm modules what is the -g and –save-dev flag for?

    npm stands for “node package manager”. It is one of the most popular package managers with more than 11 million developers using it worldwide. It is an online repository of Javascript packages and it is also a command-line interface to work with these packages.

    -g Flag

    While installing npm modules using “npm install”, some of them are installed with a “-g” flag. This stands for global. Generally, an npm module is saved in your local project folder or repository, but in certain cases when we want to save it globally the “-g” flag is used.

    One such case is when the module offers some command-line tools. Saving it globally saves its binaries in the path environment variable of the system. This enables you to use the module in your command line.

    Example: Installing the package “Nodemon”. Nodemon is a package popularly used while developing Node.js applications, which helps in creating a live server. Traditionally when a node application is running and we want to incorporate changes in the app, we save the changes, stop the app from running and then re-run it. This becomes quite a tedious process especially during the initial phases of rapid development. Nodemon runs a live server which automatically listens for changes and when any change is saved it restarts the application.

    If we were to run “npm install nodemon” and then try to run “nodemon node app.js”, we get the following error.

    nodemon : The term 'nodemon' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the 
    spelling of the name, or if a path was included, verify that the path is correct and try again.
    At line:1 char:1
    + nodemon node app.js
    + ~~~~~~~
        + CategoryInfo          : ObjectNotFound: (nodemon:String) [], CommandNotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException

    So, if we instead run “npm install nodemon -g”, and then try to run “nodemon node app.js”

    [nodemon] 2.0.5
    [nodemon] to restart at any time, enter `rs`
    [nodemon] watching path(s): *.*
    [nodemon] watching extensions: js,mjs,json
    [nodemon] starting `node node app.js`
    server is up
    [nodemon] clean exit - waiting for changes before restart

    This will start the live server for app.js file.

    --save-dev Flag

    By default, npm packages which are installed are saved in node_modules as project dependencies. When someone is trying to clone or recreate your project, they would have to download your project’s dependencies. To do this “npm install” is run and all the dependencies which are listed in the package.json are installed.

    But not all packages are required for the functioning of the project. Many packages such as those which help with testing aren’t required for its functioning. In such cases, we use –save-dev flag while installing these packages, as this flag adds the package to the project’s development dependencies. So, when someone runs “npm install” to download all the dependencies, the development dependencies don’t get installed.

    Example: Installing the “Jest” package. Jest is a Javascript testing framework developed by Facebook, it works with Babel, Typescript, Vue, React, Node and Angular. It helps in creating test suites and automated test cases, which help in product development.

    If I were to run “npm install jest”, then package.json would look like this:

    "dependencies": {
        "jest": "^26.5.3"
      },
      "devDependencies": {}

    If we were to run it with the --save-dev flag, like this “npm install jest --save-dev”, then package.json would look like this:

    "dependencies": {},
      "devDependencies": {
        "jest": "^26.5.3"
      }
  • What is the popular open standard file format (like XML) used with javascript and node.js? And what are the popular commands to convert string to that and vice versa?

    It is JSON which stands for Javascript Object Notation. It is a lightweight data interchange format. It is easy for humans to read. Even though it has Javascript in its full form, it is language independent.

    It’s built on 2 structures:

    • Collection of key-value pairs. This is called an object, dictionary, hashmap, associative array, in different languages
    • Ordered list of values, This is called an array, list, vector, in different languages

    These are universal data structures which is important for a file format which is language independent.

    Example of JSON:

    {
      "flexiple": {
          "top": "1%",
          "location": "remote"
      },
      "blog": {
        "topic": "engineering",
        "title": "What are stable coins and how do they work?"
      }
    }

    This in XML would look like this:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <blog>
          <title>What are stable coins and how do they work?</title>
          <topic>engineering</topic>
       </blog>
       <flexiple>
          <location>"remote"</location>
          <top>1%</top>
       </flexiple>
    </root>

    Valid JSON

    Few of the rules to remember while handling JSON are that:

    • Empty objects and arrays are okay
    • Strings can contain any unicode character, this includes object properties
    • null is a valid JSON value on its own
    • All object properties should always be double quoted
    • Object property values must be one of the following: String, Number, Boolean, Object, Array, null
    • Number values must be in decimal format, no octal or hex representations
    • Trailing commas on arrays are not allowed

    These are all examples of valid JSON: -

    {"name":"John Doe","age":32,"title":"Vice President of JavaScript"}
    
    ["one", "two", "three"]
    
    // nesting valid values is okay
    {"names": ["John Doe", "Jane Doe"] }
    
    [ { "name": "John Doe"}, {"name": "Jane Doe"} ]
    
    {} // empty hash
    
    [] // empty list
    
    null
    
    { "key": "\uFDD0" } // unicode escape codes

    These are all examples of bad JSON formatting:-

    { name: "John Doe", 'age': 32 } // name and age should be in double quotes
    
    [32, 64, 128, 0xFFF] // hex numbers are not allowed
    
    { "name": "John Doe", "age": undefined } // undefined is an invalid value
    
    // functions and dates are not allowed
    { "name": "John Doe",
      "birthday": new Date('Fri, 26 Jan 2019 07:13:10 GMT'),
      "getName": function() {
          return this.name;
      }
    }

    Javascript provides 2 methods to encode data structures to JSON and to convert JSON to objects or arrays. These methods are JSON.stringify() and JSON.parse().

    JSON.stringify()

    It takes a Javascript object or array as input and returns a serialised string form of it.

    const obj = {
        name: "Flexiple",
        city: "Bengaluru"
    }
    
    const jsonStr = JSON.stringify(obj)
    console.log(jsonStr)
    // output is {"name":"Flexiple","city":"Bengaluru"}

    JSON.stringify() can take 3 arguments in total, the first one being the data structure. The second argument, called the replacer parameter, can either be a function or an array. It is used to manipulate the properties (keys and values) in JSON.

    let cost = {
        candy: 5,
        bread: 20,
        cheese: 100,
        milk: 15
    }
    
    let func = (key, value) => {
        if (value < 15) {
            return undefined
        }
        return value
    }
    
    let arr = ['candy', 'bread']
    
    let jsonStrWithFunc = JSON.stringify(cost, func)
    console.log(jsonStrWithFunc)
    // Output is {"bread":20,"cheese":100,"milk":15}
    
    let jsonStrWithArr = JSON.stringify(cost, arr)
    console.log(jsonStrWithArr)
    // Output is {"candy":5,"bread":20}

    The third argument, called the space parameter, takes in either a number or a string. It is used to control the spacing of the final string by deciding the size of indentation.

    let cost = {
        candy: 5,
        bread: 20,
        cheese: 100,
        milk: 15
    }
    
    let jsonStrWithNum = JSON.stringify(cost, null, 2)
    console.log(jsonStrWithNum)
    // Output is 
    // {
    //   "candy": 5,
    //   "bread": 20,
    //   "cheese": 100,
    //   "milk": 15
    // }
    
    let jsonStrWithStr = JSON.stringify(cost, null, 'xx')
    console.log(jsonStrWithStr)
    // Output is 
    // {
    //     xx"candy": 5,
    //     xx"bread": 20,
    //     xx"cheese": 100,
    //     xx"milk": 15
    // }

    JSON.stringify() is also popularly used for debugging, as trying to see a JSON object using console.log() isn’t always successful

    const obj = {
        "nest1": {
            "ex": "ex",
            "nest2": {
                "nest3": {
                    "ex": "ex",
                }
            }
        }
    }
      
    console.log(obj)
    // Output is { nest1: { ex: 'ex', nest2: { nest3: [Object] } } }

    As we can see that after a certain level of nesting the log just displays ‘[Object]’. Therefore, JSON.stringify() can be used to make debugging easier.

    const obj = {
        "nest1": {
            "ex": "ex",
            "nest2": {
                "nest3": {
                    "ex": "ex",
                }
            }
        }
    }
      
    console.log(JSON.stringify(obj,null,2))
    // Output is 
    // {
    //     "nest1": {
    //       "ex": "ex",
    //       "nest2": {
    //         "nest3": {
    //           "ex": "ex"
    //         }
    //       }
    //     }
    // }

    JSON.parse()

    It takes a JSON string and converts it into its respective data structure

     const jsonStr = '{"name":"Flexiple","city":"Bengaluru"}'
    const obj = JSON.parse(jsonStr)
    
    console.log(obj)
    // output is { name: 'Flexiple', city: 'Bengaluru' }

    Calling JSON.parse() on invalid JSON string will throw a SyntaxError.

    Cloning Objects in Javascript

    These 2 functions of JSON can be used together to clone javascript objects.

    const obj = {
        "prop1": {
            "ex": "ex",
            "prop2": {
                "ex": "ex"
            }
        }
    }
    
    const objCopy = JSON.parse(JSON.stringify(obj))
      
    console.log(objCopy)
    // Output is { prop1: { ex: 'ex', prop2: { ex: 'ex' } } }

    But this is not recommended, because of multiple reasons:

    • It is slower than alternatives
    • This works properly only for valid JSON, but not all javascript objects fall in that category

    A better alternative for deep cloning objects would be to either use an npm library called ‘lodash’ or write a custom recursive function to do the same. The spread operator can be used for shallow cloning of objects.

    B. Advanced concepts

    1. What is a lint? Have you ever worked with one before, if yes which one?

    Linting is the automatic checking of source code for programmatic and stylistic errors. Programmatic errors are the errors such as compilation and run time errors. Each company decides to write their code in a certain style and format, this is done for easy maintenance and to provide further structure to the code.

    Stylistic errors are those which might compile without an issue but it does not meet the standards set by the company. Apart from stylistic checks, it is able to identify certain types of bugs like those related to variable scope, undeclared variables, global variables and so on.

    Linting is done using a lint tool or linter, which is basically a static code analyzer. It is important as it reduces errors and increases the standard of the code. It can greatly benefit early stages of development and can save time during code reviews and code maintenance.

    ESLint

    ESLint is one the most popular lints available for Javascript. Let us go into the basics of using ESLint. This is going to the most basic version of ESLint, remember you can install it with different code style plugins as per your choice.

    • After setting up your project (that is running ‘npm init’), run ‘npm install eslint --save-dev’.
    • After that we run ‘npx eslint --init’ this is used to generate the ‘.eslintrc.json’ file which is the config file for eslint.
    • When we are generating a the config file, it asks a bunch of questions to generate it, these are what I’ve chosen:
    √ How would you like to use ESLint? · style
    √ What type of modules does your project use? · commonjs
    √ Which framework does your project use? · none
    √ Does your project use TypeScript? · No / Yes
    √ Where does your code run? · node
    √ How would you like to define a style for your project? · guide
    √ Which style guide do you want to follow? · standard
    √ What format do you want your config file to be in? · JSON 
    
    
    • It might have some peer dependencies that it wants you to install - install them too.
    • Now we come to using the linter. We run ‘npx eslint app.js’ (here app.js is the source js file).

    My app.js file looks like this:

    const obj = {
        "prop1": {
            "ex": "ex",
            "prop2": {
                "ex": "ex"
            }
        }
    }
    
    const objCopy = JSON.parse(JSON.stringify(obj))
      
    console.log(objCopy)

    And the output after running ‘npx eslint app.js’ is:

    2:1   error  Expected indentation of 2 spaces but found 4   indent
       2:5   error  Strings must use singlequote                   quotes
       2:5   error  Unnecessarily quoted property 'prop1' found    quote-props
       3:1   error  Expected indentation of 4 spaces but found 8   indent
       3:9   error  Unnecessarily quoted property 'ex' found       quote-props
       3:9   error  Strings must use singlequote                   quotes
       3:15  error  Strings must use singlequote                   quotes
       4:1   error  Expected indentation of 4 spaces but found 8   indent
       4:9   error  Strings must use singlequote                   quotes
       4:9   error  Unnecessarily quoted property 'prop2' found    quote-props
       5:1   error  Expected indentation of 6 spaces but found 12  indent
       5:13  error  Strings must use singlequote                   quotes
       5:13  error  Unnecessarily quoted property 'ex' found       quote-props
       5:19  error  Strings must use singlequote                   quotes
       6:1   error  Expected indentation of 4 spaces but found 8   indent
       7:1   error  Expected indentation of 2 spaces but found 4   indent
      11:1   error  Trailing spaces not allowed                    no-trailing-spaces
      12:21  error  Newline required at end of file but not found  eol-last
    
    ✖ 18 problems (18 errors, 0 warnings)
      18 errors and 0 warnings potentially fixable with the `--fix` option.

    Some of the errors can be fixed using the ‘--fix’ flag, so run ‘npx eslint app.js --fix’. This is how my app.js changed after that:

    const obj = {
      prop1: {
        ex: 'ex',
        prop2: {
          ex: 'ex'
        }
      }
    }
    
    const objCopy = JSON.parse(JSON.stringify(obj))
    
    console.log(objCopy)

    Now it does not show any errors on running ‘npx eslint app.js’.

    Similarly ESLint can be used to either check syntax, fix bugs, enforce code style and it has a lot of different options to choose from. It supports plugins and allows custom rules also. Apart from ESLint, some of the other popular lints for Javascript are JSLint and JSHint.

  • 2. What are the vulnerabilities of using cookies? What about the usage of local storage?

    Cookies and local storage are primarily used for session management in web application development. What this means is that once the user is authenticated, there needs to be a way for the application to remember the user for a period of time without asking the user to login again.

    In an architecture design it is standard to keep the server stateless, but this would mean that the user information cannot be stored on the server. Therefore, the decision was taken to store it on the client. This was originally done using cookies. Cookies are basically a storage facility with the browser, which the client side javascript or the server (using headers) can interact with.

    Each item stored in cookies is called a cookie, and each cookie has an expiration time which can be manually set too. The cookie persists in the browser for that duration and is not removed by page refreshes or window being shut. When a client interacts with a server using HTTP requests, then the cookies are also sent along in headers.

    The data which is stored in a cookie is generally a token such as a JSON Web Token (JWT). JWT consists of a payload which is used to fetch information about the user. JWT tokens are signed on the server using a secret key. The routes allow only authorized users to check whether the token is present in the cookies. This is the outline of the architecture followed for session management.

    Difference between Cookie and Local Storage 

    Primarily both function in similar ways - i.e. both involve persistent storage in the browser. The differences come in slight nuances of their functioning:

    • Local storage does not have the concept of expiration time. So, the developer dealing with it needs to handle the expiration of tokens stored in it. Whereas, the expiration time for cookies can be set while storing the cookie and the browser handles the rest.
    • Local storage is not sent with every HTTP request, like a cookie is sent. This reduces load on especially those HTTP requests which are public and do not require to use the token stored.
    • The server can directly interact with cookies, whereas only the client side script can interact with local storage.
    • Local storage has a much larger storage capacity of 5mb compared to 4kb of cookie. This is primarily because cookies are meant to be read by the server, whereas local storage is meant for the client side to be able to persistently store data.

    Vulnerabilities

    Local storage

    Local storage is accessible only by client-side javascript code. This makes it particularly vulnerable to XSS attacks. XSS (Cross-Site Scripting) attacks are a type of injections in which malicious scripts are injected into otherwise trusted websites due to a vulnerability.

    This script then executes on the client’s browser and can access the local storage quite easily. XSS attacks are mainly used to steal cookies, session tokens and other information. After obtaining session tokens they can access protected routes using it. Therefore, storing authentication tokens on local storage is very risky.

    Cookies

    Cookies function similarly as they can also be accessed by client-side javascript code. They are also vulnerable to XSS attacks, but there can be a further layer of protection added to prevent this.

    If the ‘httpOnly’ flag is marked as true while setting cookies then client side javascript cannot access that cookie. This allows only the server side code to interact with it. So this protects it from XSS attacks. However, due to its property of sending a cookie on every request, it gets vulnerable to CSRF/XSRF attacks.

    CSRF/XSRF (Cross-Site Request Forgery) attacks are when malicious web apps can influence the interaction between a client browser and a web server that trusts the browser. Therefore, further measures need to be taken like using CSRF tokens and proper use of the Same-Site cookie attribute.

    C. Data Structure/ Algorithm

  • 1. Write a program to find whether a string or number is palindrome or not.

    import java.util.Scanner;
    public class Palindrome {
        public static void main (String[] args) {
            String original, reverse = "";
     Scanner in = new Scanner(System.in);
           int length;
            System.out.println("Enter a number or a string");
            original = in.nextLine();
            length = original.length();
            for (int i =length -1; i>;=0; i--) {
                reverse = reverse + original.charAt(i);
            }
            System.out.println("The reverse is: " +reverse);
    
            if(original.equals(reverse))
                System.out.println("The string is a palindrome");
            else
                System.out.println("The stringis not a palindrome");
    
        }
    }
    
  • 3. What will the output of the following code be?

    var i = 10;
    var f = 5;
    var g = 3;
    if (i / f / g)
         document.write("hi");
    else
        document.write("hello");
    a) hi
    b) hello
    c) error
    d) no output
    The answer is A because the floating-point division returns a non zero value = 0.66 which evaluates
    to true and outputs ‘hi’.

    Hire web developers - parting thoughts

    As discussed, it isn't easy to find a quality freelance Web developer but this guide makes the process easier for you. To offload the entire hiring process, reach out to us at Flexiple. We've designed a high-quality, 6-step screening process to find the top 1%, freelance developers. You can find the best freelance Web developers here. We've already served over a hundred clients, earning great reviews for the quality of service.

    Lastly, to quickly summarize the process of hiring a freelance web developer for you:

    • Note your project requirements and hire accordingly. Do not go for the lowest or the highest-paid developer.
    • Don’t hire without vetting- consider asking questions right from the basics to advanced to logical questions.
    • Look for companies like Flexiple that help you find the perfect fit.

    That is everything you need to know to hire web developers. Happy hiring! :)

Try a Top Quality Web Developer for 14 Days.
Pay Only If Satisfied.