A while a go I built 2 Prusa clones following Tom's 3D guide on building cheapest possible Prusa i3 MK2 . I learned some problem solving working with electronics and physical material, but it is much easier, faster and cheaper to just get a Prusa Kit.
In my system I use 3.0mm thick Prusa MK3-style aluminum heated bed covered with kapton tape and a Finglai LJ2A3-2-Z/BX-5V inductive probe.
I have reworked my printer a few times swapping parts here and there, but one problem that I kept encountering, is really inconsistent first layer when printing common materials like PLA or ABS, except PETG. PETG will stick to anything.
I designed a rectangle in OpenSCAD 40mmx80mmx0.4mm, single-layer height square, which area is large enough to manifest the problem the printer was having.
cube(size[40, 80, 0.4], center=true);
Here how this shape looks before print in Prusa Slicer.
Here is an example of inconsistent first layer, this is one of the better prints that I came out.
Since the first layer is deformed like that, the extra print material will propagate through the layers and would ruin otherwise perfectly good print.
One day I decided to finally fix the problem by using all the common solutions: like tweaking layer height, extrusion temperature and extrusion width. None of that worked.
Besides a random mechanical issue that I might not have noticed, the only other variable I didn't test was my custom Marlin configuration. My customizations for Marlin 1.1.8 for my 3D printers 
The apparent solution
Tried slowing down moves in each direction and it turned out that one of the variables was causing the problem.
Homing federate was set too fast so the inductive probe would trigger after the nozzle moved way too close to the bed. This affected both initial probing and mesh bed leveling. I might have noticed this earlier as sometimes nozzle would ping the bed in some areas during mesh bed leveling.
The 'fast' feedrate was set to 15*60mm/s and the slow was half of that. I set 'fast' speed to 7*60mm/s and increased the number of probing attempts from 2 (1 fast, 1 slow attempt, save the results from slow attempt) to 3 (an average of 3 slow attempts).
Here is relevant documentation from Configuration.h file in Marlin 1.1.8
// The number of probes to perform at each point. // Set to 2 for a fast/slow probe, using the second probe result. // Set to 3 or more for slow probes, averaging the results.
Here are all relevant definitions I updated in Configuration.h
#define HOMING_FEEDRATE_Z (7*60) #define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 1.5) #define MULTIPLE_PROBING 3
Note that Z_PROBE_SPEED_FAST variable becomes irrelevant when MULTIPLE_PROBING is set to greater than two, as in this case only slow probing is performed. Effectively Z_PROBE_SPEED_SLOW in this configuration is 280mm/s
I also increased the number of mesh probing points from 4 to 5. At this point I'm not entirely sure it makes enough difference to be useful, but I'll run tests on it in the future.
#define GRID_MAX_POINTS_X 5 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
Here is the print that came out after probing speed has been adjusted.
Apart from the slight defects inherited because of the state of the bed this is a perfect first layer.
Heres the orientation of the print still attached to the bed.
When the usual methods of fixing the first layer settings are ineffective, consider looking at printer firmware settings if those settings where changed in the past.
I'm going to look for a way of having a journal of all firmware and print setting updates. Also taking pictures and writing notes for each significant print. This might be worth the effort to fix several issues with my printer.