I'm a freelance developer and typically work for small businesses, either supporting their systems or writing new ones. Very often I'm the only "IT Guy" involved with the business, and they tend to rely very heavily upon me for guidance.
In 2016 I developed a Line-of-Business application (browser-based, ASP.Net WebForms with MySql d/b) for a business that employs around 20 staff with a further 120 or so contractors relying heavily upon them for work. The application meets their needs exactly, is very reliable and has (until last year) needed very little tweaking. More recently as the business has developed new features have been requested which have been added easily and very cost effectively. It's quite a complex system but designed to be highly expandable, with as much common code as possible. Right from the outset, the owners were wary of effectively putting their business in the hands of a single, (at the time) unknown individual consultant. However I'm now a trusted member of the team, proactively suggesting changes to the software and the business processes.
I'm now in my mid-sixties and winding down my commercial activities. This is the last of my major clients but I spend an average of 10 - 15 chargeable hours per month for them. I also typically spend 15 - 20 minutes a day just "keeping an eye" on the system; things like checking backups are still running, disk space is fine, and reviewing the system's logs. Errors are all emailed to me but most are related to user error rather than highlighting any system problem, although occasionally things do need urgent, responsive action. The dilemma now is how to hand over this rather static but largish system to a 3rd party who can take on responsibility for day-to-day support plus ongoing development? The client doesn't have massive sums of money to spend, has no wish / need to have the system redeveloped, and doesn't understand the technologies involved to discuss on equal terms any future support provider. I've tried a few times (including through these pages) to find someone to take it on; I had one suitable offer but the route of a single freelancer doesn't remove the "single point of failure" concern of the client (i.e. what happens if the support individual falls under the proverbial bus or - more likely - dies of covid?). True, although wishing to retire I'm not expecting to "go" anywhere soon, so I am there for now as a backup. I did find one small consulting company, conveniently only 10 miles from the client, and they were taking on one or two small developments as a way to familiarise with the system. However then Covid struck, the developments were cancelled, and the client told me that they "didn't really get on that well" with them.
There is some functional requirements documentation, all stuff like passwords, URLs, hosting accounts etc are gathered together and up-to-date, and the software is well structured and uses sensible naming conventions throughout, though is not heavily documented in code.
So the question is, questions are, how do contractors deal with the issue? How do you go about identifying service providers and assuring yourself they're competent? And how do you work with a new provider to get them up to speed?
The problem doesn't really seem to be you but rather them. They need to find someone to support the product.
Best I can see here is that you are attempting to find that support for them and then get them to agree to it.
For that scope of work you mention there are only two possibilities.
# A single individual
# A smaller consultant company.
The first case does and always will have the single point of failure. There is no way around that.
The second will cost the company more. Again no way around that.
The first case could be mitigated but only if someone in the company became actively engaged in managing the process and if the problems were never immediate. Then they could hire one or two college students. Those students would be looking for real experience and would cost less. With active management then replacing them becomes a management problem and not a technical one. So if one disappears then the management process finds another. It must be active management because they will disappear.
You're right, it is essentially the client's problem in that they need to resource support for their system. In reality, they can't even fill in a web form from their hosting provider to upgrade their service; it's a bit of a miracle that they can actually use the system I built them! With zero IT knowledge, they're 100% reliant on trusted providers to point them in the right direction and make sure they get an appropriate provider, at appropriate support levels, for an appropriate price. That's what they're (quite happily) paying me to do. I could just suggest they go direct to an agency, and it may indeed come to that.
As far as a trainee / apprentice / studentship goes, not sure that's a starter. Although it's a well-structured application, not sure too many recent graduates are looking to build up VB.Net WebForms experience right now...
Whoever we find, my final question is possibly the one that concerns me most; given the system is large but essentially static, what's the best way to get a new support provider up to speed quickly? I guess it's something that happens in IT shops all over the place where new developers take on responsibility for an application; it's just not something I've had to do for 20 years or so!
I guess it's something that happens in IT shops all over the place
Not for the situation you described. Most, probably the vast majority, of places have an in house staff that manages it. Either manages the employees/contractors or manage the support consultant company which in turn also has someone that manages the actual people.
In either of those cases there is a person that is responsible for the new people. Describing what needs to be done, determining how to monitor that it is getting done, and providing ongoing management of that.
I meant that getting a new tech up to speed on an existing system (with handover from the previous responsible person) is something that happens a lot. Whether that's "managed" or not, the handover still occurs. As it happens, because there is no other IT-literate person in the client company (which is often the case with my clients) I'm not only "doing" the handover, I'm also "managing" it.
Has anyone some experience when it comes to change & release management and legal, compliance or audit requirements (country dependent)?
Can you share some of your legal (country dependent), compliance or audit requirements?
We already have a very basic directive from legal and compliance to follow but I am curious what other people do or don’t do.
By the way my goal is to have the leanest/simplest change & release process one can think of but still have an audit trail. Like create an issue tracking item (request of change) with required fields, status, workflow and linked work orders including linked stories. I already have it all planned out but I would like your input for comparison/improvements.
Discussion examples: what to do when the location of the data changes, shall we have sign-offs or not, do we need work orders, do we need linked stories, which fields are important/required etc.
In the process of practicing agile, the team will have multiple choices: Scrum, XP(Extreme Programming), Kanban, Crystal, Lean, SAFe, etc. The most popular agile development method is Scrum. Therefore, some stereotype it as that agile is Scrum, and implementing Agile is to practice the Scrum method.
Improving products has gradually become the glue that keeps the development team and the operation and maintenance team together. In this case, people are often tied to a dilemma: for team agile transition, Scrum or DevOps?
My thought is that far too much time is spent agonizing over process methodologies. The primary focus should be on creating a culture of design and implementation excellence. Things like code reviews, code ownership, automated testing, and refactoring will do far more to achieve excellence than any process.
Actually, these two are not competitors to each other they are complementary to each other for developing any software do is better we look for their working properly while the process is going on rather than comparing them.
As asked and within the context of what is provided that question doesn't really make sense. Those Process Control methodologies are intended to cover two different areas of work within the totality of what is needed for a business. So you would not pick one but both.
I am not sure what is the right forum to publish this in (here or in the C++ forum)
But I coudln't find any information about it too, which is odd.
Anyway, Unit testing in C++:
Since it is not as popular as unit testing in other high level languages, I need your recommendations and insights.
I have a lot of legacy code- I was just given a project to which I have to have covered by at least 70% unit tests.
I need to do a lot of refactoring. Different tools (mocking tools) offer different things and has different limitations. So it might be smarter to ask the people who have already done this and know better than I do - what do you use?
Is there a mocking tool (along with a supported testing framework) that can mock concrete classes, virtual, static and non static method, private methods, etc?
I recall being in the same situation 2 years ago.I had a lot of legacy code in my project and I had write unit tests for it.
I have spent hours on researching and trying different tools for the task I was given, and it was not easy to find mocking tools
that could satisfy my needs when it comes to different limitations I had which are similar to the ones you mentioned.
I have tried different ones but then found GMock and later on FakeIT, both did quite a good job but couldn't help me with
concret&static classes, private/static/virtual methods and I had to do a lot of refactoring in my code.
Researching a little more and I found Isolator ++ (which is actually free now, I had to pay back then), which amazingly took care of such cases
and saved me a lot of time...so you know where my recommendation goes to :slightly_smiling_face:
I guess I'm a bit late for the party. But I still think it's a useful reminder that if you want to check your application for correctness you may employ other tests as well. I.e. end-to-end tests. Might be easier to get a legacy system under test with them
It is a very blurred line between an expiry date that ask you to "overhaul" the software and a nag screen that demands that you update the system. Both may allow you to continue to work but achieve the same thing and are bloody annoying.
I suspect the OP has run across an early version of an updater attempt.
Never underestimate the power of human stupidity -
I'm old. I know stuff - JSOP
If your are writing it as a Software as a Service type application then yes. Its no difference than say Office 360 which is a subscription every year you have to pay for it again. If however you are just writing a widget app it either needs to be a you pay for it its yours. Now its fair to link that install to a machine where that license can ONLY run on one machine (or one at a time)