Como uma arquitetura NUMA fornece uma única imagem do sistema, ela geralmente pode executar um sistema operacional sem otimizações especiais.
A alta latência dos acessos remotos à memória pode deixar os processadores subutilizados, esperando constantemente que os dados sejam transferidos para o nó local, e a conexão NUMA pode se tornar um gargalo para aplicativos com altas demandas de largura de banda de memória.
Além disso, o desempenho desse sistema pode ser altamente variável. Isso varia, por exemplo, se um aplicativo tiver memória localizada localmente em uma execução de benchmarking, mas uma execução subsequente colocar toda essa memória em um nó remoto. Esse fenômeno pode dificultar o planejamento da capacidade.
Alguns sistemas UNIX de última geração fornecem suporte para otimizações de NUMA em seus compiladores e bibliotecas de programação. Esse suporte exige que os desenvolvedores de software ajustem e recompilem seus programas para obter o desempenho ideal. Não é garantido que as otimizações para um sistema funcionem bem na próxima geração do mesmo sistema. Outros sistemas permitem que um administrador decida explicitamente sobre o nó no qual um aplicativo deve ser executado. Embora isso possa ser aceitável para determinados aplicativos que exigem que 100% de sua memória seja local, isso cria uma carga administrativa e pode levar ao desequilíbrio entre os nós quando as cargas de trabalho são alteradas.
Idealmente, o software do sistema fornece suporte transparente a NUMA, para que os aplicativos possam se beneficiar imediatamente sem modificações. O sistema deve maximizar o uso da memória local e agendar programas de forma inteligente, sem exigir a intervenção constante do administrador. Por fim, ele deve responder bem às mudanças nas condições sem comprometer a justiça ou o desempenho.