Home > About Us > The Spider Manifesto
Preamble
SpiderLogic is a project based software development firm. We specialize in leveraging
small teams of experienced software developer to build custom applications for clients
using the most appropriate technologies for the client's project. We strive to be
pragmatic and deliver strong business value to our clients first. We are software
developers who are passionate about the work that they do and strive to surround
ourselves with other talented, passionate people so that we can learn from each
other. We foster a trusting relationship with our clients. Many of our clients come
back to us repeatedly for projects and expect us to become the experts in whatever
new technologies we need to use to develop their solution.
We think that we should make our beliefs and our values explicit. These beliefs
and values are how we should judge all of our activities both tactical and strategic.
Do they support our beliefs and values or not? Which activities better support those
beliefs and values? This is the basis for how we should judge ourselves.
Beliefs
Technology neutral
SpiderLogic is technology neutral. We do not specialize in one technology or one
platform. Our specialty is solving problems with a diverse set of technologies.
While we might each have personal favorites, and most of us are very opinionated
on that topic, our primary concern is to choose the technology that best solves
the problem for our client. We have experience in Java, .NET, Ruby and C++. We have
people that have programmed in C, Scheme, Delphi, SmallTalk, Objective-C, PHP and
Perl (among many others) on Windows, Windows Mobile, Unix, Linux, Symbian OS, and
Mac OS X. We are open to any and all development platforms and languages.
Project work
We want to do full-lifecycle, in-house development work. We like the people that
we work with. We all have good experience that can lend itself to our projects.
As such we are a team of people who know each other and have worked together will
have built trust and improved communication. Working on in-house projects allows
us to leverage this fact by building teams of people who have done the work to "work
out the kinks" and will be more productive. Inquisitive about new technologies and
processes
We like exploring new ideas and new technologies. The more languages each of our
developers knows, the better we are at solving problems in whatever language we
use because our thinking is not constrained by the technology in play. Constantly
exploring keeps us on the leading edge of ideas in the field so that we can more
successfully utilize the best techniques and processes in our software development
work. It also allows us to identify and evaluate emerging technologies to see if
they will be a good fit for solving our client's projects. Doing a variety of interesting
work
We want to tackle new problems and do things that other people are not capable of
doing. We don't specialize in solving one kind of problem but instead solve many
different kinds of problems. We have a broad base of experience building many different
kinds of applications. We build web applications and desktop applications, server
applications and handheld applications. This is an advantage to our clients because
we can help them make the decision about what is best to solve their needs. If we
were a web application only shop then all of our solutions would be constrained
by that. (If all you have is a hammer, then everything looks like a nail.)
Quality over quantity
A few great, experienced software developers can accomplish more than a large number
of average software developers. It has been said that there is up to a 10 to 1 ratio
between the productivity of a great developer and an average one. We're looking
for those high-end people and striving to have all of our people reach that goal.
A great developer will have a positive impact on a project both in terms of productivity
and the state of the software when they are done. This is not always easy to quantify,
but it's easy to see the results in the end. We take it upon ourselves to constantly
improve and learn new skills. We take it upon ourselves to always strive to be better
software developers.
Poor quality is never an option. To quote Kurt Halbeck - "I can explain when a project
takes longer. I can justify a cost overrun. But I can never justify poor quality."
When a client works with us, there is an assumption of high quality in the work
that we do. First and foremost we must maintain that quality. Working with the customer
to Understand their Business and get Feedback
It is very important to work with a customer to develop the system that they need.
Understanding their business and the problems that they are trying to solve is one
of the most important things that we can do to develop the best systems for them.
It can be very difficult for most people to think like a software developer and
tell us everything we need to know up front about a system that they want us to
build. Therefore, we must work closely with customers to help them determine what
they need. We must work with them to help them make decisions about the trade-offs
that we can make as we develop a system. We must be open to feedback and responsive
to changing requirements. An original specification has no value if the customer's
needs have changed, so incorporating that feedback and making it part of our process
is absolutely required. What we Value
Communication
We value the ability to clearly communicate to your team members and your coworkers.
We want people to be honest in their feedback to each other and talk about roadblocks
when they arise. We need to communicate when we need more information or have concerns
about a design or another decision. Only through that open communication can we
leverage the power of the whole team and come to the best decisions.
That communication also has to do with clients. We value the ability to interact
with clients so that you can more fully understand their business, their problems
and help them arrive at the best solutions to those problems.
Collaboration
No one person has all of the answers. We need to work together and challenge each
other to come up with the best solutions. We need to challenge each others assumptions
and always ask questions if we are not clear about what we need to do to move the
project forward. A second (or third) set of eyes and ears will often be able to
help you think about a problem better and come up with a more effective solution
to it. When in doubt we want to talk to our co-workers to get their assistance to
come up with the best possible solutions. We want to be open to other people's ideas.
We can defend our own, but not at the expense of keeping an open mind to new information
and new insights from others.
Ownership
Any task, no matter how small, or how large needs to be owned both by the team and
the individuals to whom it may be assigned. Ownership means understanding why we
are building an application, it's understanding the business problems being solved
and the value that will come from the application. Ownership means that every time
you open a file, every time you work on a project, you take the time to improve
it in someway. Ownership means taking responsibility for communicating roadblocks
and problems to the team. It means collaborating with others to come up with the
best solution. It means delivering completed, working, tested code when you say
you will deliver it.
Individual Ownership means that we meet our commitments. We deliver working, tested
software when we say we will because we know our team is depending on it. Collective
Ownership means that we work together to solve problems. It means that no one individual
owns a class or a file. We are all allowed to work on code written by other people.
Of course it is often a good idea to consult with those people as they might have
valuable insights into the existing code. Responsibility to the Team
Each of us is responsible to maintain the wellbeing of the team as a whole. We all
need to work to improve communication and collaboration. We need to take it upon
ourselves to build the team and support the teams decisions. We need to lead by
example and implement the best practices that we learn about. We need to teach and
learn from each other. Responsibility to the team is taking the time to automate
repetitive tasks, it's writing Unit Tests so people that come behind you can have
confidence in the changes that they make. It's documenting the project so that everyone
can understand the intent of the code and people in the future will more quickly
come up to speed. Good software Design and Architecture
Well designed software costs less to maintain, it is easier to change, it is easier
to Unit Test. Good design is fundamentally about quality and long-term maintainability
of a system. We do this because it is part of the assumption of quality that our
customers have. We do this because it is the right way to develop software. We do
it because it is more enjoyable to write and maintain a well designed system and
we like having fun when we work.
Good Design and Architecture does not necessarily mean the most complex thing that
you can come up with. The best design is often the simplest one that can elegantly
solve the problem at hand.
Our Activities
Agile
Whether it's XP or Lean or Scrum, we think that our beliefs and values are best
supported by Agile development methodologies.
Principles behind the Agile Manifesto
- Our highest priority is to satisfy the customer through early and continuous delivery
of valuable software
- Welcome changing requirements, even late in development
- Agile processes harness change for the customer's competitive advantage
- Deliver working software frequently, from a couple of weeks to a couple of months,
with a preference to the shorter timescale
- Business people and developers must work together daily throughout the project
- Build projects around motivated individuals. Give them the environment and support
they need, and trust them to get the job done
- The most efficient and effective method of conveying information to and within a
development team is face-to-face conversation
- Working software is the primary measure of progress
- Agile processes promote sustainable development. The sponsors, developers, and users
should be able to maintain a constant pace indefinitely
- Continuous attention to technical excellence and good design enhances agility
- Simplicity-the art of maximizing the amount of work not done-is essential
- The best architectures, requirements, and designs emerge from self-organizing teams
- At regular intervals, the team reflects on how to become more effective, then tunes
and adjusts its behavior accordingly
Unit Testing
Unit Testing is the foundation of quality. Unit Testing communicates a developers
intent about code. It provides the foundation to allow us to develop with confidence
knowing that if we break something we will find it quickly. Unit Testing promotes
team wellbeing through individuals committing to each other that when they check
in code that it works. Unit Testing allows us to refactor to incorporate new requirements.
Unit Testing encourages better design.
Unit Testing is the foundation of many of our beliefs and values. It supports quality,
improves communication and it builds confidence in our team.
Iterative development
Delivering working software on a regular time schedule allows for better planning
and better feedback from the clients. It allows for us to steer the development
more effectively and ultimately to deliver better value to our clients. The goal
of iterations is to deliver working, tested, deployable software with new business
value every iteration. If you are not delivering working software with business
value then there is no point in having iterations.
Iterative development means that we have a binary, yes/no decision about functionality
that is in the software. At the end of the iteration a feature (or use case or user
story) is either complete and tested or it is not. We can not accept a "mostly done"
or an "it's done but not tested" answer. When that's the case the functionality
gets put back into the queue to be re-prioritized with all the other functionality
for the next iteration. Because of this yes/no binary decision, it is very import
that we estimate accurately and that we commit, as a team, to the features to deliver
in an iteration. Object Oriented Design and Programming
OOD/OOP is a proven means of implementing complex computer systems. Many of the
languages that we use to develop software have explicit support for Object Oriented
constructs. It is a discipline that has been studied and written about extensively.
As such there is a huge amount of knowledge that we can learn and take advantage
of to help us build better, well designed software.
The language of OO is very rich, full of its own lingo as well as the language of
patterns and refactorings. We can talk inheritance and composition as well as encapsulation,
polymorphism, and cohesion. We can talk about the Factory and Replacing a conditional
with Polymorphism. Knowing this language is key to successful communication and
collaboration among your team members.
Automation
We utilize our tools and computers to the maximum by automating repetitive and error-prone
tasks. We use build tools (MSBuild, Ant, Rake, etc) to help streamline our development
processes. We also use Continuous Integration to back up those processes and give
visibility to the entire team about the state of the software. Continuous Learning
Software Development, possibly more than any other discipline, is a constantly changing
field. New languages, frameworks and techniques are constantly being developed that
make the process of software development more efficient and more effective. As such,
we have to take it upon ourselves to continuously learn about these new techniques
and practices. We have to constantly evaluate new technologies and expose ourselves
to new ideas and programming languages. It is the only way that we can get better
at what we do, get better at implementing software solutions and get better at identifying
and communicating to clients about the tools that will best solve their problems.
Back