What makes a good Software Developer?
A few days ago Børge Hansen asked on Twitter “What does it take to be a successful consultant these days” which resulted in a small but interesting discussion (Anders Norås even brought Twitter down by a flood of tweets). So I thought to write
about what I think what makes a good Software Developer, as I believe
there should be little to no distinction between an in-house Developer
or a hired Consultant.
And yes because I am a Geek I am showing you my thoughts in a Geeky way!
Now when we run these tests you will notice that we only get around 1% test coverage when we talk about a fully implemented Software Developer. An other thing to note is that these projects on average take more then 20 years to complete if at all. By using small iterations and constant feedback you have the opportunity to constantly adapt the Software Developer depending on it’s environment.
I hope you forgive me my Geeky way of showing a very small part of what I think is important in a software developer, one thing that I want to stand out is that one should never ever stop learning new things, and always be open to suggestions. And once you learned something, teach it to someone else!
The BDD style is from TinyBDD
And yes because I am a Geek I am showing you my thoughts in a Geeky way!
1 using System.Linq;
2 using NUnit.Framework;
3 using TinyBDD.Dsl.GivenWhenThen;
4 using TinyBDD.Specification.NUnit;
5
6 namespace Fohjin
7 {
8 [TestFixture]
9 public class SoftwareDeveloperTests
10 {
11 private SoftwareDeveloper _softwareDeveloper;
12
13 [Test]
14 public void Should_engage_in_quality_orientated_development()
15 {
16 var software = new Software();
17 Scenario.New("Should engage in quality orientated development", scenario =>
18 {
19 scenario.Given("A Senior Software Developer",
20 () => _softwareDeveloper = new SoftwareDeveloper { ExperianceLevel = Level.Senior });
21
22 scenario.When("Writing software",
23 () => _softwareDeveloper.WritesSoftware(software));
24
25 scenario.Then("The produced software should be of high quality ensuring that "+
26 "the code is Maintainable, Extendable and of overall High Quality",
27
28 () => {
29 software.IsMaintainable.ShouldBeTrue();
30 software.IsExtendable.ShouldBeTrue();
31 software.IsOfHighQuality.ShouldBeTrue();
32 });
33 }).Execute();
34 }
35
36 [Test]
37 public void Should_demonstrate_creativity_and_insightful_thinking()
38 {
39 var requestOrDemand = new RequestOrDemand();
40 Scenario.New("Should demonstrate creativity and insightful thinking", scenario =>
41 {
42 scenario.Given("A Senior Software Developer",
43 () => _softwareDeveloper = new SoftwareDeveloper { ExperianceLevel = Level.Senior });
44
45 scenario.When("Presented with a request or demand",
46 () => _softwareDeveloper.PleaseSolve(requestOrDemand));
47
48 scenario.Then("The software developer should demonstrate insight and creativity "+
49 "in trying to understand the request or demand. He or she should "+
50 "also provide one or more possible solutions to solve the problem",
51
52 () => {
53 _softwareDeveloper.UnderstandsTheProblem.ShouldBeTrue();
54 requestOrDemand.GetPossibleSolutions().Count.ShouldNotBe(0);
55 requestOrDemand.GetPossibleSolutions().First().IsCreative.ShouldBeTrue();
56 });
57 }).Execute();
58 }
59
60 [Test]
61 public void Should_be_professional()
62 {
63 const string description = "Issue Description";
64 Scenario.New("Should be professional", scenario =>
65 {
66 scenario.Given("A Senior Software Developer",
67 () => _softwareDeveloper = new SoftwareDeveloper { ExperianceLevel = Level.Senior });
68
69 scenario.When("Presented with a major problem",
70 () => _softwareDeveloper.GetProjects().First().HasAnIssue(description));
71
72 scenario.Then("The software developer should as soon as possible notify the stakeholders "+
73 "so that they can make an informed decision. It should be noted that some "+
74 "thought for finding a possible solution should be given before completely "+
75 "scaring the stakeholder",
76
77 () =>
78 {
79 var project = _softwareDeveloper.GetProjects().First();
80 var stakeHolder = _softwareDeveloper.GetStakeholderOf(project);
81 stakeHolder.KnowsOfAnIssue.ShouldBeTrue();
82 stakeHolder.GetKnownIssues().First().Project.ShouldBe(project);
83 stakeHolder.GetKnownIssues().First().Description.ShouldBe(description);
84 stakeHolder.GetKnownIssues().First().GetPossibleSolutions().Count.ShouldNotBe(0);
85 stakeHolder.GetKnownIssues().First().GetPossibleSolutions().First().IsCreative.ShouldBeTrue();
86 });
87 }).Execute();
88 }
89
90 [Test]
91 public void Should_always_be_learning()
92 {
93 Scenario.New("Should always be learning", scenario =>
94 {
95 scenario.Given("A Senior Software Developer",
96 () => _softwareDeveloper = new SoftwareDeveloper { ExperianceLevel = Level.Senior });
97
98 scenario.Then("The software developer should always be learning",
99 () => _softwareDeveloper.IsLearning.ShouldBeTrue());
100
101 }).Execute();
102 }
103
104 [Test]
105 public void Should_be_awesome()
106 {
107 Scenario.New("Should be awesome", scenario =>
108 {
109 scenario.Given("A Senior Software Developer",
110 () => _softwareDeveloper = new SoftwareDeveloper { ExperianceLevel = Level.Senior });
111
112 scenario.Then("The software developer should be awesome",
113 () => _softwareDeveloper.IsAwesome.ShouldBeTrue());
114
115 }).Execute();
116 }
117 }
118 }
Now when we run these tests you will notice that we only get around 1% test coverage when we talk about a fully implemented Software Developer. An other thing to note is that these projects on average take more then 20 years to complete if at all. By using small iterations and constant feedback you have the opportunity to constantly adapt the Software Developer depending on it’s environment.
I hope you forgive me my Geeky way of showing a very small part of what I think is important in a software developer, one thing that I want to stand out is that one should never ever stop learning new things, and always be open to suggestions. And once you learned something, teach it to someone else!
The BDD style is from TinyBDD
Recent blog posts
- Follow me @ Elegant Code
- CQRS à la Greg Young
- CQRS à la Greg Young example code
- My Kindle DX
- My book: Are You Better Than Yesterday?
- Running with Scissors
- Applying Domain-Driven Design and Patterns
- Hey Developer, YAGNI I tell you
- Hey Developer, the product you create is your code
- NDC videos are published







Since I know you have a lot of Norwegian readers I would like to share my own blogpost about the four main skill categories I believe every software developer should cultivate:
http://blog.kjempekjekt.com/2009/04/10/utviklerprofiler-og-fire-ferdighetskategorier/
And I will definitely check out TinyBDD :)
Torbjørn Marø, Friday, May 22, 2009 at 10:44 PM