ISO9001 ¯\_(ツ)_/¯ It’s awful, but what can you do?

I’m helping Volunteer Research Laboratories LLC become ISO9001 certified, and later I will be getting Volunteer AS9100 certified.

Don’t mistake what I’m about to say as being “mean”, it’s just that I truly didn’t know any of this until recently.

For the last four years, I’ve worked in an ISO9001 facility and had no idea what ISO9001 was. I honestly thought it was just some kind of facility certification used to get work. After trying to implement ISO9001, however, I came to find out that my ignorance of my the QMS (“quality management system”) is a “non-conformity.” In layman’s terms, if you work in a facility with ISO9001, and if you perform work within the scope of the work that is ISO9001 certified, you should be able to describe what ISO9001 is in your own words and how it applies TO YOU. I couldn’t. Luckily, it’s not my fault that I “lack competence” as 2015 the standard puts it. By the way, I’m using quotes for specific words because these are keywords with significant meaning in the standard itself. Lacking “competence” and “non-conformities” are not at all bad by the way, just an opportunity to improve.

Speaking of which, I still haven’t said what ISO9001 is. It’s a quality assurance program. ISO9001 likes to call itself a “quality management system,” but let’s not beat about the bush here… it’s supposed to be quality assurance.

The company that I used to work at paid upwards of about 30,000 dollars to get ISO9001 certified from a consultancy. I was shocked to discover, however, that there is a man, Chris Paris, from Oxebridge Quality Resources that offers a template kit for free. He lists all the ways you can get certified in this frankly outstanding post.

It’s jaw-dropping really, the amount of good stuff you get. So much so, I bought his book Surviving ISO 9001. Obtaining ISO9001 certification is such a mind-bendingly dull topic, I was genuinely curious to see if the demo chapters I found on his website would hold up throughout the rest of the book. It did. It was worth the seventy-something dollars.

Here’s a gem from his book Surviving ISO 9001:

And in a few minutes, you will never be able to look at ISO standards the same way again. In short, you can’t un-see what you are about to read.

ISO is not a standards developer.

That sentence, right now, makes no sense to you. Everyone knows ISO develops standards. This is like saying the blue sky is actually red, or that tomatoes are actually socket wrenches.

I won’t spoil the surprise for you in case you get his book, but even when I figured out what ISO9001 was, I STILL didn’t know it applied to ME. And I’m the guy implementing it!

Even though I’d recommend his book, I wouldn’t want to be caught with it in my hands. If I were seen with it publicly, I think I’d confess that I was reading a dirty magazine instead of acknowledging that I was reading up on quality assurance. There are just some things you can’t live down, and trying to interpret and understand ISO9001 is one of those things.

Anyway, I was working through the template kit provided on his website. It’s all tied to Microsoft products (i.e., .docx, .xlsx) so I decided to open each one and save them off as .odt and .ods files. I’m trying to move away from closed standards, and move to more open ones, even so much as completely migrating to Linux.

A Problem that I faced, however, was that the tools that Oxebridge recommends for text replacement in his templates are either paid for tools or non-Linux. I opted to write a macro and execute it after converting all of the MS files to LibreOffice files.

Here’s my macro if anyone’s interested.

Sub ISO9001_Replace
Dim oDoc As Variant
Dim oSearchDescriptor As Variant
Dim oDictionary As Variant
Dim oReplace As Variant
Dim oStatusIndicator As Variant
Dim i As Long, j As Long 
    oDoc = ThisComponent
    oStatusIndicator = oDoc.getCurrentController().getStatusIndicator()
    oDictionary = Array( _
    Array("",	"[FULL CLIENT NAME ALL CAPS]"), _   
    Array("",	"[Full Client Name Reg Caps]"), _
    Array("",	"[Short Client Name]"), _
    Array("",	"[Street Address]"), _
    Array("",	"[City]"), _
    Array("",	"[STATEABBREV]"), _
    Array("",	"[Zip]"), _
    Array("",	"[Website]"), _
    Array("",	"[Phone]"), _
    Array("",	"[Fax]"), _
    Array("",	"[Quality Manual Doc Title]"), _
    Array("",	"[Date of Issue]"), _
    Array("",	"[Rev Number]"), _
    Array("",	"[Copyright Year]"), _
    Array("",	"[Product or Service Sing.]"), _
    Array("",	"[Products or Services Plur.]"), _
    Array("",	"[ISO 9001 or AS9100]"), _
    Array("",	"[QC or QA Preferred Term]"), _
    Array("",	"[Senior Most Manager Title]"), _
    Array("",	"[Senior Management Team Name]"), _
    Array("",	"[General Company Email Address]"), _
    Array("",	"[ISO MR Regular Title]"), _
    Array("",	"[Specific Title for ISO MR]"), _
    Array("",	"[ISO MR Email Address]"), _
    Array("",	"[Quality Manual Approver Name]"), _
    Array("",	"[Procedure Approver Name]"), _
    Array("",	"[Document Controller Title]"), _
    Array("",	"[CAR System Manager Title]"), _
    Array("",	"[CAR Form Name]"), _
    Array("",	"[CAR Form Abbreviation]"), _
    Array("",	"[Email for SCAR Processing Person]"), _
    Array("Process Definition",	                "[Process Definition Doc Title]"), _
    Array("Context of the Organization",	"[Context of the Org Proc. Title]"), _
    Array("Outsourced Processes",	        "[Outsourced Processes Title]"), _
    Array("Calibration of Equipment",	        "[Calibration Proc. Title]"), _
    Array("Control of Documents",	        "[Control of Documents Proc. Title]"), _
    Array("Control of Records",	                "[Control of Records Proc. Title]"), _
    Array("Internal Audits",	                "[Internal Auditing Proc. Title]"), _
    Array("Control of Nonconforming Product",	"[Control of NCP Proc. Title]"), _
    Array("Corrective and Preventive Action",	"[Corrective Preventive Action Proc. Title]"), _
    Array("Validation of Equipment",	        "[Equipment Validation Proc. Title]"), _
    Array("Purchasing",	                        "[Purchasing Proc. Title]"), _
    Array("Hiring and Training",	        "[Training Proc. Title]"), _
    Array("Management Review",	                "[Management Review Proc. Title]"), _
    Array("Preventive Maintenance",	        "[Preventive Maintenance Proc. Title]"), _
    Array("Receiving",	                        "[Receiving Proc. Title]"), _
    Array("Control of Third-Party Property",	"[Customer Property Proc. Title]"), _
    Array("Identification and Traceability",	"[Identification & Traceability Proc. Title]"), _
    Array("Preservation of Product",	        "[Preservation Proc. Title]"), _
    Array("Risk and Opportunity Management",	"[Risk Management Proc. Title]"), _
    Array("Change Management",	                "[Change Mgmt Doc Title]"), _
    Array("Quoting and Order Acceptance",	"[Quoting and Orders Doc Title]"), _
    Array("Design Control",	                "[Design Procedure Doc Title]"), _
    Array("Special Processes",	                "[Special Process Doc Title]"), _
    Array("Control of Nonconforming Service",	"[Control of Nonconforming Service Proc Title]"), _
    Array("Shipping",	                        "[Shipping Proc. Name]"), _
    Array("Document Master List",	        "[Document Master List Name]"), _
    Array("Position Description",	        "[Position Description Title]"), _
    Array("Organizational Chart",	        "[Org Chart Title]") )

    oSearchDescriptor = oDoc.createSearchDescriptor()
    oStatusIndicator.start("", UBound(oDictionary)+1)
    For i = LBound(oDictionary) To UBound(oDictionary)
        oReplace = oDictionary(i)
        oSearchDescriptor.setReplaceString(oReplace(0))
        oStatusIndicator.setText(oDictionary(i)(0))
        oStatusIndicator.setValue(i+1)
        For j = 1 To UBound(oReplace)
            oSearchDescriptor.setSearchString(oReplace(j))
            oDoc.replaceAll(oSearchDescriptor)
        Next j
    Next i
    oStatusIndicator.end()
End Sub

You’ll have to consult Chris Paris’s readme and subsequent spreadsheet located in his template kit to determine some of the values you should be inputting, but so far this has covered most of the things that I’ve come across. I haven’t found a way to batch process my documents with LibreOffice yet, but I might not even bother at this point.

You’ll still have to go through each document one at a time and fill in any extra information regardless and executing the macro above is just a couple clicks worth of work. Template kits alleviate some of the burdens of implementing ISO9001, but you’ll still have to write your procedures, and at least look at the QMS that you say that you’re going to adhere to.

I’ll write a follow-up report when I finally survive an audit. Until next time.

Tagged , ,