The Job-Shop Scheduling Problem (JSSP) is one of the most critical combinatorial optimization problems. The objective of JSSP in this research is to minimize the makespan. In this paper, we propose two Genetic Algorithm (GA) based approaches for solving JSSP. Firstly, we design a simple heuristic to reduce the completion time of jobs on the bottleneck machines that we call the reducing bottleneck technique (RBT). This heuristic was implemented in conjunction with a GA. Secondly; we propose to fill any possible gaps left in the simple GA solutions by the tasks that are scheduled later. We call this process the gap-utilization technique (GUT). With GUT, we also apply a swapping technique that deals only with the bottleneck job. We study 35 test problems with known solutions, using the existing GA and our proposed two algorithms. We obtain optimal solutions for 23 problems, and the solutions are very close for the rest.