In my division, software engineers interact with electrical engineers on a daily basis. The software is usually very hardware specific. On some programs, it also helps to have some mechanical background as well. While some software is in the form of tools with graphical interfaces on a Windows platform, most software is on an embedded system with limited debugging capabilities. The software engineer is usually engaged in trying to make the algorithms work in a real-time system. Some challenges arise when processing takes places across processor boundaries and over interfaces.