Avoid spaces or any special characters in pathnames. Including spaces or other special characters in folder names may work, but it is best to avoid them (see 7, below)
Avoid long pathnames. Try to "flatten" your folder structures so that your system pathnames under 128 characters. It is likely you can go higher but not that much: the absolute Windows pathname limit (MAXPATH) is 260 characters. (This actually makes sense if 256 is the real ancestral limit: 1+2+256+1 or [drive][:\][path][null] = 260)
Start with a letter. Never begin an ArcGIS object name (table, field, relationship class, mxd file, folder, etc) with a number or any other non-alpha character.
No reserved words. Avoid names that may conflict with SQL or other language's reserved words. For example: OBJECTID, VALUE, COUNT, NOT, OR, ON, IN, OVER, SELECT. This is to avoid confusing both people and SQL.
Be brief. All field names should contain 10 characters or less. This is a dBase limit, so it applies to .dbf files AND shapefiles. For that reason it's best practice in case you need to go "through" a dbf based format. Coverage and grid names have a limit of 13 characters, but 10 is safer. If you really want a longer name around or one with special characters, use the alias.
Raster names can be particularly problematic. Raster dataset names MUST start with a letter and it is best to keep the filename under 14 characters to support Esri grid format, and special characters in the path (space, &, -) may cause raster exports and tools to fail with cryptic error messages (like 999999).
Use code in scripting to check names. The arcpy methods ValidateFieldName and ValidateTableName can be used at parameter validation time, or in your code, to prevent users of your tool from inserting invalid output names. The CreateScratchName method if provided the proper arguments, will generate valid dataset names.
You have been warned. Violating these suggestions may work, but one thing I have learned in my long career is that one should avoid tempting fate.