Android application that allows users to compare job offers across multiple dimensions such as salary, bonus, benefits, cost of living, and work flexibility. The app ranks job opportunities using configurable weights so users can objectively evaluate competing offers.
This project was developed as part of CS6300: Software Development Process in the Georgia Tech OMSCS program.
Choosing between multiple job offers can be difficult when compensation packages vary across salary, bonuses, benefits, and location. This application helps users make better decisions by:
- Storing their current job and multiple job offers
- Adjusting for cost of living differences
- Assigning custom weights to compensation components
- Calculating a weighted job score
- Ranking and comparing job opportunities side-by-side
The application runs locally on Android and stores data in a local SQLite database.
- Enter and store current job details
- Add multiple job offers
- Edit existing job information
- Persist job data locally using SQLite
- Automatically calculate a weighted job score
- Rank jobs based on compensation and benefits
- Select two jobs to compare side-by-side
Users can customize importance weights for:
- Yearly salary
- Yearly bonus
- Training & development fund
- Leave time
- Telework days per week
Compensation values are normalized using a cost-of-living index.
Adjusted Yearly Salary:
AYS = (YearlySalary * 100) / CostOfLivingIndex
Adjusted yearly bonus uses the same formula.
| Component | Technology |
|---|---|
| Platform | Android |
| Language | Java 17 |
| IDE | Android Studio |
| Database | SQLite |
| Build System | Gradle (Groovy DSL) |
| Testing | JUnit |
Minimum supported Android version: API Level 33 (Android 13).
The system follows a layered architecture separating UI, domain models, and persistence.
View Layer
- Android activities and UI components
Model Layer
JobJobOfferComparisonSetting
Persistence Layer
- SQLite database
- Database helper classes
The application stores all job data locally and does not require internet connectivity.
Shows the primary user interactions including entering jobs, adjusting comparison settings, and comparing offers.
The system separates UI components, business logic models, and database persistence.
Represents the static structure of the core classes and their relationships.
Since this is a single-user application, the Android app connects to a local SQLite database.
Below are the design layout descriptions and the UI screenshots of each activity/screen in the app.
- This is the entry point of the app and the first activity that is created on launch
- This screen will have a title to show the app title "Job Offer Comparison"
- This screens will have 5 buttons to start other activities for:
- Enter Current Job Details: disabled if current job has already been saved
- Edit Current Job Details: disabled if no current job has been saved yet
- Enter Job Offer Detail
- Adjust Comparison Settings
- Compare Job Offers: disabled if less than 2 total jobs (# of current job + # of job offer) have been saved

- This screen will have TextView labels and EditText input fields:
- Title (String)
- Company (String)
- Location: State, City (Strings)
- Cost of Living (Integer)
- Yearly Salary (Integer)
- Yearly Bonus (Integer)
- Training & Dev Fund (0 - 18,000 integer, inclusively)
- Leave Time (Days per year, 0 - 100 integer, inclusively)
- Telework Days per week (0 - 5 integer, inclusively)
- User can save the inputs if they align with the pre-defined requirements and will be re-directed to main menu automatically
- User will not be able to save the inputs and will be notified by the error message if the inputs do not meet the requirements
- 2 buttons:
- This screen will have the same input fields as Enter Current Job Details screen
- The input fields will be pre-filled with data from the saved current job, and the user can choose to edit any field
- User can save the edit if the updated information aligns with the pre-defined requirements and will be re-directed to main menu automatically
- User will not be able to save the inputs and will be notified by the error message if the inputs do not meet the requirements
- 2 buttons:
- This screen will have the same input fields as Enter Current Job Details screen
- User can save the inputs if they align with the pre-defined requirements and all inputs for the successfully saved job will be removed automatically
- User will not be able to save the inputs and will be notified by the error message if the inputs do not meet the requirements
- 3 buttons:
- This screen will have 5 EditText input fields to take integer values as weights for:
- Yearly Salary (Non-negative integer, default = 1)
- Yearly Bonus (Non-negative integer, default = 1)
- Training & Dev Fund (Non-negative integer, default = 1)
- Leave Time (Day per year) (Non-negative integer, default = 1)
- Telework Days per week (Non-negative integer, default = 1)
- These fields should be pre-filled with the saved weights in the ComparisonSetting db table. If no weights saved previously, show default values of 1
- User can save the inputs if they align with the pre-defined requirements
- 2 buttons:
- This screen will have a tabular layout to show all the saved jobs with these columns:
- Rank: sorted descending based on weighted job score
- Title
- Company
- Selected : checkbox
- Button compare offers will be disabled if there are not exactly 2 jobs are selected
- Checkboxes will be disabled if there are 2 boxes selected. User is allowed to de-selected and re-select other jobs in the list.
- 2 buttons:
- This screen displays the 2 selected jobs' details side-by-side for an easy comparison in 2 columns. Their attributes to compare are shown in rows, including:
- Title
- Company
- Location
- Cost of living index
- Yearly Salary
- Yearly Bonus
- Training/Dev Fund
- Leave Time
- Telework Days per Week
- Compare Another Offer will direct user back to the list view of offers in the Compare Job Offers page
- 2 Buttons:
Testing was performed using both automated and manual approaches.
JUnit tests validate core logic such as the job score calculation.
Example input parameters:
- Adjusted salary
- Adjusted bonus
- Training fund
- Leave time
- Telework days
- Weight parameters
Expected output:
Correct weighted job score.
Manual tests verified:
- UI workflows
- Database persistence
- Input validation
- Job ranking behavior
- Comparison screen functionality
Target metrics:
- ≥70% code coverage
- ≥95% test case pass rate
The project followed a structured development lifecycle.
- Planning
- Architecture and design
- Implementation
- Testing
Key deliverables included UML diagrams, architecture documentation, working Android application, and test plans.
CS6300 – Software Development Process
Georgia Institute of Technology (OMSCS)
Team 047
- Thu Nguyen
- Yunhe Cui
- Kartikeya Kashiva
- Brenda Njeri
- Android Studio
- Android SDK API Level 33+
- Java 17
Clone the repository:
git clone https://github.com/kkashiva/JobCompare.git
Open the project in Android Studio and run it using either:
- Android emulator
- Android device running API 33+









