Skip Navigation LinksHome > 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