This file is indexed.

/usr/share/php/tests/Horde_Feed/Horde/Feed/fixtures/lexicon/http-software.ericsink.com-rss.xml is in php-horde-feed 2.0.1-4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
<?xml version="1.0" encoding="iso-8859-1" ?>

<rss version="2.0">
<channel>
<title>Eric.Weblog()</title>
<link>http://software.ericsink.com/</link>
<description>Thoughts about software from yet another person who invented the Internet</description>
<copyright>Copyright 2001-2008 Eric Sink. All Rights Reserved</copyright>
<generator>mine</generator>


<item>
<title>Summer Movies</title>
<guid>http://software.ericsink.com/entries/summer_movies.html</guid>
<link>http://software.ericsink.com/entries/summer_movies.html</link>
<pubDate>Mon, 21 Jul 2008 11:18:24 CST</pubDate>
<description>
<![CDATA[
<p>This weekend I saw Wall-E and The Dark Knight, both of which
are just amazingly good.&nbsp; Lately I'm thinking this may be the best summer of
movies ever.</p>

<p>Compared to cinematic masterpieces such as these, Paul
Roub's <a href="http://blog.roub.net/2008/07/explaining_fortress_visually.html">recent
videos</a> are kind of lame.&nbsp; His plot and characters are really anemic.&nbsp; I
need to talk to him about somehow working in a car chase scene and more
explosions.</p>

<p><b>:-)</b></p>

<p>Seriously, Paul has been making some short videos to offer a
different way of talking about our products.&nbsp; His <a
href="http://sourcegear.com/fortress/video/installation.html">latest one</a> is
my favorite:&nbsp; In order to show how quick and easy it is to setup SourceGear
Fortress, this video shows every step of the install from start to finish.&nbsp; The
video is 3 minutes and 12 seconds long.</p>

<p>These movies aren't exactly Iron Man, but they're still
pretty cool.</p>

<p></p>
]]>
</description>
</item>

<item>
<title>C and Morse Code</title>
<guid>http://software.ericsink.com/entries/c_morse_code.html</guid>
<link>http://software.ericsink.com/entries/c_morse_code.html</link>
<pubDate>Fri, 23 May 2008 06:40:16 CST</pubDate>
<description>
<![CDATA[
<p>Darren Stokes <a
href="http://blog.darrenstokes.com/2008/05/22/do-you-really-need-to-know-c-i-think-so/">sides
with</a> Joel over Jeff on whether programmers should know C.</p>

<p>This whole debate reminds me of <a
href="http://en.wikipedia.org/wiki/Amateur_radio">amateur radio</a> operators
bickering over whether newbies should be allowed to get a license without
learning <a href="http://en.wikipedia.org/wiki/Morse_code">Morse code</a>.</p>

<h3>Morse Code</h3>

<p><i>So Eric, tell us about your experience as an amateur "ham"
radio operator?</i></p>

<p>My call sign is KA9KEF.&nbsp; To get my General class license, I
had to pass a written exam as well as a Morse code test at 13 words per minute.</p>

<p><i>Really, you know Morse code?&nbsp; Nowadays, it's possible to
get a ham radio license with no code at all.&nbsp; </i></p>

<p>Yes, and I think that's outrageous!&nbsp; It's just wrong.</p>

<p><i>Why do you think that?</i></p>

<p>If I had to learn Morse code, then everybody else should
too.</p>

<p><i>So does anybody really need Morse code these days?</i></p>

<p>Well, I suppose not.&nbsp; But don't pester me with facts that distract
from my point.&nbsp; Learning Morse code should be a rite of passage for all hams.&nbsp;
Anybody who got a license without code is not a "real ham".</p>

<p><i>But you -- you are a "real ham".</i></p>

<p>Yep.&nbsp; I passed the Morse code test.&nbsp; 13 wpm.</p>

<p><i>So you're still actively involved in amateur radio?</i></p>

<p>Well, no.</p>

<p><i>Oh.&nbsp; When was the last time you used your ham rig?</i></p>

<p>I suppose it's been a few years.</p>

<p><i>How many years are in "a few"?&nbsp; Maybe five?</i></p>

<p>More like twenty.</p>

<p><i>Twenty years?&nbsp; </i></p>

<p>Twenty-three, actually.</p>

<p><i>And you still have your amateur radio equipment?</i></p>

<p>Well, no.&nbsp; I sold my station a long time ago.</p>

<p><i>OK, let's review.&nbsp; You're a "real ham", even though
everything you know about ham radio is two decades out of date.&nbsp; But the guys
who got a "no code" license and are actively practicing the hobby today,
they're somehow not "real"?</i></p>

<p>That's right.&nbsp; I know Morse code.&nbsp; They don't.</p>

<p><i>So you think all ham radio operators should be required
to learn a basically useless skill simply because you did?</i></p>

<p>Exactly!&nbsp; And don't ask me to get down from my high horse.&nbsp;
I like it up here.</p>

<h3>C</h3>

<p>The argument about whether programmers need to know C is
just so similar.</p>

<p>All of the people arguing that C is important are the people
who have already learned it.&nbsp; I'm pretty sure that a lot of their argument is
resting on the same foundation as those crotchety old hams:&nbsp; "If I had to learn
C, then everybody else should too."</p>

<p>I am one of those people.&nbsp; Yep, not only am I a Morse code
bigot, I'm a C bigot as well.</p>

<p>I learned C, and I learned it good.&nbsp; I've worked on multiple
significant C projects.&nbsp; I even wrote a C compiler.&nbsp; In C.&nbsp; I think all "real programmers"
know C.</p>

<p>Yep, we C programmers are elitist and proud of it.&nbsp; The view
from up here on our high horse is pretty good.&nbsp; We see lots of so-called
programmers down there:</p>

<ul style='margin-top:0in' type=disc>
 <li >They don't really know what a pointer is.</li>
 <li >They're not even using a real compiler!&nbsp; That thing
     they're using doesn't even generate native code you know.&nbsp; It's "byte
     code", so it's not real.</li>
 <li >Those people have never had to manage their own memory.</li>
 <li >In fact, they've never really had to do anything at all.&nbsp;
     I mean really.&nbsp; They're building on a class library that's got more
     features in it than Photoshop.</li>
</ul>

<p>We are different.&nbsp; We learned C.&nbsp; We are "real programmers".</p>

<h3>One big difference</h3>

<p>What's the main difference between hams who know Morse code
and programmers know C?</p>

<p>The C programmers actually have a point.</p>

<p>Seriously, strip away all the elitism and see what's left.&nbsp; Morse
code is nearly useless, but C is still darn important whether you're using it
or not.</p>

<p>And a lot of people are still using it, by the way.&nbsp; Don't
think of C as merely "important historical and foundational background".&nbsp; In
fact, my current project is being written in C.&nbsp; Software development today is
a big field.&nbsp; There are still many problems for which C is the best solution.</p>

<p>But even if you're coding in something higher level, the
experience of using low-level programming techniques is invaluable.</p>

<p>I'm not going to take a black-and-white stance on this.&nbsp; I
won't go so far as to say that every developer must learn C.&nbsp; I've met lots of
developers without C experience who are successful and making positive
contributions to important software projects.</p>

<p>Furthermore, I'll admit that knowing C is not a magic
solution to poor skills.&nbsp; A lousy developer who happens to know C is simply
better equipped to hurt himself or somebody nearby.</p>

<p>However, I can say these two things:</p>

<ol style='margin-top:0in' start=1 type=1>
 <li >All of the truly extraordinary developer s I know are
     people who really understand the kind of low-level details that C forces
     you to know.</li>
 <li >Every programmer without C experience has a clear path of
     personal development:&nbsp; Learn C.&nbsp; Get some real experience using C to write
     a serious piece of software.&nbsp; Even if you never use it again, you'll be a
     better programmer when you're done.</li>
</ol>

<p></p>
]]>
</description>
</item>

<item>
<title>My Favorite Books</title>
<guid>http://software.ericsink.com/articles/books.html</guid>
<link>http://software.ericsink.com/articles/books.html</link>
<pubDate>Thu, 22 May 2008 08:00:00 CST</pubDate>
<description>
<![CDATA[
<p>People often ask me for a list of my favorite books.&nbsp; So
here it is.&nbsp; </p>

<p>I reserve the right to update this list from time to time.</p>

<p>I tend to read a <i>lot</i> of stuff.&nbsp; The fact that I
recommend a book here does not mean that I agree with everything in it.</p>

<h3>Coding</h3>

<p>I think it's out of print, but I really liked <a
href="http://www.amazon.com/exec/obidos/ASIN/1556155514/sawdust08-20">Writing
Solid Code</a>.&nbsp; It's very oriented toward C/C++, so if you're mostly in
C#/Java/Ruby/Python/Perl/VB, it may not be worth your time.&nbsp; Still, it's an
outstanding book.</p>

<p>And of course <a
href="http://www.amazon.com/exec/obidos/ASIN/0735619670/sawdust08-20">Code
Complete</a> is a classic.</p>

<h3>Software Management</h3>

<p><a
href="http://www.amazon.com/exec/obidos/ASIN/0735623198/sawdust08-20">Dynamics
of Software Development</a> is one of my favorites.</p>

<h3>Business</h3>

<p>I'm a big fan of <a
href="http://www.amazon.com/exec/obidos/ASIN/0060566108/sawdust08-20">Built to
Last</a> and its sequel, <a
href="http://www.amazon.com/exec/obidos/ASIN/0066620996/sawdust08-20">Good to
Great</a>.&nbsp; The sequel is easier to read and a bit more relevant to smaller
companies.</p>

<p><a
href="http://www.amazon.com/exec/obidos/ASIN/0761521747/sawdust08-20">The
Silicon Valley Way</a> is a great book, and it's a very visual book with nice
short chapters.&nbsp; Easy to just pick up and browse..</p>

<p>If you get the opportunity, go hear Guy Kawasaki speak.&nbsp; He's
much better in person than he is on paper.&nbsp; But if that doesn't work out, <a
href="http://www.amazon.com/exec/obidos/ASIN/088730995X/sawdust08-20">Rules for
Revolutionaries</a> is a good read.</p>

<h3>Marketing</h3>

<p>If you read only one book on marketing, it should be <a
href="http://www.amazon.com/exec/obidos/ASIN/0060517123/sawdust08-20">Crossing
the Chasm</a>.</p>

<p>But actually you should read at least a dozen books on
marketing.&nbsp; </p>

<p>Here's your second one: &nbsp;<a
href="http://www.amazon.com/exec/obidos/ASIN/0471028924/sawdust08-20">Differentiate
or Die</a></p>

<p>Now go find ten more.</p>

<h3>Sales</h3>

<p>I think <a
href="http://www.amazon.com/exec/obidos/ASIN/0684856018/sawdust08-20">Selling
the Wheel</a> is an outstanding book.&nbsp; At first you'll be tempted to stop
because it's kind of cheesy.&nbsp; Don't.&nbsp; Finish it all the way to the end.</p>

<h3>Useless but Enjoyable Fluff</h3>

<p>I really like the "Prey" series of novels by John Sandford.&nbsp;
Start at the beginning with <a
href="http://www.amazon.com/exec/obidos/ASIN/0425205819/sawdust08-20">Rules of
Prey</a></p>

<h3>WPF</h3>

<p>I have all of the following WPF books:</p>

<ul style='margin-top:0in' type=disc>
 <li >The one by <a
     href="http://www.amazon.com/exec/obidos/ASIN/0596510373/sawdust08-20">Chris
     Sells and Ian Griffiths</a></li>
 <li >The one by <a
     href="http://www.amazon.com/exec/obidos/ASIN/0672328917/sawdust08-20">Adam
     Nathan</a></li>
 <li >The one by <a
     href="http://www.amazon.com/exec/obidos/ASIN/0735619573/sawdust08-20">Charles
     Petzold</a></li>
 <li >The other one by Charles Petzold, <a
     href="http://www.amazon.com/exec/obidos/ASIN/0735623945/sawdust08-20">focused
     on WPF 3D</a></li>
</ul>

<p>These are all good, each in a different way.&nbsp; If you're
going to do anything serious with WPF, it seems to me that you should own them
all.</p>

<h3>Other Stuff</h3>

<p>The <a
href="http://www.amazon.com/exec/obidos/ASIN/0743269519/sawdust08-20">Seven
Habits of Highly Effective People</a> is still worth reading.&nbsp; None of Covey's
other books are nearly as good.</p>

<p>Any serious pool player has a copy of <a
href="http://www.amazon.com/exec/obidos/ASIN/0156005549/sawdust08-20">Byrne's
New Standard Book of Pool and Billiards</a>.</p>

<p>My favorite literary novel is <a
href="http://www.amazon.com/exec/obidos/ASIN/0140449264/sawdust08-20">The Count
of Monte Cristo</a>.&nbsp; The unabridged version is worth the extra trouble.</p>

<p>For dog lovers, <a
href="http://www.amazon.com/exec/obidos/ASIN/0060817097/sawdust08-20">Marley
&amp; Me</a> is terrific.</p>

<p></p>
]]>
</description>
</item>

<item>
<title>Yesterday's entry:  A comment and a correction</title>
<guid>http://software.ericsink.com/entries/ethics.html</guid>
<link>http://software.ericsink.com/entries/ethics.html</link>
<pubDate>Wed, 21 May 2008 08:33:06 CST</pubDate>
<description>
<![CDATA[
<h3>The Comment</h3>

<p>I've received a lot of feedback on <a
href="http://software.ericsink.com/entries/scrabble_1994.html">yesterday's blog entry</a>.&nbsp;
The two most common questions are:</p>

<ul style='margin-top:0in' type=disc>
 <li >Eric, why did you think that working on your Scrabble
     project was wrong?&nbsp; It doesn't seem all that bad.</li>
 <li >And since you thought it was so awful, can we assume that
     you would go ballistic if someone in your company was working on a pet
     project at the office?</li>
</ul>

<p>I sort of figured that if I wrote an article about a
software manager that I really admire, I didn't need to address the question of
how I would react in a similar situation.&nbsp; It should be fairly simple to
connect the dots.</p>

<p>But folks are having trouble with the fact that I held such a
strict attitude about my own transgression.&nbsp; They assume that I would be
similarly draconian with others.&nbsp; A fair assumption I suppose, but an incorrect
one.</p>

<p>When it comes to ethics, most people treat themselves
loosely and other strictly.&nbsp; Instead, try being strict with yourself and
gracious toward others.&nbsp; You'll get along a lot better with the world.</p>

<p>Do I really believe that working on a fun personal project
at work is such a heinous crime?&nbsp; Certainly not.&nbsp; But surely you can agree that
goofing off and trying to cover it up isn't exactly the way to win the employee
of the month award?</p>

<p>The truth is that I just don't believe in making excuses.&nbsp; I'm
not going to defend myself unless I have solid possession of the moral high
ground.</p>

<p>My kids read this blog.&nbsp; I'm trying to teach them to take
responsibility for <i>all</i> their choices, good and bad, big and small.&nbsp; How
can I do that if I'm not willing to set the example?</p>

<p>If I found somebody in my company working on a pet project
at work, I imagine I would handle it pretty much like Tim did:&nbsp; I would be more
disappointed in the company than in the individual.&nbsp; If people are working on
hobby code, then they're bored.&nbsp; In my opinion, the blame for a bored employee
splits about 80/20 toward management.</p>

<h3>The Correction</h3>

<p>Tim's current car is a Lamborghini, not a Ferrari.</p>

<p></p>
]]>
</description>
</item>

<item>
<title>Choose Your Manager</title>
<guid>http://software.ericsink.com/entries/scrabble_1994.html</guid>
<link>http://software.ericsink.com/entries/scrabble_1994.html</link>
<pubDate>Tue, 20 May 2008 08:00:00 CST</pubDate>
<description>
<![CDATA[
<h3>The Context:&nbsp; Being a slacker</h3>

<p>In the early months of 1994 I wrote a program to play
Scrabble.</p>

<p>It was a magnificent piece of code, easily the fastest
Scrabble program I had ever seen.&nbsp; The implementation (in C) was based on the
GADDAG data structure and algorithm explained in a <a
href="http://software.ericsink.com/downloads/faster-scrabble-gordon.pdf">paper</a> by Steven
Gordon.&nbsp; The resulting program was so fast that computer moves were
instantaneous.</p>

<p>Unfortunately I had to keep my software a secret.&nbsp; The
lawyers at Hasbro love to send <a href="http://en.wikipedia.org/wiki/Nastygram">nastygrams</a>
to anyone who implements a Scrabble program.&nbsp; These guys are a lot like the
lawyers at the RIAA who have become famous for their lawsuits against toddlers
and family pets.&nbsp; The Hasbro legal team is merely less prolific.</p>

<p>Actually there was one other reason why I kept my Scrabble
program a secret:</p>

<p>I wrote the entire thing on company time using my employer's
hardware.</p>

<p>At the time I was working for Spyglass.&nbsp; We had recently
finished shipping version 2.0 of our flagship product, Spyglass Transform.&nbsp;
Things were a bit slow, so I was discreetly hacking on my pet project.&nbsp; I setup
my office such that nobody could see my screen from the door.</p>

<p>Unfortunately, I gave myself away.&nbsp; At times when I was working
on my Scrabble code when my boss (Tim Krauskopf) walked in the door, I would
flinch and quickly try to minimize the window.&nbsp; About the third time it
happened, Tim said, "All right, what game are you playing?"&nbsp; Suddenly I wished
I actually <i>was</i> playing something like Doom.&nbsp; In that moment, working on
non-company software seemed more shameful than wasting time in a first-person
shooter.</p>

<p>I offered a full confession and an apology.&nbsp; </p>

<p>I don't remember what he said.&nbsp; </p>

<p>I do remember that he never mentioned it again.</p>

<h3>The Inflection Point:&nbsp; Day 1 of the browser wars</h3>

<p>A few weeks later, on April 4<sup>th</sup>, 1994, Tim once
again stepped into my office.&nbsp; He said he needed to talk with me somewhere offsite.&nbsp;
We left.</p>

<p>In that conversation, Tim told me that the Spyglass management
team was making the decision to abandon our then current business (scientific
data visualization tools) and get into the web browser business.&nbsp; He asked me
to immediately begin working and commit to giving a demo to an important
potential customer a few weeks later.</p>

<p>I shifted into high gear.&nbsp; I came in at 5:30 am every day
for weeks.&nbsp; I was writing code at a fantastic pace.&nbsp; The demo was successful.&nbsp;
We showed them our browser.&nbsp; It didn't have as many features as NCSA Mosaic,
but it was a lot faster.&nbsp; We didn't tell them that it was written from scratch
in less than a month by a kid who had never written any networking code
before.&nbsp; We got the sale.</p>

<p>And that was just the beginning.&nbsp; The project started out
with me alone, but two years later it was a team of 50 with me in a leadership
role.&nbsp; We were the first Internet IPO.&nbsp; We licensed our browser to Microsoft
and it became Internet Explorer.</p>

<p>That conversation on April 4<sup>th</sup> ended up being a
defining moment for my career.&nbsp; And it happened just a few weeks after Tim
caught me skiving off on the job.</p>

<p>What the %#$@ was Tim thinking?</p>

<h3>The Premise:&nbsp; Tim made a wise choice</h3>

<p>I'm going to surface a lesson from this story, but you
should probably read no further if you disagree with Tim's decision.</p>

<p>And if you do, I can't really argue with you.&nbsp; I'm not going
to defend my actions.&nbsp; I was being irresponsible, even dishonest.&nbsp; There are no
excuses for behavior like that.</p>

<p>Maybe Tim should have fired me.&nbsp; At the very least, maybe
Tim should not have entrusted the development of his company's next big product
to someone who lacked the discipline to stay on task.</p>

<p>Still, the overall results deserve some kind of voice in
this argument.&nbsp; Tim and his company were very successful.&nbsp; Tim drives a Ferrari
now.&nbsp; Tim's choice worked out very well for me, but it turned out pretty well
for Spyglass too.</p>

<h3>The Lesson Learned:&nbsp; Choose your manager carefully</h3>

<p>This story may seem like it's about me, but really it's
about Tim Krauskopf.</p>

<p>I've never asked Tim why, so I guess I don't really know.&nbsp; Maybe
he just believes that being obsessive to a fault about code isn't the worst
character defect for a developer to have.</p>

<p>I spent five years at Spyglass.&nbsp; The incident described
above is just one of many that left me in awe of Tim's leadership skills and discernment.&nbsp;
I don't think I ever really figured out what makes that guy tick, but I still
think of him every time I measure myself as a manager and leader.</p>

<p>The part that seems most astonishing to me is that he kept
his emotions in check.&nbsp; Didn't he feel any sort of disappointment or even
betrayal?&nbsp; Why didn't he overreact?&nbsp; That's what most people would have done.&nbsp;
I probably would have.</p>

<p>All I really know here is this:</p>

<p>Your manager plays an enormous role in determining the
success of your career.&nbsp; Choose your manager very, very carefully.</p>

<ul style='margin-top:0in' type=disc>
 <li >Choose somebody smart.&nbsp; </li>
 <li >Find somebody who is not merely smart, but "emotionally
     smart".</li>
 <li >Find somebody who is not merely smart, but wise.</li>
 <li >Choose a person from whom you can learn.</li>
</ul>

<p>Just to be clear, I am not saying you are powerless.&nbsp; Your
success is mostly determined by your own abilities and choices.</p>

<p>But one of those choices is the decision of who you are
going to work with.</p>

<p>Don't take that choice lightly.</p>

<p><i>Update:&nbsp; See my <a
href="http://software.ericsink.com/entries/ethics.html">follow-up</a>.</i></p>

<p></p>
]]>
</description>
</item>

<item>
<title>Upcoming Gigs</title>
<guid>http://software.ericsink.com/entries/guadec_bos.html</guid>
<link>http://software.ericsink.com/entries/guadec_bos.html</link>
<pubDate>Mon, 12 May 2008 08:19:41 CST</pubDate>
<description>
<![CDATA[
<p>In July I will be giving a keynote address at <a
href="http://guadec.expectnation.com/public/content/keynotes">GUADEC</a>, the
annual GNOME conference, being held this year in Istanbul.</p>

<p>In September I will be speaking again at the <a
href="http://businessofsoftware.org/">Business of Software</a> conference,
being held this year in Boston.</p>

<p>And finally, for something completely different, don't miss
the Jam Session at Tech-Ed on June 3<sup>rd</sup>.&nbsp; Several of us minions from
SourceGear are planning to take the stage and give our rendition of <a
href="http://en.wikipedia.org/wiki/Pinball_Wizard">Pinball Wizard</a>.&nbsp; It'll
be me on acoustic guitar, our development manager <a
href="http://vaultblog.sourcegear.com/">Jeremy Sheeley</a> on bass, and our product
manager Paul Roub playing the <a
href="http://blog.roub.net/2008/02/the_evil_mastermind_guitars_you_heard_me.html">Evil
Mastermind Schecter PT</a> that will be given away later that week.</p>

<p>And BTW, none of us will be dressed as <a
href="http://www.sourcegear.com/TEM/index.html">The Evil Mastermind</a>.&nbsp; This
should be obvious, as The Evil Mastermind would never do something actually
cool like a song by The Who.&nbsp; Rather, he would do something like a Kelly
Clarkson song and mistakenly believe it was cool.&nbsp; <b>:-)</b></p>

<p></p>
]]>
</description>
</item>

<item>
<title>Three Personal Highlights</title>
<guid>http://software.ericsink.com/entries/Gloat_20080509.html</guid>
<link>http://software.ericsink.com/entries/Gloat_20080509.html</link>
<pubDate>Fri, 09 May 2008 15:26:20 CST</pubDate>
<description>
<![CDATA[
<p>It's Friday afternoon, so I hope my readers will indulge me
a bit of gloating over three recent moments of personal triumph:</p>

<ol style='margin-top:0in' start=1 type=1>
 <li >Playing the 12<sup>th</sup> hole at my <a
     href="http://uofigolf.com/index.php?option=com_content&amp;task=view&amp;id=21&amp;Itemid=38">regular
     course</a>, I made a shot from about 80 yards out.&nbsp; Unfortunately, it was
     for par.&nbsp; <b>:-(</b><br>
     <br>
 </li>
 <li >This past Saturday I walked the <a
     href="http://www.500festival.com/marathon/2008MiniMarathonResults.asp">Indianapolis
     half marathon</a> in a personal record time of 14:57 per mile.<br>
     <br>
 </li>
 <li >After setting up my new subwoofer, I put in the <a
     href="http://www.imdb.com/title/tt0167260/">Return of the King</a> DVD and
     zoomed ahead to the Minas Tirith battle scenes.&nbsp; Seconds later, my younger
     daughter ran upstairs and cried, "Daddy, your movie is shaking the whole
     house!"</li>
</ol>

<p>All three of these were moments of great personal
satisfaction.&nbsp; The third one was the only one to result in maniacal laughter.</p>

<p></p>
]]>
</description>
</item>

<item>
<title>Windows XP and the importance of listening to customers</title>
<guid>http://software.ericsink.com/entries/Save_Windows_XP.html</guid>
<link>http://software.ericsink.com/entries/Save_Windows_XP.html</link>
<pubDate>Mon, 28 Apr 2008 10:22:38 CST</pubDate>
<description>
<![CDATA[
<p>On June 30, Microsoft will discontinue Windows XP in an
effort to force all PC users onto Windows Vista.&nbsp; As this date gets closer and
closer, they have stubbornly insisted that they will not change their plans.</p>

<p>Last week, Microsoft CEO Steve Ballmer <a
href="http://www.news.com/8301-10784_3-9927721-7.html?tag=nefd.only">blinked</a>,
but in a rather confusing way:</p>

<ul style='margin-top:0in' type=disc>
 <li >The sensible part:&nbsp; Ballmer claimed that they might
     reconsider their decision if that's what customers wanted.<br>
     <br>
 </li>
 <li >The confusing part:&nbsp; Ballmer appeared to be completely
     ignorant of the multitudes of people publicly begging for XP to get a stay
     of execution.</li>
</ul>

<p>Just want kind of customer feedback would Ballmer be able to
hear?</p>

<p>It's really not that hard to find overwhelming evidence of
large numbers of people who want to continue using XP.&nbsp; A simple Google search
for the string "<a href="http://www.google.com/search?q=%22save+windows+xp%22">save
windows XP</a>" results in over 200 thousand hits.</p>

<p>Oh yeah, I forgot -- Steve probably doesn't use Google. &nbsp;Maybe
the problem is that he just can't find any XP fans on the Internets?&nbsp; <b>:-)</b></p>

<p>Or maybe Ballmer is following the now fashionable trend of
counting an Internet person as only 3/5 of a real person?</p>

<ul style='margin-top:0in' type=disc>
 <li >Sure, Ron Paul has lots of fanatical supporters, but they're
     mostly just people on the Internet, and they don't really count.<br>
     <br>
 </li>
 <li >Sure, Barack Obama has raised truckloads of money, but he
     mostly gets it from people on the Internet, and they don't really count.<br>
     <br>
 </li>
 <li >Sure, over 170 thousand people have signed the <a
     href="http://weblog.infoworld.com/save-xp/">Save Windows XP petition</a>,
     but those people are on the Internet, so they don't really count.</li>
</ul>

<p>Or maybe this is simply the most arrogant corporate decision
in history?&nbsp; Maybe Steve can hear all of these desperate cries but he simply
doesn't care.</p>

<p>Power corrupts.&nbsp; Every monstrously large organization
eventually turns into, well, a monster.&nbsp; The next step is for all these
organizations to start borrowing each other's tactics.&nbsp; Hey Steve, why not
start waterboarding everybody who won't switch to Windows Vista?&nbsp; Apparently
it's legal.&nbsp; <b>:-)</b></p>

<p>The whole situation is most annoying to those of us who are
running small software companies.&nbsp; Unlike Microsoft, we actually have to listen
to our customers.&nbsp; When they tell us to jump, we ask how high.</p>

<p>Microsoft is telling millions of its customers to jump.&nbsp; Out
of principle, I am doing my best not to comply:</p>

<ul style='margin-top:0in' type=disc>
 <li >I'm typing this blog entry on Windows XP.<br>
     <br>
 </li>
 <li >That instance of Windows XP is actually a VMware image
     running on my Mac.&nbsp; I started using a MacBook Pro with Leopard a couple
     months ago.&nbsp; And I love it.<br>
     <br>
 </li>
 <li >I just donated fifty bucks to the <a
     href="http://www.reactos.org/">ReactOS</a> project.&nbsp; I'm figuring that in
     the long run, I've got a better chance of getting Windows XP from ReactOS
     than from Redmond.</li>
</ul>

<p>Some of my readers are horrified at this blog entry.&nbsp; "But
Eric, aren't you a .NET developer?"</p>

<p>Yes, I am.&nbsp; My overall posture toward Microsoft is still
friendly.&nbsp; I still use Windows every day.&nbsp; I still love Visual Studio.&nbsp; C# is
still my favorite language ever.&nbsp; Heck, I'm even a big WPF fan, so I'd actually
prefer to see the world switch to Vista.&nbsp; I've used Vista, and while I didn't
find it to be a compelling "must-have" upgrade, I rather liked it.</p>

<p>But none of this means that I'm going to give my blanket
agreement to every decision Microsoft makes.&nbsp; In this case, I object to
Microsoft's plan, not because Vista is so awful, but rather, because ignoring
customers is so wrong.</p>

<p></p>
]]>
</description>
</item>

<item>
<title>What is ALM?  Traceability</title>
<guid>http://software.ericsink.com/alm/traceability.html</guid>
<link>http://software.ericsink.com/alm/traceability.html</link>
<pubDate>Wed, 16 Apr 2008 14:13:25 CST</pubDate>
<description>
<![CDATA[
<h3>What is ALM?</h3>

<p>If you are a software developer, there are a whole bunch of
companies (including mine) who want to sell you stuff.</p>

<p>If you read any magazines, go to any conferences, or visit
any websites, there is a good chance you've seen their (our) marketing efforts.</p>

<p>More and more often, the term you see in those marketing
materials is "ALM".&nbsp; Ever wondered what that term means?</p>

<p>It means "Application Lifecycle Management".</p>

<p>Don't you feel better now that I've cleared all that up?&nbsp; <b>:-)</b></p>

<h3>Digression:&nbsp; Dead-End Acronyms</h3>

<p>So ALM is what I call a dead-end acronym.&nbsp; Like all
acronyms, nobody knows what it means until you see its expanded form.&nbsp; But with
<i>dead-end</i> acronyms, people can stare all they want at the expanded form
and they <i>still</i> don't know what it means.&nbsp; There's nowhere to go.&nbsp; It's a
dead-end.</p>

<p>We software developers have a tendency to create dead-end
acronyms.&nbsp; For example, SOA means "Service Oriented Architecture", but I still
don't know what that means.</p>

<p>My personal theory is that dead-end acronyms get created
when somebody forces the issue.&nbsp; They create an acronym which didn't want to be
created.&nbsp; Indigo didn't really want to be WCF -- it just wanted to stay Indigo.</p>

<p>Dead-end acronyms.&nbsp; Our special gift to the world.</p>

<h3>No, really.&nbsp; What is ALM?</h3>

<p>Back to the point.&nbsp; What is ALM?&nbsp; Let's look a bit deeper.&nbsp;
The expanded form actually does hold a few clues:</p>

<ul style='margin-top:0in' type=disc>
 <li >From the word "Application" (and from the overall context)
     we know that this is about "Software Development".&nbsp; </li>
 <li >The word "Management" is fairly intuitive all by itself.</li>
 <li >The word "Lifecycle" tells us that we're talking about the
     whole software development process.&nbsp; All of it.</li>
</ul>

<p>So, we can translate "ALM" to "Managing The Whole Software
Development Process".</p>

<p>I suppose it's obvious that "MTWSDP" doesn't exactly roll
off the tongue like "ALM" does.</p>

<p>Worse, I'd have to say we still haven't made much progress
here.&nbsp; Isn't there some way out of this dead-end?&nbsp; </p>

<p>What is ALM?</p>

<h3>Two roads diverged in a wood, and I...</h3>

<p>Starting from this point, attempts to define ALM usually go
in one of two distinct directions.</p>

<ol style='margin-top:0in' start=1 type=1>
 <li >The Trees (focus on the details)</li>
 <ol style='margin-top:0in' start=1 type=a>
  <li >List all of the activities in the whole software
      development process (idea, market research, requirements, design,
      architecture, implementation, testing, release, wild drunk release party,
      user support, postmortem, assignment of blame, sackings, regret over
      impulsive terminations, rehiring as contractors at twice the cost,
      lather, rinse, repeat).</li>
  <li >For each activity, list one or more tools that support
      that activity (requirements management, modeling, compilers, automated
      testing, issue tracking, project management, dart board, help desk, time
      tracking, etc).</li>
 </ol>
 <li >The Forest (look at the big-picture)</li>
 <ol style='margin-top:0in' start=1 type=a>
  <li >Talk about the benefits that software managers can get
      from looking at the whole lifecycle.</li>
  <li >Talk about the integration between the various tools in
      the whole software development process.</li>
 </ol>
</ol>

<p>I believe the essence of ALM lies in the big picture view,
in the real benefits that software managers get from using a truly integrated
suite of tools that give them the ability to deal with the whole software
development lifecycle.&nbsp; My definition of ALM proceeds from The Forest
perspective, the big picture view.</p>

<h3>Getting more specific</h3>

<p>So far this piece is over 500 words long and it still
doesn't say anything.&nbsp; It's time to get a bit more specific.</p>

<p>Before I go any further, let me say that this particular
article does not attempt to offer a complete definition of ALM.&nbsp; For now I am
going to focus on just one issue:&nbsp; Traceability.</p>

<p>Let's look at an example.</p>

<h3>The Mystery of the PersonCompanyAssoc Table, Part 1</h3>

<p><i>Joe is a technical support representative for CrummySoft,
an ISV that sells a CRM solution.&nbsp; He is working with a customer who says they
just upgraded from version 6.0 to 7.0 and suddenly everything became really slow.&nbsp;
In an effort to track down the problem, he goes to visit Sally, a program
manager.</i></p>

<p>Joe:&nbsp; One of my customers says version 7.0 is a lot slower
than 6.0.</p>

<p>Sally:&nbsp; How much is "a lot"?</p>

<p>Joe:&nbsp; Loading their dashboard page went from 1 second to
around 30 seconds.</p>

<p>Sally:&nbsp; That's a lot.&nbsp; How many other customers are
complaining about this?</p>

<p>Joe:&nbsp; I've heard of a few.&nbsp; Maybe a dozen.&nbsp; So far.</p>

<p><i>The detective work begins.&nbsp; Sally opens her IDE and digs
into the problem.&nbsp; Looking into the DB schema, she sees something odd.</i></p>

<p>Sally:&nbsp; Here's something odd.</p>

<p>Joe:&nbsp; What?</p>

<p>Sally:&nbsp; Somebody changed the SQL table schema during the 7.0
dev cycle.&nbsp; In 6.0 and prior, each person could be associated with exactly one
company.&nbsp; In fact, the People table had a column which was a foreign key into
the Companies table.&nbsp; Sometime during 7.0, this changed.&nbsp; Now we have a new
table called PersonCompanyAssoc, which allows a Person to be connected with
more than one company.</p>

<p>Joe:&nbsp; OK.&nbsp; So what's the problem?</p>

<p>Sally:&nbsp; The problem is that there were lots of places in the
code which assumed a Person would only be associated with one Company.&nbsp;
Somebody went through and tried to fix them all with a bunch of changes to
indexes, triggers and constraints.&nbsp; Not all of those fixes were done in a very
scalable way.&nbsp; Most customers will be unaffected, but I could imagine some
situations where we end up with a major slowdown.</p>

<p>Joe:&nbsp; What kinds of situations?</p>

<p>Sally:&nbsp; Well, for example, I'm guessing things would get bad
if the Locations table has lots of different entries for the same Company.</p>

<p>Joe:&nbsp; Bingo.&nbsp; My customer deals mostly with virtual
companies.&nbsp; Their database has one company which is scattered across thirty
different states and five countries in Europe.</p>

<p>Sally:&nbsp; That would do it.</p>

<p>Joe:&nbsp; So doesn't this change seem kind of stupid anyway?&nbsp;
Why would somebody need the ability to associate one person with multiple
organizations?</p>

<p>Sally:&nbsp; I don't know, but there's probably a reason.&nbsp; Let's
look for more clues.</p>

<p><i>Sally brings up the version control history log to find
out who made these code changes and why.</i></p>

<p>Sally:&nbsp; Apparently the PersonCompanyAssoc table was added by
a developer named Tony.&nbsp; The checkin comment explains what he was doing, but
there's no rationale for why and no mention of the spec for this feature.</p>

<p>Joe:&nbsp; So hey, as long as we're here in the code, can you
just put it back the way it was?&nbsp; If this change doesn't make any sense and
it's causing performance problems, why not just undo it?</p>

<p>Sally:&nbsp; It would probably be better to understand the whole
story before we just change it back.&nbsp; Let's go find Tony and ask for more info.</p>

<h3>Isn't version control enough?</h3>

<p>Version control does give you some traceability, and that's
a good thing.&nbsp; But in many cases, it is not enough.</p>

<p>Version control will tell you about code changes.&nbsp; It can
answer questions like Who, What and When.&nbsp; But the hardest question in
traceability is Why, and version control often lacks enough information to give
a good answer.&nbsp; Even if the developer is supposed to give a checkin comment
which explains why a change was made, the detective work tends to get stuck
because the clues dry up.</p>

<ul style='margin-top:0in' type=disc>
 <li >Why is this piece of code there?</li>
 <ul style='margin-top:0in' type=circle>
  <li >Oh, it was to fix a bug.</li>
 </ul>
 <li >Which bug?</li>
 <ul style='margin-top:0in' type=circle>
  <li >Oh, that one.</li>
 </ul>
 <li >But why was this a bug?</li>
 <ul style='margin-top:0in' type=circle>
  <li >Oh, the spec says it should work this way.</li>
 </ul>
 <li >But why?</li>
 <ul style='margin-top:0in' type=circle>
  <li >Oh, here's the rationale for that requirement.&nbsp; It came
      from marketing research.</li>
 </ul>
</ul>

<p>Very few developers write checkin comments which are good
enough to solve the really tough mysteries in software development, and they
shouldn't have to.&nbsp; We don't need better checkin comments.&nbsp; We need all the
artifacts from the whole software development process to be linked together.</p>

<h3>The Mystery, Part 2</h3>

<p><i>Sally and Joe walk across the CrummySoft campus to
building 71 where they find themselves in a seemingly endless room filled with
cubicles. &nbsp;The manager sitting next to the entrance at a mahogany desk with a
nameplate identifying him as Biff.</i></p>

<p>Biff:&nbsp; Can I help you?</p>

<p>Sally:&nbsp; We're looking for a developer named Tony.&nbsp; Is he
here?</p>

<p>Biff:&nbsp; Why do you want to see him?</p>

<p>Sally:&nbsp; He made a code change and we need to ask him for
more information about it.</p>

<p>Biff:&nbsp; OK, let's see.&nbsp; Tony.&nbsp; Ah yes, he's in cubicle
19-346-B.</p>

<p>Joe:&nbsp; 19-346-B.&nbsp; Where's that?</p>

<p>Biff:&nbsp; I gather that you've never been here before?&nbsp; Very
well.&nbsp; Cubicle 19-346-B.&nbsp; Go to aisle 19.&nbsp; Walk down to the 346<sup>th</sup>
cubicle.&nbsp; Tony should be in the one on your left.</p>

<p><i>Joe and Sally eventually reach Tony's cubicle where they
find him playing World of Warcraft.</i></p>

<p>Tony:&nbsp; You need somethin'?</p>

<p>Joe:&nbsp; Why did you add a PersonCompanyAssoc table during the
7.0 dev cycle?</p>

<p>Tony:&nbsp; How should I know?&nbsp; That was like nine months ago.&nbsp;
I've probably made at least two other code changes since then.&nbsp; I can't be
expected to remember details like that.</p>

<p>Sally:&nbsp; Do you know anyone who might know?</p>

<p>Tony:&nbsp; Ask Phil in QA.&nbsp; Maybe there's some info in that bug
tracking database I've seen him using.</p>

<p>Joe:&nbsp; So where do we find Phil?</p>

<p>Tony:&nbsp; Geez, have you guys never been here before or what?&nbsp;
Phil is in cubicle 61-842-A.&nbsp; That means you go down to aisle 61, turn left,
and walk down ---</p>

<p>Joe: &nbsp;Yeah, yeah, we got it.&nbsp; Thanks.</p>

<p><i>Sally and Joe meander their way across the cubicle field to
find Phil.&nbsp; Along the way, Joe pauses at the intersection of an aisle and a
row.&nbsp; The walls in all four directions are too far away to see.&nbsp; Continuing on,
they eventually reach their destination.</i></p>

<p>Sally:&nbsp; Phil, any idea why Tony added a PersonCompanyAssoc
table about six months ago?</p>

<p>Phil:&nbsp; Yeah, I think we did that to fix a bug.&nbsp; </p>

<p>Joe:&nbsp; Which bug?</p>

<p>Phil:&nbsp; How should I know?</p>

<p>Sally:&nbsp; Well could you look it up?</p>

<p>Phil:&nbsp; Fine, let's see.&nbsp; Oh yeah, it's bug 8675309.</p>

<p>Sally:&nbsp; Does that bug have any information about why the
change was made?</p>

<p>Phil:&nbsp; Not really, but there's a comment here by somebody on
the sales team.&nbsp; Did you talk to them yet?</p>

<p>Joe:&nbsp; Aha!&nbsp; Let's go ask the sales team!</p>

<h3>Team Size</h3>

<p>ALM tools are often associated with very large projects and
enterprise development.&nbsp; This is just intuitive.&nbsp; The more people involved, the
more complexity to be managed.</p>

<p>Imagine trying to solve a mystery and you get stuck.&nbsp; You
need more clues, so you start canvassing the neighborhood looking for people
who might have seen something suspicious.&nbsp; Now suppose that "the neighborhood"
is a software development division with 5,000 people in it.&nbsp; Those interviews
are going to take a while.</p>

<p>But chaos usually takes over long before a team gets that
large.&nbsp; Traceability may not be as important for a team of 50 as it is for a
team of 5,000, but it can still be pretty important.&nbsp; People forget why things
happen, and that forgetfulness is not a function of the size of the team they
are on.</p>

<p>You may be thinking, "My team is small.&nbsp; We shouldn't have
these kinds of problems, but this mystery still sounds familiar.&nbsp; Why does this
kind of detective work happen when we've only got 10 people?"</p>

<p>Are you sure you are counting everyone?&nbsp; :-)</p>

<p>How about your customers?&nbsp; They are part of your story.&nbsp;
When a customer asks for something, very often it triggers a sequence of
steps.&nbsp; And somebody will probably want to trace that sequence back to that
customer.</p>

<p>SourceGear is a pretty small company.&nbsp; We've got less than
50 people on our staff.</p>

<p>But our flagship product, Vault, is used by about 50 <i>thousand</i>
people.&nbsp; Sometimes we have a mystery to solve.&nbsp; And very often the detective
work leads us to one of those customers.&nbsp; Our customers add to the complexity
of our software lifecycle, and increase our need for traceability.</p>

<h3>The Mystery, Part 3</h3>

<p><i>When the plane arrives in Grand Cayman, Sally and Joe are
greeted by a dozen beautiful people with perfect tans who escort them to the main
company sales office, where, as always, a party is in progress.</i></p>

<p>Joe:&nbsp; Who should we talk to?</p>

<p>Sally:&nbsp; Let's find Bill.&nbsp; He came to the company
headquarters once for a meeting.&nbsp; I think he'll remember us.</p>

<p><i>Weaving through the crowd, they eventually find Bill,
martini in one hand, cell phone in the other.</i></p>

<p>Bill:&nbsp; Do I know you?&nbsp; Oh, wait.&nbsp; Don't you work at the HQ
back in Minneapolis?&nbsp; I think we met last summer when I came up for that golf
outing, er, I mean, sales training.&nbsp; So what brings you all the way here to
visit the sales team?</p>

<p>Joe:&nbsp; We're trying to solve a mystery.&nbsp; Between 6.0 and 7.0,
somebody changed the database schema to handle multiple company associations
per person.&nbsp; Any idea why?</p>

<p>Bill:&nbsp; Can I offer you a martini?</p>

<p>Sally:&nbsp; Seriously, Bill, this code change is causing a lot
of problems.&nbsp; We want to just rip it out, but we figure we should understand
the background first.</p>

<p>Bill:&nbsp; Yeah, yeah, whatever.&nbsp; That wasn't my deal.&nbsp; Ask
Marty.</p>

<p><i>After a bit more searching and stopping briefly to slide
under the limbo bar, Joe and Sally find Marty in the corner of the room
speaking intensely into his cell phone.</i></p>

<p>Marty:&nbsp; Don't worry, you can count on me this time!&nbsp; I'll
have the feature in version 8.0, I promise!</p>

<p>Sally:&nbsp; Hey Marty.&nbsp; We're trying to track down some
information.&nbsp; Somebody changed the DB schema during the 7.0 dev cycle to allow
multiple companies to be associated with each person.&nbsp; Were you the one who
requested that feature?</p>

<p>Marty:&nbsp; Yeah, that's me.&nbsp; I needed that tweak to close a
deal.&nbsp; Is there a problem?</p>

<p>Joe:&nbsp; Yes!&nbsp; That was a lot more than a "tweak".&nbsp; It may seem
simple, but it involved hundreds of code changes, and all kinds of things got
messed up!</p>

<p>Marty:&nbsp; Can I offer you a martini?</p>

<p>Sally:&nbsp; Seriously, can you tell us why this change was necessary?&nbsp;
Why would anybody need to keep track of multiple companies per individual?</p>

<p>Marty:&nbsp; One of my accounts is using our CRM product in
selling to a network of consultants.&nbsp; Those consultants have loose company
affiliations.&nbsp; One day they might be representing company XYZ, and the next day
they're working for company ABC.&nbsp; The assumption of "one company per
individual" just wasn't flexible enough.</p>

<p>Sally:&nbsp; Was it a good deal?&nbsp; I mean, was this worth the
trouble?</p>

<p>Marty:&nbsp; I think so.&nbsp; The deal was quite lucrative, and it
opened the door to half a dozen more like it, three of which I have already
signed.&nbsp; Look, I'm sorry somebody screwed up this code change, but the business
case behind it was solid.</p>

<p>Sally:&nbsp; Alright, fine.&nbsp; Thanks for the info.</p>

<h3>The Whole Team</h3>

<p>The full story of every significant software development
project includes many different people.&nbsp; Most of them are not writing code.&nbsp;
Tracing an issue backward can mean more than finding the bug report that
motivated a code change.&nbsp; We may need to go back further, back to the spec.</p>

<p>We might need to go back even further, back to the market
research or the sales engagement or the customer support ticket.</p>

<p>A truly comprehensive approach to traceability would
archive, index and link <i>everything</i>:</p>

<ul style='margin-top:0in' type=disc>
 <li >Requirements</li>
 <li >Version control</li>
 <li >Issue tracking</li>
 <li >Marketing research</li>
 <li >Wiki</li>
 <li >Email, discussions</li>
 <li >Tests</li>
 <li >Help desk tickets</li>
 <li >etc</li>
</ul>

<p>The challenge of an ALM tool is to support traceability
across all stages of the software lifecycle.</p>

<h3>The Mystery, Part 4</h3>

<p><i>Joe and Sally head back to the airport to catch a flight
back to the Twin Cities.</i></p>

<p>Sally:&nbsp; So I guess this code change needs to stay.&nbsp; But now
we've got another mystery.&nbsp; This code change caused a bunch of problems.&nbsp; Why
weren't those problems found in testing?</p>

<p>Joe:&nbsp; Let's go back to that QA guy and ask him.</p>

<p><i>Returning to the main company headquarters, they find
their way back to cubicle 61-842-A.</i></p>

<p>Phil:&nbsp; Whazzup?</p>

<p>Sally:&nbsp; We talked to the sales team and got some rationale
for that PersonCompanyAssoc table change.&nbsp; Now we're trying to figure out why
the resulting problems weren't found during testing.</p>

<p>Phil:&nbsp; Hey, don't look at me.&nbsp; I just do what I'm told.</p>

<p>Joe:&nbsp; Whatever.&nbsp; So the product supports multiple locations
per company, right?</p>

<p>Phil:&nbsp; Yeah, I guess so.</p>

<p>Joe:&nbsp; Do you guys have any tests which verify behavior for
that case?</p>

<p>Phil:&nbsp; I don't know.</p>

<p>Sally:&nbsp; You don't know?&nbsp; Why not?</p>

<p>Phil:&nbsp; I just don't.&nbsp; The tests aren't really organized like
that.</p>

<p>Joe:&nbsp; Well how are they organized?</p>

<p>Phil:&nbsp; By number.</p>

<p>Sally:&nbsp; And what do the numbers mean?</p>

<p>Phil:&nbsp; Well, nothing.</p>

<p>Sally:&nbsp; So is there any way to find which tests are designed
to verify which features?</p>

<p>Phil:&nbsp; Uh, well, no.&nbsp; You could always open an individual
test and read it to find out what it does.</p>

<p>Sally:&nbsp; Great.&nbsp; So you've got a bunch of tests and no way of
linking them to anything?</p>

<p>Phil:&nbsp; Exactly!</p>

<p>Sally:&nbsp; OK, I think we're done here.</p>

<h3>Forward Traceability</h3>

<p>Traceability can do more than just help you figure out
forgotten details of the past.&nbsp; Sometimes we want to trace something "forward"
through the software lifecycle, to see where it goes.</p>

<p>In this case, what we want is the following artifacts to be
linked together:</p>

<ol style='margin-top:0in' start=1 type=1>
 <li >Requirement:&nbsp; The system must support multiple locations
     per company.</li>
 <li >Test (validity):&nbsp; Verify that the system can support
     multiple locations per company.</li>
 <li >Test (performance):&nbsp; Verify that in a situation with
     multiple locations per company, the dashboard load time remains
     approximately constant.</li>
</ol>

<p>This kind of traceability is most helpful in finding things
that are simply missing.&nbsp; If the performance test above does not exist, our ALM
tool should be able to help us notice that.&nbsp; If a Requirement is dangling, with
no links to anything, it was probably never implemented, and our ALM tool
should be fussing about that.</p>

<h3>Traceability:&nbsp; Connecting Everything Together</h3>

<p>The ability to connect everything together is called
traceability.&nbsp; It allows us to look at the entire software development process,
even though it involves</p>

<ul style='margin-top:0in' type=disc>
 <li >lots of different people </li>
 <li >doing lots of different things </li>
 <li >at lots of different times </li>
 <li >in lots of different locations </li>
 <li >for lots of different reasons.</li>
</ul>

<p>In a good ALM system, every item is linked to all of the
other items related to it.&nbsp; Code changes are linked to bug reports.&nbsp; Bug
reports are linked to help desk items.&nbsp; Tests are linked to requirements.&nbsp; When
it comes time to do detective work, just follow the links.</p>

<p>You can't get good traceability merely by having one tool
for each lifecycle stage.&nbsp; You can assemble all of your favorite tools, but if
those tools don't support outstanding integration with each other, you won't
have traceability, so the result will not be ALM.</p>

<p>So is that all there is to ALM?&nbsp; Just traceability?&nbsp; </p>

<p>No, ALM is more than that, but traceability is a critical
ingredient.&nbsp; To have ALM, you've gotta have traceability.</p>

<h3>Why to use a good ALM system</h3>

<p>If CrummySoft had deployed an efficient ALM system with
complete information, Sally and Joe could have solved this mystery in minutes,
without the need to run all over the company and ask people questions.</p>

<h3>Why <i>not</i> to use a good ALM system</h3>

<p>If CrummySoft had deployed an efficient ALM system with
complete information, Sally and Joe would not have gotten a free trip to Grand Cayman.&nbsp; <b>:-)</b></p>

<p></p>
]]>
</description>
</item>

<item>
<title>Life Calculus</title>
<guid>http://software.ericsink.com/entries/Life_Calculus.html</guid>
<link>http://software.ericsink.com/entries/Life_Calculus.html</link>
<pubDate>Sat, 15 Mar 2008 10:52:41 CST</pubDate>
<description>
<![CDATA[
<p><img width=160 height=120 src="http://software.ericsink.com/entries/1739_image001.jpg"
align=right hspace=12>Yesterday my coworkers redecorated my office.&nbsp; Pictures
in this blog entry are photos of their work.&nbsp; Strangely enough, I found myself
quite appreciative of their act of vandalism.&nbsp; <b>:-)</b></p>

<p>Today is my 40<sup>th</sup> birthday.&nbsp; Like most other days,
I started by walking the dog and making a To-Do list.&nbsp; However, today's list
has a special item:</p>

<ul style='margin-top:0in' type=disc>
 <li >Decide whether to have a mid-life crisis or not.</li>
</ul>

<p><b>:-)</b></p>

<p>I'll confess I am not entirely thrilled about being 40.&nbsp; It
doesn't seem that long ago that 40 seemed far away.&nbsp; Now that it's here, I
realize that it's not what I expected.&nbsp; I thought my life at 40 would be
different.</p>

<p><img width=120 height=160 src="http://software.ericsink.com/entries/1739_image002.jpg"
align=left hspace=12>Many who know me would assert that I have nothing to
complain about.&nbsp; And they would be correct.&nbsp; My life has been filled with
blessings of all kinds, for which I am truly thankful.&nbsp; I am a published
author.&nbsp; Most would consider me financially successful.&nbsp; I am in a career where
I enjoy my work.</p>

<p>But still...</p>

<p>As the old saying goes, nobody lies on their deathbed
wishing they had spent more time at the office.</p>

<p>Like most everybody else, when I was 30 I looked ahead ten
years and formed a picture in my mind.&nbsp; My life today doesn't match that
picture very well.&nbsp; Examples:</p>

<ul style='margin-top:0in' type=disc>
 <li >I thought by now I would be more solid in the quality of
     my relationships with my loved ones and in the practice of my faith.<br>
     <br>
 </li>
 <li >I thought by now I would be a better guitar player.<br>
     <br>
 </li>
 <li >There's a messy pile in my study that has been there for
     ten years.&nbsp; (Yes, we moved six years ago.&nbsp; The heap moved too.)&nbsp; I thought
     it would be cleaned up by now.<br>
     <br>
 </li>
 <li >I always assumed that by 40 I would have learned to
     exercise regularly and stop eating junk food.</li>
</ul>

<p><img width=160 height=120 src="http://software.ericsink.com/entries/1739_image003.jpg"
align=right hspace=12>I go could on.&nbsp; And on.&nbsp; But you get the idea.</p>

<p>I am tempted to think about my regrets, the places where I
took a wrong turn, the places where I would have made a smarter choice if I
knew then what I know now.</p>

<p>But this whole line of thinking doesn't seem at all
conducive to good mental health, so today I will choose to focus on two things
which seem more constructive:</p>

<h3>1.&nbsp; Tapestry</h3>

<p>One of my favorite Star Trek episodes is called <a
href="http://en.wikipedia.org/wiki/Tapestry_(Star_Trek:_The_Next_Generation)">Tapestry</a>.&nbsp;
It is the story of someone given a chance to re-live a pivotal moment in his
youth so that he can avoid making the unwise choice he made the first time.&nbsp;
But it turns out that his reckless moment was a critical ingredient in his
later successes.</p>

<p>Today I remind myself that there are no do-overs, and I'm
not sure I would want one anyway.&nbsp; For every mistake I have made, there were negative
consequences and positive lessons.&nbsp; I can't expect to avoid the former and keep
the latter. &nbsp;They come together as an inseparable package.</p>

<h3>2.&nbsp; Life Calculus.</h3>

<p>Back in 2003 I wrote an article called <a
href="http://software.ericsink.com/Career_Calculus.html">Career Calculus</a>.&nbsp; In a
nutshell, it says that at any given moment in your career, what you know is far
less important than whether you are learning.</p>

<p>Today I remind myself that the same principle applies in
life.&nbsp; I am confident in my first derivative.&nbsp; Whatever I am today, I think I
will be a better person tomorrow.</p>

<p>So if I'm still blogging when I'm 50, I expect I will be
able to report progress on some of the items mentioned above.</p>

<p>And just to be clear, if that heap of junk on the floor of
my study is still there, it will be larger than it is now, and I plan to report
that as progress.&nbsp; <b>:-)</b></p>

<p align=center style='text-align:center'><b><img border=0
width=160 height=120 src="http://software.ericsink.com/entries/1739_image004.jpg"></b></p>

<p></p>
]]>
</description>
</item>


</channel>
</rss>