Right data visualization for employee progression data: Sankey, mosaic or parallel sets? The data set is employee progression data from date of joining through the years getting promoted from one grade to the next at different points depending on tenure in that grade, employee performance (and implicitly company growth rate in adding junior employees).
Stories the data could tell are 
 - the minimum tenure empoyees have to serve in each grade before moving
   to next grade
 - proportion who make it in the first cycle after minimum tenure
 - proportion who take a lot more time to get promoted
 - any such delays causing higher attrition among such population
   (hoping historical employee data will be provided)
As a newbie, I considered simple graphs (such as bar graphs) which can bring out these stories in a series of graphs.  They do to an extent but I came across few other non-standard visualizations and am wondering if there is a more appropriate viz for this data and the narrative.


*

*Mosaic plots do show the proportions well within a grade but it is
unclear how that can be translated to show a group doing well at
first progression but falling behind in the next cycle

*Parallel sets seem promising in visualizing the data but not sure if
the stories will jump-out

*I like Sankey diagrams best.  I hear that it is apt for flowing data (such as liquids in a factory) but I am wondering all the stories will nicely jump out - such as a group of employees who join and move together initially but later diverge progressing at different paces or proportion who get promoted in first cycle, proportion in second cycle and proportion still at same level. 


I did a hand drawing of Sankey (attached) and I like it.  I think something like this could answer all questions from audience (considering this a few thousand data line items, the audience will look for insights that they already don't know from anecdotal evidence)
Between these three, for this data, if one visualization can beat the other two, which would that be.
From the data visualization catalog site, I couldn't find any other that even comes close (except of course if a series of graphs / animation can be used).
I do know that the set will have data on 500-1000 employees, 15 years of progression (dates) and 9 levels.

 A: I tried a Sankey-style chart with simulated data. It's really a line chart with a translucent line for each of 1000 employees, applying some incremental offsets to reduce overlap. 

There is some appeal to seeing all the data, but I don't think it will be useful at answering your questions. It could, though, answer questions like, how did those Level 9 employees get there?

And you might be able to recognize patterns in different populations.
To answer your more analytical questions, I would go with simple charts targeted toward each question (or related set of questions). Here's a chart showing the average tenure at each level, with the shaded region showing some bounds of interest.

A nice feature of this chart (not shown) is that you can reasonably overlay a small number of these for comparing different groups. For instance, you could have a line for each employee rating group.
Script
The above mock-ups were made in JMP using its scripting language, JSL. Included in case it's a useful template even if you don't have JMP.
Here is the script to create the simulated data. The initial table has one row per employee and one column for each time period.
ne = 1000;
nt = 15;
nl = 9;

dt1 = new table("emp",
    New Column("ID", "Nominal", Formula(Row())),
    New Column("probs", "Expression", Formula(J(nl-1, 1, Random Uniform(0.05, 0.4))|/0)),
    New Column("t0", Formula(Random Category(.5, 1, .3, 2, .1, 3, .1, 4, 0.05, 5, 0.025, 6))),
    Add Rows(ne)
);
for (i = 1, i <= nt, i++,
    s = "\[dt1 << New Column("tAAA", Formula(:tBBB + if (random uniform() < probs[Row()][:tBBB], 1, 0)));]\";
    substitute into(s, "AAA", char(i), "BBB", char(i-1));
    Eval(parse(s));
);

Next, convert the table to tall form, stacking all the time periods into one column.
dt2 = dt1 << Stack(
            columns(:t0,:t1,:t2,:t3,:t4,:t5,:t6,:t7,:t8,:t9,:t10,:t11,:t12,:t13,:t14,:t15),
            Source Label Column( "tc" ),
            Stacked Data Column( "Level" )
        );
dt2 << New Column("Time", Formula(Num(Substr(tc, 2))));
dt2 << New Column("Row", Formula( Row()));
dt2 << New Column("rank", Formula( Col Rank( :Row, :Level, :Time )));
dt2 << New Column("levelj", Formula( :level+:rank/colmax(:rank)));

The formula columns add an offset to the level column. Here's the graph itself. 
Graph Builder( Size( 692, 428 ), Show Control Panel( 0 ), Show Legend( 0 ),
    Variables( X( :levelj ), Y( :Time ), Overlay( :ID ) ),
    Elements( Line( X, Y, Legend( 9 ), Row order( 1 ) ) )
);

I removed the color and transparency customizations for brevity.
