I've spent most of my career developing Windows applications using C++ and C#. During that time it's been necessary to attain a working knowledge of many other technologies, including Object-Oriented Programming, ASP.NET, WPF, MVC Core, Javascript, SQL Server, DirectShow, COM, JSON, Git, TFS, and Scrum.
In 1990, after years of going nowhere as a construction laborer, musician, and furniture delivery person, I became infatuated with the Amiga we bought with the tax return and eventually started writing code for it in C. I somehow bootstrapped myself into a job in customer support at IPRO, a litigation support company in Phoenix. Within a week I was into the code base, fixing bugs. Before my first year was over I was put in the programming department.
At IPRO I wrote a lot of C and C++ code to manage document scanning, storage, and retrieval, as well as data input for metadata on the documents. Documents had to be OCRed. Large legal document collections had to be handed over to other firms for the discovery process, and those documents had to be filtered and redacted so that the other side could only see the information they were entitled to. Our system had to be made to work with other commonly-used litigation databases. IPRO had a production department that encountered problems on a regular basis. These problems often had to be fixed with ad-hoc custom programs. During that time I rewrote the IPRO DOS document viewer as a Windows program on my own time.
At IPRO, I had what was probably the best idea of my life. I implemented an early web page that would display litigation documents and their corresponding metadata, pulled from a full-text database called Concordance. While boasting about it to the company's owner, I said "You know, if you made this web page read/write, you could send your coders home." Allow me to explain:
IPRO's production department was very busy and difficult to manage. Huge document collections were scanned and coded (data for each document had to be entered into the database). Sometimes this could be done at the IPRO office, but often satellite offices across the globe had to be rented, computers acquired, and staff had to be hired and trained. The process was difficult and expensive. So when I said "...send your coders home", the company's owner was intrigued.
So we implemented what I think was the first web-based litigation coding system. It enabled IPRO's coders to work from home, without needing office space or rented machines. The practice spread.
In 2000 I went to work at iTRACS, a company in Tempe, AZ that sold network management software. The software stored information about the physical devices on a client's network (routers, computers, etc.), along with each device's physical location, in a SQL database. My job, mainly, was to display a map of those devices on a CAD drawing of the office's floor space. I was pretty happy with the result - the map could be scaled, panned, and rotated, appropriate icons represented the devices, information for each device was displayed when an icon was clicked, the network cables connecting each device were displayed. It was colorful. Written in C++ using OpenGL.
In 2004 I went to work at PatchLink in Scottsdale. PatchLink tested and delivered patches from Microsoft, Adobe, and other companies to their clients. It wasn't a pleasant experience - simply the most toxic work environment I would ever know. My main job was to write a program that would install a Windows service on every user machine in a client's domain. I had the initial version working fine when I was told that it had to work without admin rights. When I told them that was impossible, they told me that their competitor's product did it, so I had to do it.
I tried to cover myself by writing a dashboard that would display every machine in the domain, noting the ones that could not be installed to by the program, and the reason(s) why. A few months later, when I got a chance to see the competitor's product in action, it crashed when it was run without admin rights. It didn't matter, my failure to make it happen was noted. I was pretty happy when they laid me off.
In 2005 I want to work at Netpro, in Phoenix. Netpro sold a very capable network diagnostic system that inspected and managed Active Directory and Windows domains. My task was cancelled by the client about two weeks after I was hired, so I was transferred to Customer Support as an Escalation Engineer. Which meant I wasn't writing any new code, and spent most of my time analyzing the existing code and fixing bugs. I learned a lot about how a Windows domain worked. Unfortunately I went in one morning, was kicked out by security, and sent to a nearby hotel, where the company was going through the process of letting most of us go because they had sold everything to their closest competitor.
In 2009 I went to work at a startup called Crystal.IT. The goal there was to create an automatic two-factor logon system using facial recognition and a badge that emitted an ID as radio waves. I had to write a custom GINA in c++. It was hard. I got it working pretty well - you could walk up to your computer, the computer would detect your ID from your badge, the camera would look at you and recognize you, and you would be logged in before you finished sitting down. Logins and badge locations were logged into a SQL database. Unfortunately, Crystal.IT ran out of money. I came back from vacation on a Monday morning, we were immediately ushered into a conference room, and everybody was terminated.
In 2012 I went to work at GlobalMed, in Scottsdale. GlobalMed sold medical devices (some of which were build in-house) and medical software. My main task there was the creation of a remote digital stethoscope system - a digital stethoscope would be on a patient's chest, while a doctor could be listening to the heartbeat and talking to the nurse on a different channel, in real time anywhere in the world, over an internet connection. That was written in C#, with a lot of low-level audio code. I also wrote the DirectShow filter for a beautiful high-definition diagnostic camera that was designed and built by GlobalMed.
At GlobalMed, I also wrote a lot of programs that interfaced with various items of third-party hardware. This was an adventure - every device had a different way of providing data. One of the most interesting was displaying video from an ultrasound probe.
During my time at GlobalMed I became aware that I had worked as a desktop developer for too long, and that I was no longer competitive in a web-based world. I started studying. I should have never stopped.
In 2018 I went to work at ICM Document Solutions as a junior web developer. I was lucky - the environment there was very positive, they were willing to help me grow into the role, they threw me in the deep end and it was sink or swim. I mostly swam, but it wasn't easy. My main task there was creating a large website that managed health insurance disputes: users would upload insurance documents, the user's case would be analyzed by various staff members, workflow would be worked, emails would be sent. This was written in C#, MVC Core.
I also worked on writing a new system to manage the company's production department, which did document scanning and coding, OCR, document assembly - surprising similar to what I did at IPRO in the 90's. I also did a lot of debugging and maintaining older clients' websites.