I'm making little progress on a major project.  The source is massive, many layers of objects, macaroni code, double-diamond graphs of multiple inheritance, half-baked features frozen when the original writer left, and no one knows why many pieces of it were designed the way they were.I suppose any competent programmer would have some trouble figuring it all out well enough to fix bugs, finish the half-baked stuff and add new features.  However, I suspect I'm going slower than a typical programmer.How do I judge whether the source is unusually bad and I'm just doing as well as anyone could, versus the source is typical for a project like this and I'm just slow-witted or underskilled?   
How can I judge whether a project is particularly complex or if I'm just slow in picking it up?
code quality;maintenance
The only way to decide that question is to acquire a lot more programmers to tackle the same issue and see if they fare better.This is of course rarely practical, the task has fallen to your good self and providing you are doing the best you can on it, researching where your knowledge fails you.  Breaking it apart where the complexity foxes you and keeping whoever cares well informed of your progress.  Then I would not worry and keep at it.