Velocity PID in a low-inertia application (e.g. low mass flywheel shooters, no-load testing) with NEO/SparkMAX is limited in performance due to velocity signal filtering in the SparkMAX which introduces a significant effective delay into the feedback loop. There are quite a few posts on this topic. Here is one which references a number of the most important ones.
You are going to need feedforward to have any chance of your control loop being close to setpoint with the tiny proportional gains that are stable. Start with only kFF and increase it until your motor runs close to your setpoint in closed loop. You might find that values in the range of 1/5700 (max NEO rpm) get you in the ballpark for kFF.
Then add kP. Do not be surprised if stable kP values for low-inertia velocity loops have three leading zeros (e.g. 0.000x). For a completely unloaded test, you might even be at four leading zeros. Adjust kP until you get maybe a slight overshoot on a setpoint change, but no oscillation as the velocity settles to steady-state.