WARNING: What follows is a job description for a software developer position by a mechanical engineer. Expect it to be vague, oversimplified, and possibly even incorrect. I may use the terms engineer, developer, and programmer interchangeably even if you don't view them that way. I'm probably wrong, but don't let that dissuade you from following up with me. If you have any questions, email me at hokie07me AT gmail DOT com and I can point you towards someone who can answer your questions more intelligently.
My company designs and builds diagnostic equipment for measuring and correcting unbalance on rotating components. We make machines for any industry where things spin: aerospace, energy, power tools, automotive, etc. Our customers include Pratt & Whitney, Rolls Royce, Chrysler, Ford, Kawasaki, Mitsubishi Heavy Industries, Siemens, Tesla, and SEW Eurodrive, to name a few. We're located right off 460 in Lynchburg and all around it's a good place to work. We've got flexible hours, competitive pay (especially given the cost of living around here, 20% cheaper than blacksburg), and a "just so long as you get the job done" attitude. For instance, lunch is "30 minutes," but some of us play board games over lunch and those can last over an hour. I haven't gotten any crap for it because I get shit done. Similarly, I don't remember the last time I used vacation for anything personal. Babysitter cancels and my wife has a doctor appointment? "Just go take care of your family." Wife has to take my son to something, but can't handle the 3 and the 6 year old? The VP of engineering vacated his office so I could have somewhere to let them watch tv for an hour.
The backbone of our machines is our proprietary piezo crystal force pickups, the custom data acquisition hardware, and our home grown measurement software. We've been making machines since computers weren't even a thing and the outputs were a series of dials and gauges driven by analog electronic circuits. Then we transitioned to a PC based system and wrote the software in VB. Now we're looking at, finally, updating the software to the quasi-modern age. That means a complete re-write of the software in C# that maintains all the functionality of the current build. We have the resources to keep current customer projects running, but need another programmer to work development in parallel with production. After the initial re-write, this engineer would be expected to manage ongoing development as customer specific needs arise.
Candidates need the following skills
Ability to review code written in VB6 and discern functionality to rewrite in C#
Ability to create a modular infrastructure for the new software in .NET
A firm grasp of mathematics so they can wrap their heads around the kinematics algorithms necessary for the software
A familiarity with electronics so they can interface with our data acquisition board and aide in updating that when necessary. (challenge question: what components would you need to add to a circuit board to convert an NPN signal to a PNP signal?)
UPDATE: I was just informed that working remotely would be an option after an evaluation period of 3 months during which time your performance would have to assure us that you could work effectively on your own.
Email me with an interest: hokie07me AT gmail DOT com

Comments
this sounds like you build lightsabers or something
kyber crystals =/= piezo crystals
However, piezo crystals does anagram to "Zealots Crispy" so I guess we got that going for us
what if "force sensitivity" in kyber crystals is just a piezoelectric response
The work/life balance, as long as you get your work done, and the boss vacating their office for your kids is hard to put a salary number on. So valuable to your life and sanity.
I'm in that kind of situation now and I recently turned down a job that would have been about a 30k/yr pay raise with free health insurance for my family. But it was 40% travel with a company that has a reputation for owning your soul. Maybe a few years down the road...after my boss retires.
When you say reverse engineer the VB6 code it's not clear to me what you want.
Typically with software when you reverse engineer you don't have the source code. You have a binary (executable) that you have to figure out how it works.
If you have the VB6 source code then you want some one that can port the code to C#. This is a much cheaper hire typically.
See this is what I'm talking about. Never have an ME describe a non mechanical process.
We do not want someone to port over the code because it has evolved over time as different programmers have made it do what it needs. This isn't wrong per se, but it has made for a less efficient process than we'd like. Simply porting over the code would bring along those inefficiencies. So we need someone who can look over the existing code, identify the function and then ensure that the new build provides the same functionality (though not necessary in the same way). Does that make more sense?
And by the way, two of the guys who were instrumental in developing the software are still around, they just moved over to sales to make more money, I guess. So there are some subject matter experts to consult rather than just being stuck with a pile of code.
Typically when you port code, you don't do the dumb stuff again, unless you have to keep it because it would break the work flow to remove it. I guess then typically you do copy dumb stuff, since well that describes every business I've ever worked at, but that's just reality. But a good developer would isolate the stupid parts, abstract that code from the rest so it can be easily changed out in the future.
It sounds like you are looking for some one to re-architect your current VB6 application in C#.
sure? I do know we're taking quotes from consulting groups to do something that sounds a lot like that. We'd just prefer to have that talent in house for future development.