1) Your terrible at the recruitment process and do not give a good and fair account of yourself, making it hard to get past the recruitment and into the actual job.
2) You suffer from the Dunning-Kruger effect. You think you are great but everyone else realizes you are way below average.
3) You are applying for jobs that are not a good fit for you and so not getting anymore. Are you a tech lead that is applying for routine programmer jobs or vice versa.
4) You did not mention your age and so it could be you are coming up against age discrimination. If you are 40 then people expect you to be applying for team leader or higher level jobs and not standard programmer jobs.
I would say that if you are not currently working then your full time job is getting a job. You can do an awful lot in 38 hours of time when looking for work. Customize the covering letter for each position you apply for. Have several different versions of your CV, each one targeting a type of position you want to apply for. Research a list of software companies in your city and then find out the software development manager at each company (not the HR person!). Then reach out to them. Spend time working on a project that would show off your skills and put it up on GitHub. Try putting an ad in your local newspaper offering to work on custom software projects for small businesses.