First the really easy advice: + use strict mode https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode + use `const` instead of `let` for stuff you know you're not supposed to change (symbol, player1, player2); declaring it const helps you keep some assumptions later + use `===` instead of `==` generally; I think the only legitimate use for `==` is for using it with `null` when you allow undefined or results of `typeof` if you feel like you're a JS human minifier :) + prefer camel case since JS already does it and it would look weird to have two casing strategies in the same codebase + use better naming in general: I'm talking about _array_ in `function checkforOwin(array)` - _array_ is extremely generic (what array?!?) I would call it _board_ so I know what I'm dealing with; the fact that it's implemented as an array is a detail + I'd also like a function named `checkforOwin` to just check and return true/false than exit the process xD + who's `O` in this same function name? I thought we're comparing with the variable `player1`; stick to one or the other, not both; you'd have to update quite a bit of code if you change the initial statement of `let player1 = "X"` ...and the more involved: + I would use nested arrays for the board because I can't easily picture what `board[7]` is; but I can picture what `board[2][1]` is + those really long if statements look very repetitive; they look a lot like patterns on a board so instead let's turn that code into data so we can manage it easier; we can rewrite the patterns like this: <!-- begin snippet: js hide: false console: true babel: false --> <!-- language: lang-js --> const isOWinner = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 4, 8], // ... ].some((indices) => indices.every((index) => board[index] === player1)) <!-- end snippet --> That big condition blob in your if statements can be rewritten like this. Because it's an array you can store it somewhere; load it; merge with other patterns or extend or whatever you can do with arrays. Code that looks like data should be represented as data