I've had a lot of people having issues with External packages and the Level Package.

First off let me say this; there is nothing wrong with using external packages, or the Level package; you just have to chose when to use either or. In the case of UDK 101, I made the choice for people.

An important feature of UDK is that almost everything you add to your level is done via referencing objects within packages. So when you add a static mesh to a level, apply a material etc what you're actually doing behind the scenes is making a reference to an object within a package.

You can see these references really easily; for example if you look at the properties of a static mesh in your level, under Static Mesh Component -> Static mesh you will see an entry similar to this: "StaticMesh'EditorMeshes.TexPropCube'". This is a reference, this one has three parts; a type, a package and a name. In this case the type is "StaticMesh", the package is "EditorMeshes" and the name is "TexPropCube". UDK uses these references to know what to put where, you can change this reference to any other static mesh available to you and it will automatically update.

If you press find in content browser (the magnifying glass) your content browser will display the location of that mesh in it's package. In this case it takes you to the package "EditorMeshes" and the mesh "TexPropCube". As you can see the three pieces of information in the reference correlate to a location of a static mesh, inside a package in the content browser.

You'll see these kinds of references all over UDK; places like material texture samples, matinee nodes etc etc etc.

The difference between an External Package and the Level Package is just how UDK handles where it stores the objects that it references. External Packages are saved out to a specific file with the file type .upk where as the Level package is saved inside the .udk file. By definition you can only have one internal package per level, so each .udk. Every level will always have a level package, and it will always have the same name as the level. It exists to store information such as lightmaps and material instance constants created via landscape. However we can access it and store extra objects in there if we need to.

As standard, UDK comes with several external packages that store the assets that come with UDK, including a bunch from Unreal Tournament 3 (UT3). You can find these package files in [UDKinstalLocation]\UDK-2012-05\UDKGame\Content\, you will also find this folder structure inside your content browser under the "packages" section. Due to the way UDK is set up it will automatically detect and load up thumbnails for the package contents it's been told exist.

So what's the difference for us? When you create a new object (including importing) you are asked to place it within a package; remembering that objects are referenced by type, package and name the package and it's location becomes very important. If for some reason your package get's lost, UDK won't be able to complete the reference and find the object. E.g. if you were to delete the EditorMeshes package from the previous example the reference "StaticMesh'EditorMeshes.TexPropCube'" would no longer work, the engine will not be able to locate the package "EditorMeshes". (p.s. don't actually delete the EditorMeshes package)

When you create an external packages (any package that's name does not match your level name) you are telling UDK that you will be storing your objects in a specific file, that will be located in a specific place on your hard drive AND that you will be responsible for saving any changes you make as you go.

If that package is outside the default UDK install location the engine will incorporate the location into the reference it makes. This sounds perfectly acceptable, and it is especially when dealing with local files; in fact UDK is clever enough to load up files it been told exist even if they are outside your install location. However an issue develops when you go to send your level to someone else. If you forget to send your package, or don't tell them the specific place to put it so that any references in the level are correct UDK won't be able to locate the files you're telling it exist. And it will yell at you. Game develops will create a protocol for saving packages that their level designers and Environmental artists are expected to use, this make sure nothing gets lost.

As I said before, you are also responsible for saving your package as you go, so if you make some changes and forget to save your package AND your level you're object changes won't be saved, when you close UDK it will let you know if you have unsaved packages, just encase you forget.

Iif you were to save your objects into the level package (a package with the same name as your level) the objects will be stored inside the .udk and not to an external location, thus UDK is never asked to look outside of the one file so it can't fail to complete the reference and find the object. However doing this can seriously bloat your .udk. In addition if you wanted to use the same assets in multiple levels you would have to store them in each .udk file, which again creates a lot of bloat.

The choice to use an external package is just that, a choice. You have to weigh up the cost / benefits of using them and work out which is better per case. General rule of thumb however is that if you're only going to use it in one level, and you aren't importing almost all aspects of your level you can get away with using the level package. If you want to use the same assets over several levels, or if you have a lot of new assets (especially textures or meshes) then it's probably a good idea to use an external package. I chose to make people use the level package for UDK 101 specifically because it's easier for both you and me. I don't have to worry about people forgetting .upk files, and having to move them to specific places while marking, and it makes it harder for people to forget to save their assets or forget to send files to me.

A note about how UDK saves things.
UDK has a function where it will look into what's being used and remove unreferenced assets located in the level package. This is why you have to use these assets in some way before you exit UDK, or lose data. There is also an issue where if you create a package inside an unsaved level, then try to save the level to the package name, UDK will yell at you. So save your level before you do anything else.

External reference warnings.
If you save your level outside the standard UDK install location you will get a warning tell you that UDK may not be able to find some assets. What this means is that the references in the level don't state where UDK is on your machine, and that it's using it's default values.

I hope this clears up some issues. If you don't understand please ask some questions.