<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Basil Vandegriend: Professional Software Development &#187; IT careers</title>
	<atom:link href="http://www.basilv.com/psd/blog/tag/it-careers/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.basilv.com/psd</link>
	<description></description>
	<lastBuildDate>Thu, 17 May 2012 14:31:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Using Rotations to Develop Expertise</title>
		<link>http://www.basilv.com/psd/blog/2009/using-rotations-to-develop-expertise</link>
		<comments>http://www.basilv.com/psd/blog/2009/using-rotations-to-develop-expertise#comments</comments>
		<pubDate>Fri, 17 Apr 2009 08:39:55 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[learning]]></category>
		<category><![CDATA[IT careers]]></category>
		<category><![CDATA[IT industry]]></category>
		<category><![CDATA[personal development]]></category>
		<category><![CDATA[professional]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=358</guid>
		<description><![CDATA[This article continues on from my prior article Improving Computer Science Degrees for Software Developers on the topic of better methods of developing expertise as software developers in the work place. The original inspiration for these articles is the post Master Craftsman Teams by Robert C. Martin in which he proposed a formalized development path [...]]]></description>
			<content:encoded><![CDATA[<p>This article continues on from my prior article <a href="http://www.basilv.com/psd/blog/2009/improving-computer-science-degrees-for-software-developers">Improving Computer Science Degrees for Software Developers</a> on the topic of better methods of developing expertise as software developers in the work place. The original inspiration for these articles is the post <a href="http://blog.objectmentor.com/articles/2009/04/01/master-craftsman-teams">Master Craftsman Teams</a> by Robert C. Martin in which he proposed a formalized development path based on the apprentice – journeyman – master craftsman model used by the trades. The specific inspiration for this article is use of rotations in the field of medicine in training medical students, interns, and residents. Trainees spend a fixed period of time working in a particular specialization (e.g. neurology) or unit (e.g. intensive care), after which they rotate into a new assignment. </p>
<h3>Benefits of Rotations</h3>
<p>The use of rotations provides two key benefits:</p>
<ol>
</li>
<li><em>Rapid learning</em>: People learn most rapidly when placed into new, unfamiliar situations, as opposed to being in the same environment year after year. The initial ramp-up period for new team members often corresponds to the period of increased learning, after which it tapers down. The use of rotations essentially maintains this ramp-up state to realize this enhanced learning on a more ongoing basis.
</li>
<li><em>Breadth of experience</em>: Rotation assignments are specifically selected to provide a broad range of experience in the field. This helps trainees determine what they would like to specialize in, and once specialized helps them work more effectively with other specializations. Breadth of experience helps develop that "big picture" understanding of the field and provides better appreciation for how each specialization contributes to it.
</li>
</ol>
<p>While software development is quite a different field from medicine, I believe that the use of rotations is just as beneficial to developing expertise as developers. One example is spending time maintaining or enhancing a preexisting code base tends to teach the importance of having cleanly design and easily understood code – in other words maintainability. Another more general example is developing that breadth of experience tends to provide a better appreciation of the importance of context in determining what development technologies, practices, and methodologies to apply.</p>
<h3>Required Rotations</h3>
<p>What kinds of rotations would be beneficial for developers? Listed below are the key assignments that I feel every developer should experience:</p>
<ul>
<li><em>Production Support</em>: Keep an operational system running. This develops your ability to diagnose and fix problems. It teaches you about all the bizarre events that can happen in a real system that never seem to happen in testing. I personally found it humbling to watch systems I thought were solid get hammered and fail in ways I never expected. You will learn the value of many non-functional requirements such as reliability, performance, scalability, manageability, and supportability (e.g. good logging).</li>
<li><em>Maintenance</em>: Make enhancements and fixes to an existing code base in active use. You should do this both for a system you originally developed and one you have not. This teaches the importance of good design and readable code – i.e. maintainability.</li>
<li><em>End-User Support</em>: Directly dealing with user inquiries and problems. This is enlightening in numerous ways: it provides you with a better understanding of what users value, how they react, their level of understanding of I.T., and what they like and do not like in the software they are using.</li>
<li><em>New Development</em>: Develop a piece of software going through all the stages of the software development life cycle: inception, requirements, design, coding, testing, release, and maintenance. Going through the entire cycle gives you a deeper understanding of the big picture. More importantly, you will have the opportunity to benefit from feedback in later stages regarding earlier stages: e.g. coding indicates requirements were poorly understood by all, or testing reveals a design defect.</li>
</ul>
<h3>Optional Rotations</h3>
<p>There are many other possible rotations across the full breadth of the field of software development. A large (but not complete) list of these assignments is provided below, organized into categories.</p>
<ul>
<li>Assignments in different types of software development organizations:
<ul>
<li>Product-focused</li>
<li>Service-focused (e.g. consulting)</li>
<li>Internal I.T.</li>
</ul>
</li>
<li>Assignments in different organizational cultures:
<ul>
<li>Bureaucratic</li>
<li>Entrepreneurial (e.g. a start-up)</li>
<li>Lean</li>
</ul>
</li>
<li>Assignments using different development methodologies:
<ul>
<li>Agile (process-light)</li>
<li>RUP (process-heavy)</li>
<li>Waterfall</li>
<li>Chaotic</li>
</ul>
</li>
<li>Assignments working on different types of software systems:
<ul>
<li>Web applications</li>
<li>Enterprise systems (e.g. messaging, batch processing, integration of systems)</li>
<li>Desktop</li>
<li>Mobile</li>
<li>Games</li>
<li>Software development tools (e.g. compilers, IDEs)</li>
<li>Software infrastructure (e.g. operating systems, databases, networking)</li>
<li>Scientific (e.g. simulations)</li>
<li>Mission critical (e.g. medical, aviation)</li>
</ul>
</li>
<li>Assignments involving different software development skills:
<ul>
<li>Web design (html, CSS)</li>
<li>User interface design</li>
<li>Database design</li>
<li>Database administration</li>
<li>Data conversion</li>
<li>Web services</li>
<li>Batch processing</li>
</ul>
</li>
</ul>
<p>Obviously you cannot gain experience in all of the items listed above. The point is to think about where you want to take your career as a software developer and then choose assignments that provide sufficient breadth while avoiding irrelevant assignments.</p>
<h3>Adopting Rotations</h3>
<p>How can rotations for software developers be adopted? As much as I think it makes sense, I do not see the I.T. industry as a whole formally adopting rotations in a fashion similar to medicine. So what about at the level of an individual organization? Even fairly small companies usually have different teams or products for which rotations could be formally set up. I have seen companies doing this for undesirable work such as customer support or production support. Developers are rotated into such roles either for an entire iteration or for a certain percentage of days each month. But the focus of these rotations is typically on getting the undesirable work done rather than the increased learning. </p>
<p>In many companies I have seen a tendency for developers to get stuck into a particular role or team. Supervisors are reluctant to give up a trained, skilled resource to another team, even in a trade. Temporary assignments on another team are also fairly rare for the same reasons plus the common fear by the supervisor that the temporary situation ends up becoming permanent. So a developer who wants a change often needs to initiate it by changing jobs.</p>
<p>Since the industry as a whole as well as individual organizations cannot be relied upon to provide for rotations, I believe it becomes the responsibility of each individual software developer to seek out that breadth of experience. Formal rotations may be beyond our control, but we can explicitly seek out different assignments to provide that breadth of experience and accelerated learning.</p>
<p>I'm interested in hearing what you think. Do you agree with my list of required rotations? Are there any you would add or remove? Do you have examples of where you actually used rotations? Let me know by leaving a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2009/using-rotations-to-develop-expertise/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>100 Interview Questions to Ask Employers</title>
		<link>http://www.basilv.com/psd/blog/2009/100-interview-questions-to-ask-employers</link>
		<comments>http://www.basilv.com/psd/blog/2009/100-interview-questions-to-ask-employers#comments</comments>
		<pubDate>Sat, 07 Feb 2009 21:36:54 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[IT careers]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=293</guid>
		<description><![CDATA[The interview process should ideally be an equal, two-way conversation between the interviewers for an employer and a potential employee. However, speaking as someone who has sat on both sides of the table, it has always seemed to me to be imbalanced towards the interviewers. They control the process and ask far more questions than [...]]]></description>
			<content:encoded><![CDATA[<p>The interview process should ideally be an equal, two-way conversation between the interviewers for an employer and a potential employee. However, speaking as someone who has sat on both sides of the table, it has always seemed to me to be imbalanced towards the interviewers. They control the process and ask far more questions than the interviewee. But it is just as important that the interviewee make sure the employer will be a good fit as it is that the interviewers ensure that the interviewee will be a good fit. It does neither side any good to have an unmotivated, unhappy employee looking for the first opportunity to leave, no matter how skilled they may be.</p>
<p>This point was brought to my attention again a few weeks ago when I read the article <a href="http://www.noop.nl/2009/01/100-interview-questions-for-software-developers.html">100 Interview Questions for Software Developers</a> by Jurgen. I liked the article and have used some of the questions, but it got me thinking that software developers and other I.T. professionals deserve to have the same resource – interview questions to ask of employers. So below I list 100 questions you should look for answers to during the interview process. Some of the questions are specifically for software developers, but many are more broadly applicable to any professional knowledge-worker position.</p>
<p><strong>Warning: Do not simply ask the interviewers these 100 questions in the first interview!</strong> Your first priority in an interview process is to convince the interviewers to hire you by selling yourself. The important but secondary priority is to determine that the company is a good fit. It does not matter how good a fit the company is if they will not hire you. (This reminds me of all the blog posts from people who interviewed for Google but did not get in.) So wait until the company is at least seriously interested, and better yet has extended an offer, before doing your due diligence and asking these questions. I would not recommend asking all of these questions directly of the interviewers, especially those from the human resources department, as they likely do not know what the specific working conditions are like and may sugar-coat the facts. I recommend instead talking directly to a few regular employees, preferably in a neutral setting outside of the office. </p>
<p>Without further ado here are the questions organized into categories.</p>
<ol>
<h3>Organization</h3>
<li>What drives the organization? What do senior executives value? What is important to them?</li>
<li>What are the core values that make up the organization's culture? Has this been consistently supported by  senior executives?</li>
<li>Is the organization financially strong and stable? Please provide your annual financial reports for the last three years. (This is available on-line for publicly-traded companies.)</li>
<li>What are the significant strengths, weaknesses, opportunities, and threats facing the organization over the next few years? What are the organization's strategic goals?</li>
<li>How does the department / team I will be joining relate to the overall organization? How does it support the organization's strategic goals? Is the department a cost or profit center? How is the department perceived politically?</li>
<h3>Management</h3>
<li>How often will my immediate supervisor meet with me one on one?</li>
<li>What is the management style of my immediate supervisor and their superior?</li>
<li>How do you deal with poorly performing employees?</li>
<li>What is your strategy for empowering employees?</li>
<li>How do you ensure you are delegating effectively rather than micro-managing?</li>
<li>How do you help ensure that employees are highly motivated?</li>
<li>How do you ensure that each employee is doing quality work?</li>
<li>How does management ensure that employees feel listened to?</li>
<li>How do you enhance the creativity of developers?</li>
<li>How approachable and receptive is management to suggestions and feedback?</li>
<li>How do you minimize interruptions for developers?</li>
<li>Do you treat people with respect and integrity? Provide an example.</li>
<li>How important is productivity of software developers to the organization? What do you do to maximize productivity?</li>
<li>Do you put as much if not more effort into retaining employees as you do recruiting? What is your retention strategy?</li>
<li>How do you promote a healthy work-life balance?</li>
<li>What metrics do you track and report on? Provide a report showing data from the last few months.</li>
<h3>Teams</h3>
<li>How are teams assembled? How are team members selected? What are the selection criteria?</li>
<li>How often will the team I am in meet as a group?</li>
<li>What do you expect will be my role on the team?</li>
<li>What are the experience levels (i.e. junior, intermediate, senior) and job roles of the other team members?</li>
<li>What is involved in moving to another team or changing work assignments?</li>
<li>Do teams have a sufficient diversity of skill beyond simply coding? What about ability in gathering requirements, architecture, usability design and testing, database design and administration, functional testing, and technical writing?</li>
<li>What types of team-building activities are done? How frequently?</li>
<li>Are teams empowered and self-organizing? Are teams able to choose and tailor a methodology to suit them and their work?</li>
<li>How much freedom and support is provided to mentor and consult with colleagues, superiors, and customers?</li>
<li>Describe the clients, customers and end users I will be working with or for. How reasonable and pleasant are they?</li>
<h3>Work Assignments</h3>
<li>What kind of work assignments will I be given? What will be my day-to-day responsibilities?</li>
<li>What opportunities will there be to work with new, interesting technologies?</li>
<li>How do you plan to provide me with challenging work that makes optimal use of my abilities while providing a supportive environment?</li>
<li>Are developers required to do administrative or non-value-add tasks that could be done more cost effectively by others?</li>
<h3>Work Environment</h3>
<li>Will I be situated in an office with a door?</li>
<li>Is the work environment quiet with no distracting noises like intercoms, call center staff, ventilation systems, or traffic?</li>
<li>Are living, green plants in abundance in the office?</li>
<li>Are high quality chairs provided?</li>
<li>Is the office setting (chair, desk, keyboard, and monitor) ergonomically friendly? Can I adjust the height of everything to fit my needs?</li>
<li>Do you supply at least two large monitors as a standard configuration for software developers?</li>
<li>Are software developers provided with high-powered workstations? How often are they upgraded?</li>
<li>Does the office setting support collaboration with coworkers? This includes at least one extra chair, the ability for two people to sit in front of the computer (i.e. pair programming), and a white board fixed onto a stable surface with room for at least three people to stand in front of it.</li>
<li>Will I be provided with an ergonomic keyboard and mouse to my specifications? Or can I purchase my own and expense it with no questions asked?</li>
<li>Will I have the freedom to install the tools I want on my workstation?</li>
<li>What is the process and lead time to get a new tool, workstation, or server purchased and installed? How much bureaucracy and delay is involved?</li>
<h3>Project Management</h3>
<li>Do projects have realistic schedules, resources, and scope that are actively managed and adjusted? How much freedom and control does the project manager / team have to change these three factors?</li>
<li>How do you deal with a project that is behind schedule?</li>
<li>How do you manage requests to change the scope or requirements of a project?</li>
<li>What tools and practices are used to manage project schedules?</li>
<li>Who estimates the time or effort required to do development work?</li>
<li>How is the expenditure of effort tracked? What tools are used for time entry and tracking progress?</li>
<li>What is the duration of iterations and releases?</li>
<h3>Development Practices</h3>
<li>What development methodologies do you use? Describe how they are put into practice.</li>
<li>How closely does development activities align with the philosophy &#038; principles of <a href="http://agilemanifesto.org/">Agile</a> and <a href="http://en.wikipedia.org/wiki/Lean_software_development">Lean</a>?</li>
<li>What languages, libraries, and frameworks are commonly used or mandated?</li>
<li>What developer tools (especially IDE) are provided or mandated?</li>
<p><strong>What do you do for:</strong></p>
<li>Version Control?</li>
<li>Unit Testing?</li>
<li>Code Reviews?</li>
<li>System &#038; Integration Testing?</li>
<li>Client / Customer / End User Collaboration?</li>
<li>Requirements / Design Specifications?</li>
<li>Design Reviews?</li>
<li>Defect Tracking?</li>
<li>Build Automation?</li>
<li>Continuous Integration?</li>
<li>Usability Testing?</li>
<h3>Continuous Improvement</h3>
<li>What continuous improvement activities are performed on a regular basis?</li>
<li>How often are retrospectives / lessons learned meetings held?</li>
<li>How aggressively do you minimize bureaucracy and non-value-add activities? Can you provide an example of improving in this regard in the last six months?</li>
<li>What is your process for handling suggestions and ideas from employees? How many suggestions per employee on average were received in the last year? How many were acted on?</li>
<h3>Professional Development</h3>
<li>Do you provide opportunities for developers to receive feedback and learn from having their software running in production?</li>
<li>What opportunities will I get to work with or mentor under expert world class software developers, architects, and managers?</li>
<li>How much paid training do you provide to each employee per year? What kind of training is it? Can employees choose or recommend the training they take?</li>
<h3>Performance Evaluation</h3>
<li>What kinds of opportunities for growth and advancement are possible? Describe the options for technical career paths that do not involve management.</li>
<li>How do you make decisions regarding promotions?</li>
<li>What approach is used for providing timely, effective feedback on performance? How are performance evaluations carried out?</li>
<li>What do you look for in an ideal employee?</li>
<h3>Working Hours</h3>
<li>What are the official number of hours worked per week?</li>
<li>How many hours per week on average have your software developers worked over the last three months?</li>
<li>Do you allow or expect mandatory overtime? What do you consider an unacceptable amount of overtime (both mandatory and voluntary)?</li>
<li>Do you provide flexible working hours? What limits are there?</li>
<h3>Compensation and Benefits</h3>
<li>Do you provide a competitive salary? What is your definition of competitive?</li>
<li>How do you ensure that the salary of long-term employees stays competitive, especially in a hot job market? Do you respect your long-term employees enough to raise their salaries in such situations without waiting for them to ask for raises?</li>
<li>How do you compensate for overtime?</li>
<li>Do you pay your software developers according to their level of productivity? Why or why not?</li>
<li>How many weeks per year of vacation do you offer?</li>
<li>How flexible are you concerning how banked vacation can be used? Can it be saved from year to year? Are there any restrictions on taking vacation?</li>
<li>What is your policy concerning raises? How regularly do you give raises? Do you consider a yearly increase in salary equal to the local inflation rate to be a raise?</li>
<li>How do you reward exceptional performance? What do you consider exceptional performance and how do you identify it?</li>
<li>Do you provide share options, profit sharing, retirement savings contributions, or pension? If so, what are the details of the plan(s)?</li>
<li>What medical benefits do you provide? Do you cover dental work or eyeglasses? Do you cover health preventative measures such as exercise programs, vitamins, or preventative medical exams?</li>
<li>What is your policy regarding sick days?</li>
<li>Do you allow and support people in working from home? Up to what percentage of the time?</li>
<li>Will travel be expected? If so, how frequently, for how long, to where? What is the policy on travel expenses?</li>
<li>What other benefits or perks do you provide?</li>
<h3>Contribution to Community</h3>
<li>How do you participate in and contribute to the local and global I.T. / software development community?</li>
<li>What open source software do you support? What form does this support take?</li>
<h3>Wrap-up Questions</h3>
<li>Who are you competing with locally for recruiting software developers? Who are you losing developers to?</li>
<li><em>Bonus Question</em>: Please provide three references consisting of employees I can talk to. The references should include a senior software developer and a technical lead.</li>
</ol>
<p>The vast majority of Internet resources for job interviews focus on questions to ask employees, but I did find a few relevant articles that were helpful in producing this list of questions:</p>
<ul>
<li><a href="http://www.joelonsoftware.com/articles/fog0000000043.html">The Joel Test from Joel On Software</a></li>
<li><a href="http://c2.com/cgi/wiki?DeveloperBillOfRights">C2's Developer's Bill of Rights</a></li>
<li><a href="">Jeff Atwood's Programmer's Bill of Rights</a></li>
<li><a href="http://www.career.vt.edu/Jobsearc/interview/AskQues.htm">http://www.career.vt.edu/Jobsearc/interview/AskQues.htm</a></li>
<li><a href="http://www.pohly.com/interview-2.html">http://www.pohly.com/interview-2.html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2009/100-interview-questions-to-ask-employers/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Java Developers and Database Administrators Needed</title>
		<link>http://www.basilv.com/psd/blog/2007/java-developers-and-database-administrators-needed</link>
		<comments>http://www.basilv.com/psd/blog/2007/java-developers-and-database-administrators-needed#comments</comments>
		<pubDate>Mon, 08 Oct 2007 18:09:16 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[miscellaneous]]></category>
		<category><![CDATA[CGI]]></category>
		<category><![CDATA[IT careers]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2007/java-developers-and-database-administrators-needed</guid>
		<description><![CDATA[The CGI Edmonton office (in Alberta, Canada) where I work is looking for Java developers and database administrators. CGI Edmonton primarily provides software development and maintenance services to various Government of Alberta ministries such as Alberta Health and Wellness. If you are good at what you do, like a challenging yet supportive work environment, and [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.cgi.com">CGI</a> Edmonton office (in Alberta, Canada) where I work is looking for Java developers and database administrators. CGI Edmonton primarily provides software development and maintenance services to various Government of Alberta ministries such as Alberta Health and Wellness. </p>
<p>If you are good at what you do, like a challenging yet supportive work environment, and live in Edmonton or are willing to move, then please contact me at bv-cgiwork 'at' basilv 'dot' com. CGI prefers to hire referrals of employees, so if I refer you to HR you will have a much better chance than if you just applied online. </p>
<p>Contact me at bv-cgiwork 'at' basilv 'dot' com to apply.</p>
<p>Disclaimer: I do receive a bonus from CGI for people I refer that are hired.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2007/java-developers-and-database-administrators-needed/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To Code or Not To Code</title>
		<link>http://www.basilv.com/psd/blog/2007/to-code-or-not-to-code</link>
		<comments>http://www.basilv.com/psd/blog/2007/to-code-or-not-to-code#comments</comments>
		<pubDate>Sat, 14 Jul 2007 14:48:56 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[IT careers]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2007/to-code-or-not-to-code</guid>
		<description><![CDATA[To code or not to code, that is the question for senior software developers when they are presented with the opportunity to move into an architect, project manager or team lead position. Rob Walling recently wrote an excellent article titled Why Good Developers Are Promoted Into Unhappiness describing his unsatisfying experiences as a manager and [...]]]></description>
			<content:encoded><![CDATA[<p>To code or not to code, that is the question for senior software developers when they are presented with the opportunity to move into an architect, project manager or team lead position. Rob Walling recently wrote an excellent article titled <a href="http://www.softwarebyrob.com/archive/2007/07/06/Why_Good_Developers_Promoted_into_Unhappiness.aspx">Why Good Developers Are Promoted Into Unhappiness</a> describing his unsatisfying experiences as a manager and the problems that result from promoting star developers into non-development roles. Rob's article inspired me to contribute my own thoughts on this subject. </p>
<p>I have been thinking about this general topic for a while, as reflected in two of my recent articles titled <a href="http://www.basilv.com/psd/blog/2007/how-much-do-you-code">How Much Do You Code?</a> and <a href="http://www.basilv.com/psd/blog/2007/are-you-doing-enough-coding">Are You Doing Enough Coding?</a>. These articles have focused more on the amount of coding one does as a software developer, and point out that the more senior the developer, the less coding they tend to do. Rob's article, however, focuses on the separate (but related) issue of senior developers moving into non-development roles. I think there are three major forces pushing developers in this direction:</p>
<ol>
<li>Promotion from management. The top performers within a team are often the most likely to be promoted to lead the team, even if they and the corporation are better off if they remain developers. This is especially a problem in hierarchical organizations with no technical career path.</li>
<li>Desire to fix problems. As Rob pointed out, you may feel obliged to take on a leadership role in order to help your team or save your project. A contributing factor is the oft-mistaken belief that the new role will not take all of your time and that you will still have time to code.</li>
<li>Desire for new challenges. If you are feeling stale in your current role then advancing into a more senior position is often the most obvious choice. It is not, however, always the best choice.</li>
</ol>
<p>The correct answer to whether to continue to code or not depends entirely on you and your motivations. I recommend choosing the role that is most rewarding to you on a daily basis, and not choose a role based solely on its seniority, prestige, or salary level. Many developers end up unhappy in non-coding positions because they allowed external forces to push them away from coding. Unfortunately, it can be difficult to determine how much you will enjoy a role until you try it. And once you try a non-coding role, it can be difficult to move back to coding. This is when learning from the experiences of others can help. So here are some of mine.</p>
<p>I personally love coding – the act of creation, as Rob pointed out – and always have since I was young. I did my first coding as a kid on a Vic-20. So becoming a software developer was the obvious career for me. Early in my career I was offered and accepted the opportunity to become a team lead of a small team. I found that I could spend a little less than half my time coding. The other time was spent on administrative or project management activities. The exact percentage varied from week to week: there were some weeks with almost no coding, and other weeks with more. Even when I was involved with the code, a portion of this time was spent doing reviews and mentoring junior developers. The team size varied from three to seven subordinates. As the team grew, the less time I had to code. After a few years and the successful release of a new piece of software, I knew it was time for a change, partly to take on new challenges, and partly to do more coding. </p>
<p>I joined the architecture team within the same company and became involved in a project to build a new application framework. I was coding again full time together with some excellent experienced developers. Those were good times. Within six months, I was offered the architect team lead position, which I accepted partly because it had very limited administrative duties, so I was still able to devote a majority of my time to coding. I did become involved with some non-coding duties, such as a training initiative regarding the use of automated unit testing and mentoring, but I did not mind because I found both activities rewarding, though not without their frustrations. After a few years it was again time to move on.</p>
<p>I switched companies, joining CGI. I was going to be a development lead on a project, but CGI failed to win the bid. Instead, I joined a development project as a regular developer. I had no non-coding responsibilities, and the project was in the construction phase, so I got to do some of the most intensive coding of my career – probably 95% of my time. But like most development projects, it soon ended, and I moved onto a maintenance team as a senior developer. This was my first time in a pure maintenance role, and I discovered that there is definitely less time spent coding due to other responsibilities such as monitoring the operational production system and managing the process by which software changes were released into production. However, I found the role to be an incredible learning experience – check out some of my <a href="http://www.basilv.com/psd/blog/category/maintenance/">articles</a> I have written as a result. </p>
<p>A few years later I was offered another team lead position. By this point in my career, however, I knew that I needed to code at least a certain percentage of my time. The offered position was for a fairly large team with many administrative duties, which I knew would offer no time at all for coding, so I turned the position down. Instead, my role in my existing team has gradually transformed into an architect role, partly out of a desire to fix problems, and partly out of a desire for new challenges. This has led to a reduction in the amount of coding I do. I still get to do some, and I am mostly enjoying the challenges associated with the new role. But I am being careful to avoid moving any higher up as an architect. As an application architect in my existing role, I am still fairly close to the code. I know other application architects who are no longer involved with code, and once you become an enterprise architect that is guaranteed. </p>
<p>There is nothing intrinsically wrong with becoming an architect, team lead, or manager, but there is nothing intrinsically right about it either. The choice of whether to code or not is best based on your motivations. What do you want to do?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2007/to-code-or-not-to-code/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Are You Doing Enough Coding?</title>
		<link>http://www.basilv.com/psd/blog/2007/are-you-doing-enough-coding</link>
		<comments>http://www.basilv.com/psd/blog/2007/are-you-doing-enough-coding#comments</comments>
		<pubDate>Mon, 16 Apr 2007 19:51:18 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[professional]]></category>
		<category><![CDATA[IT careers]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2007/are-you-doing-enough-coding</guid>
		<description><![CDATA[My previous article discussed the question how much do you code?. After thinking more about this, I realized that a more important question is whether you are doing enough coding. How much is enough versus too little? This depends on the reasons why you code. For myself, I can think of several reasons why I [...]]]></description>
			<content:encoded><![CDATA[<p>My previous article discussed the question <a href="http://www.basilv.com/psd/blog/2007/how-much-do-you-code">how much do you code?</a>.  After thinking more about this, I realized that a more important question is whether you are doing enough coding. How much is enough versus too little? This depends on the reasons why you code.</p>
<p>For myself, I can think of several reasons why I code. The primary reason is enjoyment: I find the act of creating working software quite often rewarding, and as a result I am highly motivated to code. There are admittedly times when coding is frustrating and painful, like when trying to track down an intermittent defect. There are also times when coding is tedious - I can see the block of code I am trying to create in my head, but have to laboriously type it all into my IDE. Despite this, overall I find coding more enjoyable than other typical work activities such as writing documentation, design reviews, or meetings.</p>
<p>The type of coding I do also influences the level of enjoyment. Developing a complex new system in my language of expertise (Java) ranks quite highly. Doing simple defect fixes, fixing a problem in badly-written code, or working in a more 'primitive' language / programming environment ranks much lower on the enjoyment scale.</p>
<p>Another reason I code is that it lets me use and further develop my software development skills. As a senior software developer I have spent years honing my ability to create software, so it feels weird when these skills are not called upon at work. Furthermore, I still want to <a href="http://www.basilv.com/psd/blog/2006/perpetual-learning">improve and grow</a> my coding skills despite taking on architect responsibilities.</p>
<p>These reasons combined together influence whether I feel that I am coding enough. I have spend periods of time doing limited coding but not minding because I was still doing enjoyable work, usually involving architecture or design that still required technical 'thinking' and software development skills, so my overall motivation remained high. There are other times when I become twitchy to code - most recently when I was overwhelmed with meetings over a period of several weeks. Sometimes when this happens I turn to <a href="http://www.basilv.com/psd/blog/2006/personal-learning-by-doing">personal coding projects</a> at home to get my 'fix' of coding.</p>
<p>Understanding how much you want to code requires that you understand your motivational factors and your career goals, which is valuable for everyone to know. So ask yourself the question: Are you doing enough coding?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2007/are-you-doing-enough-coding/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Much Do You Code?</title>
		<link>http://www.basilv.com/psd/blog/2007/how-much-do-you-code</link>
		<comments>http://www.basilv.com/psd/blog/2007/how-much-do-you-code#comments</comments>
		<pubDate>Sun, 25 Mar 2007 19:58:15 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[IT careers]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2007/how-much-do-you-code</guid>
		<description><![CDATA[As a software developer, how much time do you actually spend writing code? I recently have discussed this topic with both junior and senior coworkers, from which I have realized that this is a very important question for many developers. The amount of time the average developer actually spends coding can be surprisingly small, and [...]]]></description>
			<content:encoded><![CDATA[<p>As a software developer, how much time do you actually spend writing code? I recently have discussed this topic with both junior and senior coworkers, from which I have realized that this is a very important question for many developers. The amount of time the average developer actually spends coding can be surprisingly small, and is determined by a variety of factors:</p>
<ul>
<li>Your position. Are you a junior developer, a senior developer, or a team lead? In my experience, senior people often have less time for coding because of time spent providing assistance to junior resources and providing input on higher-level topics like project direction, architecture, or design. Very junior people, especially those fresh out of school, are often given a greater share of the mundane, non-coding tasks like user support, updating documentation. Development team leads, even of small teams, must spend time managing and coordinating the activities of the team. Intermediate developers and juniors with a few years of experience generally get the most coding done.</li>
<li>The kinds of projects you are working on. A typical development project to create a new application will involve a lot more coding than maintenance of an existing suite of operational applications. This may be one reason that many developers prefer to be on development projects rather than maintenance.</li>
<li>The phase your work is in. Whether you are working on a major new application or on a small enhancement to an existing application, there are periods when non-coding activities will predominate, such as when gathering requirements, clarifying the solution, testing and fixing defects, or producing documentation. In my experience, there is a natural fluctuation in the amount of coding - some weeks or months you get a lot of coding in, and other weeks or months almost none.</li>
<li>The organizational culture.  Every workplace has a certain amount of weekly overhead activities, such as time sheets, weekly or daily team meetings, performance reviews, etc. Places with more process or more required documentation typically mean less time spent coding.</li>
</ul>
<p>The period of time when I was doing the most coding was on a project to create a new application, during the construction phase. The waterfall methodology was being used, and the design phase had been completed. The team was quite small, with only one junior resource, so we were able to spend the majority of our time coding new features. I spent over 90% of my work week coding. Currently, in contrast, I am doing very little coding - probably under 20% - due to my role as architect or technical lead on a number of projects.</p>
<p>How much coding are you doing?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2007/how-much-do-you-code/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

