Why this app?
There have been a great number of books written about management techniques and standards over the years. I was fortunate enough to become involved with a company who were in the business of management standards and who worked with a British set of standards. These came in several large books (so large, they had a separate volume to index the books). The standards were comprehensive and were very well written.
Sadly, they were a little impenetrable if you were new to them and navigating your way through them to decide which standards applied to your specific circumstances or what areas you needed improvement with was rather a chore that not many people were up to. Being so difficult to use made them less effective than they deserved to be.
I was commissioned to write a program (in VB6) to help deal with this and produced a questionnaire tool that led people though the much simpler task of determining what they do rather than what standards and competencies they though they needed. At the end of the questionnaire, they got a personalised index into the standards books.
The VB6 program is long gone and the web app never made a commercial debut. However, te concept is still good and the idea of having an iOS app to do this job was appealing to me. This is my attempt at creating an App for the iPhone and iPad that performs this job in the modern world.
Key Learning Points
What did I want to achieve?
As with every app I intend to write, I'm looking to get some learning from the code and try out new techniques. This being one of my first apps, there were a lot of opportunities and I may have gone a little over the top on some of the things I added. That said, what I wanted from this included:
- A 'Dark Mode' only app.
- A dual purpose app that will work on iPhone and iPad.
- Parsing of JSON into objects.
- Saving related data to files - the app does not use CodeData.
- The ability to display Markdown text on screen.
- My own alert framework.
- Using a 'Share' sheet to share my output to the printer or via email.
Ok, so from the learning points, you'll see that I developed my own alert framework. That seems a little over the top for a learning app, but there was a very important purpose in this. Namely, the .alert() modifier was proving to be a pain in the rear... specifically, it didn't always work!
My problem turned out to be that you cannot have more than one .alert() modifier at the same level in the code. A lot of research went into gaining this insight and, once understood, a lot of my message issues became clear. The fix was to either refactor the code (relatively straight forward) or to write my own alert framework, giving me full control over the way it worked and the visuals that the user saw.
Since this is a learning exercise, I went with the somewhat painful exercise of creating my own message framework. As it turned out, it was a great learning experience and I ended up with something that allowed me to have as many modifiers as I wanted at the same level.
Well worth the time and effort it took.
What does it produce?
After completing a brief questionnaire, the user will be presented with three cuts at the results. This is intended to give them the easiest to digest way of analysing the results.
The unit view presents the list of units that were generated from the questionnaire. It serves as an overview of the role responsibilities:
Each applicable unit is presented along with it's cross reference to the management standards documentation. Tapping on a unit will present brief details of that unit.
Question and Answer View
Knowing what units apply to the role is good and serves as a good working guide to using the profile. However, it can occasionally be difficult to understand what triggered a specific unit to be added. The Q&A analysis lets the user scroll through the questions they were asked and the answers they gave in order to determine what answer generated what unit:
The final tab displays a full report of the role. It includes details of who ran the review to create this profile, when it was run and a detailed report of the units and the question and answer summary:
When you tap the icon to export the profile (top right) it is this report that will be generated and exported.
What it looks like
And the end result is...
This is what I ended up with once the first version was finally complete. Please forgive the weirdness around the keyboard - I'm somewhat new to recording the contents of the iPad screen and the tools appear to be a little primitive and unforgiving.
Am I really any good?
Don't take my word for my abilities, take a look at other peoples opinions about me.
One very quickly runs out of superlatives with Steve. He is the cleverest person I know. He is highly innovative, passionate regarding the proper maintenance of agreed standards and protocols and establishes excellent relationships with our clients.
Steve is a rare developer resource who is able to provide a good breakdown of technical solutions for all audiences to understand... Steve understands the importance of project deliverable's both from a client and business perspective and shows a personal pride in ensuring the delivery schedules are met.
I have worked closely with Steve for his time with us and long before we formed our company. His technical ability far out-performs anyone I have known or met in companies we have worked with like IBM/EDS/Cap Gemini
Steven showed a great deal of commitment and skill when he worked with me. His attention to detail, comprehensive documentation and well thought out code, using very impressive technical standards meant that it was always possible to rely on the solutions provided being top notch. Steven is an asset to any company, at any level - if I were able to, I'd love to work with him again.
I have had the pleasure of working with Steven for several years in my role as CTO. He his one to the most multi-disciplined technically skilled developers I have known but what sets him apart is his eye for, and attention to detail, particularly when considering the user experience. I would absolutely not hesitate in recommending Steven.