Abhishek Roka
Abhishek Roka

Designing Resume Upload During Job Applications in My Placement Portal


Today, I implemented the resume upload workflow during job applications in my Placement Portal.

At first glance, it looks like a simple feature:

Upload a resume and apply for a job.

But once I started designing the workflow, I realized there were several product and architectural decisions involved.

The Application Flow

Initially, the application flow was extremely simple.

Now, the workflow has become more informative and realistic.

This extra step ensures that every application has an associated resume before it reaches the recruiter.

Resume Validation

While uploading a resume, I currently validate two basic things:

If validation fails, the portal immediately informs the student through toast notifications.

Otherwise, the system:

The goal is to make the process informative rather than silently failing.

Why Multiple Resumes?

One question I asked myself during development was:

Why not allow only one resume per student?

The answer is simple.

Students often apply for different roles.

For example, a student may simultaneously apply for:

Each role may require a slightly different resume.

Restricting students to a single resume would unnecessarily limit their opportunities.

That is why I decided to allow multiple resumes per student.

Currently, the limit is set to 10 resumes.

Making Limits Configurable

Initially, I considered limiting students to only two or three resumes.

However, another question came to mind.

What if a university wants to change the limit?

If I hardcode the limit inside the project, every requirement change would require:

That approach doesn't scale well for a multi-institution portal.

Instead, I am planning to move these limits into a configurable setting managed by administrators or universities.

For example, administrators should be able to configure:

This makes the system significantly more flexible without requiring engineering changes for every policy update.

Using Redis for Configuration Caching

Once configuration becomes dynamic, another problem appears.

Every resume upload would require a database query to determine the allowed limits.

That means:

Performing database lookups on every request isn't ideal.

My current plan is to cache these configuration values using Redis.

The workflow would look something like this:

This allows the application to remain flexible while avoiding unnecessary database hits.

Final Thoughts

What started as a simple resume upload feature eventually became a discussion about product design and software architecture.

Sometimes, the most interesting engineering decisions are not about writing code—they're about deciding which values should remain hardcoded and which should become configurable.

The more I work on this Placement Portal, the more I realize that building scalable software is often about designing good abstractions rather than adding more features.

I'm documenting every engineering and product decision while building this Placement Portal in public.