Update: The coinage by Kent Beck looks like the 'original' one to me, although his usage of the word doesn't make much sense in my opinion. Coding up a quick test is 'putting a spike through the project'?
Sometimes I call this a "spike," because we are driving a spike through the entire design. [...] Because people variously associate "spike" with volleyball, railroads, or dogs, I have begun using "architectural prototype" to describe this implementation.
"Spike" is an Extreme Programming term meaning "experiment". We use the word because we think of a spike has a quick, almost brute-force experiment aimed at learning just one thing. think of driving a big nail through a board.
-- Extreme Programming Adventures in C# - Ron Jeffries
I believe it is an engineering expression. A spike is a temporary solution, something you try out to see if it works, before you make the permanent solution. Railroad engineers talk about spiking a track switch: inserting a rail spike into the switch, so it cannot be moved.
An elongated indeterminate inflorescence in which the flowers are attached directly to a common stem, rather than borne on individual stalks arising from the stem. The gladiolus produces spikes. The distinctive spikes of grasses such as wheat or barley are known as spikelets. See illustration at inflorescence.
Coronavirus disease 2019 is a newly emerging infectious disease currently spreading across the world. It is caused by a novel coronavirus, severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2). The spike (S) protein of SARS-CoV-2, which plays a key role in the receptor recognition and cell membrane fusion process, is composed of two subunits, S1 and S2. The S1 subunit contains a receptor-binding domain that recognizes and binds to the host receptor angiotensin-converting enzyme 2, while the S2 subunit mediates viral cell membrane fusion by forming a six-helical bundle via the two-heptad repeat domain. In this review, we highlight recent research advance in the structure, function and development of antivirus drugs targeting the S protein.
Introducing the all-new Power-Pole Ultra-lite Spike and Power-Pole Heavy-duty Spike. Regardless of your fishing style, these new spikes deliver a strong and secure hold for kayaks and paddleboards to bay boats and pontoon boats.
Severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2) is the virus behind the worldwide outbreak of COVID-19 disease. One of the key biological characteristics of SARS-CoV-2, as well as several other viruses, is the presence of spike proteins that allow these viruses to penetrate host cells and cause infection.
We track hospital and ambulance data to look for unexpected increases, or spikes, in drug-involved overdoses. If we see a spike, we send out an alert. Our alerts give as much detail as we can to prevent overdose deaths.
The spike can be subdivided into distinct functional units, known as domains, which fulfil different biochemical functions of the protein, such as binding to the target cell, fusing with the membrane, and allowing the spike to sit on the viral envelope.
The spike protein of SARS-CoV-2 is stuck on the roughly spherical viral particle, embedded within the envelope and projecting out into space, ready to cling on to unsuspecting cells. There are estimated to be roughly 26 spike trimers per virus.
One of these functional units binds to a protein on the surface of our cells called ACE2, triggering uptake of the virus particle and eventually membrane fusion. The spike is also involved in other processes like assembly, structural stability and immune evasion.
For SARS-CoV-2, the vaccines produced by Pfizer/BioNTech and Moderna give instructions to our immune system to make our own version of the spike protein, which happens shortly following immunisation. Production of the spike inside our cells then starts the process of protective antibody and T cell production.
One of the most concerning features of the spike protein of SARS-CoV-2 is how it moves or changes over time during the evolution of the virus. Encoded within the viral genome, the protein can mutate and changes its biochemical properties as the virus evolves.
Most mutations will not be beneficial and either stop the spike protein from working or have no effect on its function. But some may cause changes that give the new version of the virus a selective advantage by making it more transmissible or infectious.
Spikes are a type of SAFe Enabler Story. Defined initially in Extreme Programming (XP), spikes represent activities such as exploration, architecture, infrastructure, research, design, and prototyping. Their purpose is to gain the knowledge necessary to reduce the risk of a technical approach, better understand a requirement, or increase the reliability of a story estimate.
Agile and Lean value facts over speculation. When faced with a question, risk, or uncertainty, Agile Teams conduct small experiments before moving to implementation rather than speculate about the outcome or jump to a Solution. Teams may use spikes in a variety of situations:
Like other stories, spikes are put in the Team Backlog, estimated, and sized to fit in an iteration. Spike results may differ from a story because they often produce information rather than working code. They should develop only the information required to identify and size the stories that drive it confidently or to determine the best technical approach.
The output of a spike is demonstrable, both to the team and to any other stakeholders, which brings visibility to the research and architectural efforts and helps build collective ownership and shared responsibility for decision-making. The Product Owner accepts spikes that have been demoed and meets its acceptance criteria.
At the March 1939 Council Bluffs City Council Meeting, City engineer Jack Boyne suggested the monument and design. The Monument was constructed by 14 men in 10 days and completed on April 26, 1939 at a cost of $3,500. It took 5 days to build the base and 5 days to build the spike. The monument reaches 59 feet into the air and weighs 243,200 pounds.
A spike solution, or spike, is a technical investigation. It's a small experiment to research the answer to a problem. For example, a programmer might not know whether Java throws an exception on arithmetic overflow. A quick ten-minute spike will answer the question.
Although this example is written as a stand-alone program, small spikes such as this one can also be written inside your test framework. Although they don't actually call your production code, the test framework provides a convenient way to quickly run the spike and report on the results.
The best way to implement a spike is usually to create a small program or test that demonstrates the feature in question. You can read as many books and tutorials as you like, but it's my experience that nothing helps me understand a problem more than writing working code. It's important to work from a practical point of view, not just a theoretical one.
I discard the spikes I create to clarify a technical question (such as "Does this language throw an exception on arithmetic overflow?"), but generally keep the ones that demonstrate how to accomplish a specific task (such as "How do I send HTML email?"). I keep a separate spikes/ directory in my repository just for these sorts of spikes.
Most spikes are performed on the spur of the moment. You see a need to clarify a small technical issue, and you write a quick spike to do so. If the spike takes more than a few minutes, your iteration slack absorbs the cost.
If you anticipate the need for a spike when estimating a story, include the time in your story estimate. Sometimes, you won't be able to estimate a story at all until you've done your research; in this case, create a spike story and estimate that instead (see Stories in Chapter 8).
Exactly. Production code should never catch Throwable, but a spike isn't production code. Spike solutions are the one time that you can forget about writing good code and just focus on short-term results. (That said, for larger spikes, you may find that code that's too sloppy is hard to work with and slows you down.)
One very effective way to pair on a spike is to have one person research the technology while the other person codes. Another option is for both people to work independently on separate approaches, each doing their own research and coding, then coming back together to review progress and share ideas.
Unless you think someone will refer to it again later, toss it. Remember, the purpose of a spike solution is to give you the information and experience to know how to solve a problem, not to produce the code that solves it.
Once, a customer asked me for a feature I thought might work in a certain way, but my spike demonstrated that the relevant Internet standard actually prohibited the desired behavior. We came up with a different design for implementing the larger feature.
Avoid the temptation to create useful or generic programs out of your spikes. Focus your work on answering a specific technical question, and stop working on the spike as soon as it answers that question. Similarly, there's no need to create a spike when you already understand a technology well.
Don't use spikes as an excuse to avoid disciplined test-driven development and refactoring. Never copy spike code into production code. Even if it is exactly what you need, rewrite it using test-driven development so that it meets your production code standards.
Spike solutions are a learning technique based on performing small, concrete experiments. Some people perform these experiments in their production code, which can work well for small experiments (such as the arithmetic overflow example), but it increases the scope of possible error. If something doesn't work as expected, is it because your understanding of the technology is wrong? Is it due to an unseen interaction with the production code or test framework? Standalone spikes eliminate this uncertainty.
dafc88bca6