World Library  
Flag as Inappropriate
Email this Article

Joel Spolsky

Joel Spolsky
Joel Spolsky at the Stack Exchange London office, June 2014.
Born 1965 (age 50–51)
Albuquerque, New Mexico
Nationality American, New Zealand, Dual citizenship[1]
Alma mater Yale University
Occupation Software developer
CEO, Fog Creek Software
CEO, Stack Exchange Network
Religion Jewish
Website .comjoelonsoftware

Avram Joel Spolsky (born 1965) is a software engineer and writer. He is the author of Joel on Software, a blog on software development, and the creator of the product management software Trello. He was a Program Manager on the Microsoft Excel team between 1991 and 1994. He later founded Fog Creek Software in 2000 and launched the Joel on Software blog. In 2008, he launched the Stack Overflow programmer Q&A site in collaboration with Jeff Atwood. Using the Stack Exchange software product which powers Stack Overflow, the Stack Exchange Network now hosts over 100 Q&A sites.


  • Biography 1
    • Personal life 1.1
  • Schlemiel the Painter's algorithm 2
    • Analogy 2.1
    • Example 2.2
  • References 3
  • Publications 4
  • External links 5


Spolsky grew up in Albuquerque, New Mexico, and lived there until he was 15.[2] He then moved with his family to Jerusalem, Israel, where he attended high school and completed his military service as a paratrooper.[2] He was one of the founders of the kibbutz Hanaton in Lower Galilee.[3] In 1987, he returned to the United States to attend college. He studied at the University of Pennsylvania for a year before transferring to Yale University, where he was a member of Pierson College and graduated in 1991 with a BS summa cum laude in Computer Science.[2]

Spolsky started working at Microsoft in 1991[4] as a Program Manager on the Microsoft Excel team, where he designed Excel Basic and drove Microsoft's Visual Basic for Applications strategy.[5] He moved to New York City in 1995 where he worked for Viacom and Juno Online Services.[2] In 2000, he founded Fog Creek Software and created the Joel on Software blog.[4] Joel on Software was "one of the first blogs set up by a business owner".[6]

In 2005, Spolsky co-produced and appeared in Aardvark'd: 12 Weeks with Geeks, a documentary documenting Fog Creek's development of Project Aardvark, a remote assistance tool.[7]

Spolsky also co-founded Stack Overflow,[8] a question and answer community website for software developers, with Jeff Atwood. He is now CEO of the resulting Stack Exchange Network.[9]

In 2011, Spolsky launched Trello, an online project management tool inspired by Kanban methodology.[10]

He is the author of five books, including User Interface Design for Programmers and Smart and Gets Things Done. He is also the creator of The Joel Test.

Spolsky coined the term fix it twice for a process improvement method. It implies a quick, immediate solution for fixing an incident and a second, slower fix for preventing the same problem from occurring again by targeting the root cause.[11] His use of the term Shlemiel the painter's algorithm, referring to an algorithm that is not scalable due to performing too many redundant actions, was described by's Scott Rosenberg as an example of good writing "about their insular world in a way that wins the respect of their colleagues and the attention of outsiders."[12]

Personal life

Spolsky is openly gay, and has announced his marriage to his husband Jared on social media and his blog.[13][14][15]

Schlemiel the Painter's algorithm

In software development, a Shlemiel the painter's algorithm (sometimes, Shlemiel the painter algorithm) is a reference to a method that is inefficient because the programmer has overlooked some fundamental issues at the very lowest levels of software design. The term was coined in 2001 by Spolsky. The term is not to be confused with the Painter's algorithm (used in image compositing), as the two are entirely unrelated.


Spolsky used a Yiddish joke to illustrate a certain poor programming practice. In the joke, Schlemiel (also rendered Shlemiel) has a job painting the dotted lines down the middle of a road. Each day, Schlemiel paints less than he painted the day before. When he is asked why, Schlemiel complains that it is because each day he gets farther away from the paint can.[16]

The inefficiency to which Spolsky was drawing an analogy was the poor programming practice of repeated concatenation of C-style null-terminated character arrays (that is, strings) in which the position of the destination string has to be recomputed from the beginning of the string each time because it is not carried over from a previous concatenation.

Spolsky condemned such inefficiencies as typical for programmers who had not been taught basic programming techniques before they began programming using higher level languages: "Generations of graduates are descending on us and creating Schlemiel The Painter algorithms right and left and they don't even realize it, since they fundamentally have no idea that strings are, at a very deep level, difficult."[16]


The programming practice that Spolsky used to make his point was repeated concatenation of null-terminated character arrays ("strings").[16]

The first step in every implementation of the standard C library function for concatenating strings is determining the length of the first string by checking each character in the array, starting from the beginning, to see if it is the terminating null character. Next, the second string is copied to the end of the first, effectively concatenating the two. At the end of the concatenation, the length of the combined string is discarded upon return to the calling code.

In Spolsky's example, the "Schlemiels" occur when multiple strings are concatenated together:

  1. strcat( buffer, "John" );    Here, the string "John" is appended to the buffer
  2. strcat( buffer, "Paul" );    Now the string "Paul" is appended to that
  3. strcat( buffer, "George" );  ... and "George" is appended to that
  4. strcat( buffer, "Ringo" );   ... and "Ringo" is appended to that

After "Paul" has been appended to "John", the length of "JohnPaul" (or, more precisely, the position of the terminating null character) is known within the strcat() starts at the very first character of the array ("J") all over again just to find the terminating null character. Each subsequent call to strcat() has to compute the length again before concatenating another name to the buffer.

Analogous to Schlemiel not carrying the paint-bucket (or the string's length) with him, all the subsequent strcat()s have to "walk" the length of the string again to determine where the second string should be copied. As more data is added to buffer with each call to strcat(), that terminating null character also gets farther away from the beginning, meaning subsequent calls are increasingly slow—just as Schlemiel's path to his bucket keeps getting longer.

The problems illustrated by Spolsky's example are not noticed by a programmer who is using a high-level language and has little or no knowledge of its underlying principles and functions. "Some of the biggest mistakes people make even at the highest architectural levels come from having a weak or broken understanding of a few simple things at the very lowest levels."[16]


  1. ^ Spolsky, Joel;  
  2. ^ a b c d Spolsky, Joel (October 30, 2005). "About Joel Spolsky". Joel on Software. Retrieved August 4, 2013. 
  3. ^ Spolsky, Joel. "Joel Spolsky". Retrieved August 4, 2013. 
  4. ^ a b  
  5. ^ "An Interview with Joel Spolsky". Archived from the original on August 9, 2007. Retrieved August 4, 2013. 
  6. ^ Spolsky, Joel. "How Hard Could it Be".  
  7. ^ "Joel Spolsky".  
  8. ^  
  9. ^ "Management Team".  
  10. ^ Spolsky, Joel (January 6, 2012). "How Trello is different". Retrieved August 4, 2013. 
  11. ^ Spolsky, Joel (February 19, 2007). "Seven steps to remarkable customer service". Retrieved August 4, 2013. 
  12. ^ Rosenberg, Scott (December 9, 2004), The Shlemiel way of software, .
  13. ^ "About Joel Spolsky". Retrieved 27 June 2015. 
  14. ^ Retrieved 27 June 2015. 
  15. ^ Retrieved 27 June 2015. 
  16. ^ a b c d Spolsky, Joel (December 11, 2001), Back to Basics, Joel on Software, .


  • Spolsky, Joel (2001). User Interface Design for Programmers.  
  • Spolsky, Joel (2004). Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity.  
  • Spolsky, Joel (2005). The Best Software Writing I: Selected and Introduced by Joel Spolsky.  
  • Spolsky, Joel (2007). Smart and Gets Things Done: Joel Spolsky's Concise Guide to Finding the Best Technical Talent.  
  • Spolsky, Joel (2008). More Joel on Software: Further Thoughts on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity.  

External links

  • Joel on Software
  • Links to essays in 'Best Software Writing I'

This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.

Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.