Where should I ask software architecture / design questions? [duplicate]
Software Engineering is the place for you.And if any one says otherwise tell them to read the on topic help section and that I sent you
â â â â â â
Software Architecture Group Decision Making
Both practitioners and researchers recognize that software architecture decision-making is a group process that involves several stakeholders discussing, evaluating and shortlisting architectural decisions. Studies of practitioners found that though groups are ideally sized, a structured approach to decision-making is largely lacking. Specifically: There is a predominance of unstructured approach to decision-making. This limits the participation of group members. There is a lack of collaborative tool support to assist architects in the decision-making process. Architects often experience delays and omissions in the decision-making process due to lack a of a structured approach Architecting teams experience challenges including Groupthink and Group polarizationThese challenges provide good scope for experimentation and research for the software architecture community.
â â â â â â
X uses a client-server model: an X server communicates with various client programs. The server accepts requests for graphical output (windows) and sends back user input (from keyboard, mouse, or touchscreen). The server may function as: an application displaying to a window of another display system a system program controlling the video output of a PC a dedicated piece of hardwareThis client-server terminology - the user's terminal being the server and the applications being the clients - often confuses new X users, because the terms appear reversed. But X takes the perspective of the application, rather than that of the end-user: X provides display and I/O services to applications, so it is a server; applications use these services, thus they are clients. The communication protocol between server and client operates network-transparently: the client and server may run on the same machine or on different ones, possibly with different architectures and operating systems. A client and server can even communicate securely over the Internet by tunneling the connection over an encrypted network session. An X client itself may emulate an X server by providing display services to other clients. This is known as "X nesting". Open-source clients such as Xnest and Xephyr support such X nesting. To use an X client application on a remote machine, the user may do the following: on the local machine, open a terminal window use ssh with the X forwarding argument to connect to the remote machine request local display/input service (e.g., export DISPLAY=[user's machine]:0 if not using SSH with X forwarding enabled)The remote X client application will then make a connection to the user's local X server, providing display and input to the user. Alternatively, the local machine may run a small program that connects to the remote machine and starts the client application. Practical examples of remote clients include: administering a remote machine graphically (similar to using remote desktop, but with single windows) using a client application to join with large numbers of other terminal users in collaborative workgroups running a computationally intensive simulation on a remote machine and displaying the results on a local desktop machine running graphical software on several machines at once, controlled by a single display, keyboard and mouse
â â â â â â
Software Architecture - From design to sucessful implementation
Determining if a project was implemented successfully is pretty easy - does it meet the business requirements and are the support costs low? Everything else (OOP, testing, documentation, guideline adherence, etc) are means to those ends.They are mighty important and incredibly useful means to the ends, but that does not make them the solution. As an architect you can follow all the rules and still fail spectacularly if you lose focus. I was going to add this as a 2nd answer, but I guess not.2 way communication is probably the most important tool an architect has. An isolated software architect who issues edicts but does not solicit and listen to feedback from the team (& from the business) is going to be ignored.
â â â â â â
In software architecture how underrated are the concepts of "not my problem" and "avoid premature generalization and/or optimization but never deliver a non-generalized/optimized product"?
"Not my problem" is more important than people might realize. (Or, citing an old Polish saying, "Not my circus, not my monkeys.") In fact, along with the requirements, a project should have a list of "anti-requirements," explicitly describing either what the end project should not do, or subproblems that are to be assumed as "outside the scope of the project." This will ensure that you are not writing code to address things that are explicitly not required. (Another application of the YAGNI principle: "You Ai not Gonna Need It.")I've addressed elsewhere the issue of program optimization, in Amy Bowersox's answer to What are some things to consider when someone wants to improve the performance of a program undergoing development? In particular, note the Knuth quote: "Premature optimization is the root of all evil." Premature generalization, moreover, is another thing that goes against the YAGNI principle. In fact, as Tom Musgrove points out, generalization and/or optimization may not even be an issue for the particular project; it may be a "use once and throw away" kind of thing, or it may always operate on a sufficiently small input data set as to make optimization not worth the effort. Basically, you wind up with a situation similar to that outlined by Kenny Rogers' "The Gambler": You got to know when to hold 'em, know when to fold 'em, Know when to walk away, and know when to run... Hat tip: Aryeh Friedman for the A2A.