An agency wants to develop a highly secret computer system using public contractors. So they hire different companies to implement different components of the system. When all the components are put together the system is functional, but each component on it's own does not reveal the true nature of the system. Often the nature of the system is controversial, illegal or dangerous.

That scenario has been played out many times in movies and books, but is it really possible to build such a computer system in the real-world without at least one company knowing the nature of the system.

As an example, in the movie Batman: The Dark Knight. Batman uses contractors to build a spy network that allows him to use mobile phones as sonar devices. He claims in the movie that no one knows the nature of the system, because it was out sourced to many different parties.

Sounds good in science fiction, but in the real world can systems been engineered this way. While I know parts of a system can easily be outsourced. Could an agency build a large complex computer system using contractors without anyone knowing the nature of the system?


It's going to be slow, expensive and unreliable if it works at all. While in theory the computers could hide some of the problems, remember that computers are built, maintained and installed by people. So is software. If you don't let the people talk to each other, the system will not work very well.

The key problem is that no-one must be able to guess the nature of the system from knowing every detail of one part of it. That means the parts have to be fragmented to a high degree (even the parts that do the integration). So there will be a lot of communication problems, compounded by the need to carefully filter the communication to prevent anyone knowing too much. You can't have the "spy on webcam" people saying to the "store files" people "this is webcam video", even accidentally. That means every communication between developers has to be filtered by a human being. Which makes communication slow as well as uninformative.

Debugging will also be a nightmare since no developer can be allowed to see the system running, and each part will have to have its own debugging infrastructure. So you, developer of the "pipe an audio stream from the network to the user interface" component, will have to debug the "sometimes it stutters" bug without knowing what the user interface is or where the audio comes from (ie, what device is on each end). It's going to be very tempting for you to say "my log is clean, it must be someone else at fault". Everyone else will be saying the same thing.

Another problem is that the "inside" team gets very large, and the bigger it is the more management it needs, which makes it bigger. It may end up being bigger than the team that could have developed the whole system inhouse.

I've worked in a large-ish bank that had similar problems. No so much because they were a secret organisation, but just because they were big and some people had to deal with a lot of systems. So if a foreign currency transfer failed, some poor user was looking at a bank internal monitoring program that said "ERROR: transfer failed", when the international currency transfer program says "error: success" and the recipient bank is saying "we got your request, where's the money"... and so on. Their solution was to have a team of "insiders", like me, who were contractors hired to provide tier three helpdesk support, but from the inside. So we had admin rights to pretty much everything (just like Snowden and Manning did), and our job was to sort out things that the outside contractors couldn't fix.

I suspect inevitably a system like this will fail because there are huge incentives for everyone to "just make it work", and very few for "don't tell people the critical information they need to make it work". Spy novels fix that by using threats to kill and appeals to patriotism as incentives not to talk. But in the real world the people paying the bills (government) want results now, and "but there might be a leak later" is much less important than whatever silly event has everyone excited right now. Even when the event was Manning leaking stuff, the response was to give Snowden more access rather than less. Ooops.


Such things are routinely done in the world of classified systems development. The key word is "compartmentalization". A very few people know how everything fits together, and then the various teams are given specifications for pieces of the total system, that never put it together.

Some of the pieces may be completely unclassified, but their intended application is highly classified, meaning that you won't be told what it is for, just that it needs to meet these specifications.


Yes, it is possible. There would have to be an architect (or a team) for the whole thing that would understand all of the pieces and their interactions at a very detailed level.

The requirements for each piece would have to be so specific that it would almost be easier to write the application. All of the pieces would have to follow the same style of application development (SOLID, DRY, DI, service oriented architecture, etc.). All of the pieces would have to have agreed upon communication protocols.

Such a build would take a long time, probably years due to the separation of concerns and later, integration testing.

There is one such example that I can think of that the public is aware of: ARPAnet (now known as the Internet). At the time it was built, it allowed government contractors and universities to communicate easily with ARPA. (I seem to remember hearing that it was at one time a secret project, but that could just be a bad bit in my memory...)

  • ARPAnet was never a classified project. It was built to allow researchers at one facility access to large, powerful computer systems somewhere else, without spending fortunes on travel. – John R. Strohm Apr 5 '14 at 9:46

Say the system was for collection, storing and viewing of spy photos.

  • The storage team don’t need to know what zoom lenses are used or how the images are processed.
  • The collection team don’t need to know how long the images are stored for or how they are processed. (There may be more then one collection team that does not know about each other)
  • Each processing team does not need to know how long the images are stored for, or where images are taken. Each processing team does not need to know about what the other processing systems can do.

However they will all have some idea what the system does but not know how well it does it, or all of the details.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.