What to do if you discover flaws in the software architecture

Currently, our team of 11 people is working on a project on the asp.net platform. The terms of the project are 8 months, and we have already done 4 months. Now, while working on new features, we find that there are some drawbacks to the system architecture that cause us to face many problems. Now, who to look for to solve this ... team leader or project manager ... Have you ever come across this scenario? What is better to do then.

+4
source share
5 answers

Just raise your concerns at a team meeting in which both the team leader and the project manager participate. Promote all your views frankly and effectively. This, in turn, will help the future of the project and give a new idea to the Prime Minister.

Further, all 11 members of the team can also discuss this with each other and share opinions with each other .. not only about the problem ... but also about a possible solution. As a result, you can use all available solutions for TL and PM. The whole process will ultimately help restore the project from these mid-range issues.

A good link for what to do is this

+2
source

If you have realized this and no one has it, and you want the project to be successful, then you need to add a few extra hours and make a plan, and then sell it to the people who are nominally responsible for making decisions.

Real projects have "reboots." This does not mean that you are throwing away all your existing work. This means that you will find a new shell to match the details of this work. It is much simpler if your work - so far away - consists of well-understood self-consistent small components that are loosely coupled to each other. This is why people work this way because they know from experience that they will have to redo things. Almost all of the features added to programming languages ​​over the decades are explained by the fact that we know that every piece of code that we write can be changed - it can survive, but you will probably have to deal with many unfamiliar travel environments on vacation.

So, you noticed that relevant information constantly appears throughout the project. This is not convenient if you are showing everything in one package right before you start entering the code. Writing a specification document does not solve this problem at all. Therefore, you need to change the way you work so that the project draws new information all the time - new new information from the outside is the food that moves your project forward. Try to look forward to each new amazing revelation and greet him as a friend!

What does it mean? This means that the "architectural" parts of the project are no more stable than the "small details". You should be able to change the architecture. You do not have enough information at the beginning to make a permanent decision about something.

The main problem may be the fact that you have a project for eight months. Real eight-month projects (those that succeed on time) are actually, if you look closely, many shorter projects: 16 two-week projects are ideal.

You need to put all the goals of the project (for now) in a large list in order of priority. Write each function requirement from the user's point of view. "The user must be able to blah blah blah," this kind of thing. Avoid talking about the technical problems of current design. Think about how the user will deal with the lack of a product (or what they are currently using), and talk about how their experience will be improved using a specific function.

The order of priorities is important. The goal is to be able to say: we only have time to send the first 10 items. This is better than 9 items, which in turn is better than 8, etc. But even with 8 elements, this would be better than nothing, because each element is a function that in itself will improve the user experience.

The list is called backlog.

If you compare your work with the lag, you will usually find that you are working on low-priority things because you think you will need this later. Try not to do this from now on. Low priority - low priority. What should I do if new requests with a higher priority appear between the date of sending and sending? They will almost certainly be! Although some people will demand (“It would be completely useless without function A!”), You could probably supply neither function A nor function B. But if you had to choose one, you would go with function A. And you may well need to send without function B due to lack of time. Therefore, do not compromise A in order to be “ready” for adding B later. Only prepare in advance if it will cost you practically nothing - leave the places where you can add things, make everything possible, but not if it slows you down now.

Then start work on a new version of the product (forbid work done so far where it makes sense), which takes care of the first elements of the list - the minimum minimum. Do not spend more than a week on this. A week is 6.25% of the remaining time, so in fact it is quite expensive. But at the end of this, you have an idea that you are ready to send so far. This is the only way to measure your progress from now on.

The rest of your project consists of:

  • Repeatedly rolls out new working versions of the product, each time adding a few more functions from the priority list. Get a small community of users to work with each version and give direct feedback to your team. Strive to make a new version every two weeks.

  • Inclusion of user reviews in new "stories" for the transition "to the backlog." This, of course, is related to their priority.

You do this over and over, in short iterations, until you run out of time (you probably have time to do six to eight iterations). At the end of each iteration, you have something for delivery that is “better” (has higher priority functions, contains more reviews) than what you had at the end of the previous iteration. This is progress.

Each issue at the end of the iteration has two goals: to show progress and, of course, to make the user community a little happier, but also to get more feedback in order to find out new information. Each version is a solution and a probe. This dual character continues after the first public release. A public release is a deep space probe that you send to the solar system to send photos of strange new worlds (as traces of an exception stack).

All this is scientific and rational. You make decisions about how to work based on priority. You get constant feedback based on the working version of your product, rather than guessing the feedback you received from an imaginary version of your product.

People will respond to this approach, saying that it will be terribly "ineffective." Efficiency is a relative term. Projects that don't work this way always end up that way, after all. But "at the end" is very late. There is usually a crazy panic for an additional N months after the initial deadline, when the project continues to reproduce repetitive versions of the product that are all “almost right” or “almost done”, in a crazy self-deceived parody of iterative development.

Fortunately, you can start thinking and working this way at any time. It is better to start halfway to the original date than soon after.

+3
source

Raise a question with your project manager. Imagine a list of options with the highest possible time estimate to complete each with an objective list of pros and cons.

Offer your advice in the best possible way, but at the end of the day this is probably not your call to make how it will be resolved.

+1
source

For what you say, you have a technical duty .

This is the problem that every project faces, mainly because you now have much more knowledge about the domain than 4 months before.

This is a compromise, if the changes are not very cruel, you can turn them off. If they are radical, you can reach the deadline with some features, and then plan the time for refactoring.

Remember that as a real debt, he will continue to increase interests until you pay it.

Good luck

+1
source

I would start by getting consensus on the team about the problems and how to solve them. Ask yourself: what is the overall impact? Is this a complete checkpoint? Are there ways to solve problems without major changes? This may not be too serious, and when discussing issues, you can agree on a quick fix.

0
source

Source: https://habr.com/ru/post/1301539/


All Articles